diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 7e119d954..000000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -/dist -/docs -/example -/tutorials diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 3d63935a7..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - ecmaVersion: 2018, - sourceType: "module" - }, - plugins: ["prettier"], - extends: ["eslint:recommended", "plugin:jest/recommended"], - env: { - browser: true, - node: true, - mocha: true, - jest: true, - es6: true - }, - rules: { - "prefer-const": "error", - "no-var": "error", - "prettier/prettier": "error" - }, - overrides: [ - { - files: ["test/**/*.js"], - rules: { - "no-console": "off" - } - } - ] -}; diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..9dcd15831 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + time: "04:00" + open-pull-requests-limit: 10 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..debaac9da --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,54 @@ +name: Node CI + +on: [push, pull_request] + +jobs: + test: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [18.x, 20.x, 22.x] + + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: npm install, test + run: | + yarn + yarn test + + - name: type check + run: | + yarn build-types + [ $(git diff types.d.ts | wc -l) -gt 0 ] && echo 'Diff exists in types.d.ts. Please change jsdoc.' && exit 1 + tsc --noEmit types.d.ts + + - name: install valgrind + run: sudo apt-get install -y valgrind + + - name: benchmark + run: python cachegrind.py node test/benchmark2.js > output.txt + + - name: Download previous benchmark result + uses: actions/cache@v1 + with: + path: ./cache + key: ${{ runner.os }}-${{matrix.node-version}}-benchmark + + - name: Store benchmark result + uses: benchmark-action/github-action-benchmark@v1 + with: + tool: "customSmallerIsBetter" + output-file-path: output.txt + external-data-json-path: ./cache/benchmark-data.json + alert-threshold: "105%" + fail-on-alert: true + env: + CI: true diff --git a/.gitignore b/.gitignore index 9e4acfad5..e376a463b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ /coverage /.vscode /vendor +/dist *.swp composer.lock composer.json +.idea/ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..a742ac63a --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +yarpm test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3aec2b7f8..000000000 --- a/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -language: node_js -node_js: - - '6' -cache: - bundler: true - directories: - - node_modules # NPM package -before_script: - - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter - - chmod +x ./cc-test-reporter - - ./cc-test-reporter before-build -notifications: - email: false - webhooks: - urls: - - https://webhooks.gitter.im/e/f1d48355795bf25a8f9a - on_success: change - on_failure: always - on_start: never -script: npm test -after_success: cat /home/travis/build/glayzzle/php-parser/coverage/lcov.info | /home/travis/build/glayzzle/php-parser/node_modules/coveralls/bin/coveralls.js -after_script: - - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT diff --git a/README.md b/README.md index 4a1fa1971..e1e605e43 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,12 @@

php-parser

- -Coverage Status -

-

This javascript library parses PHP code and convert it to AST.

+

This JavaScript library parses PHP code and converts it to an AST.

-Installation ------------- +## Installation This library is distributed with [npm](https://www.npmjs.com/package/php-parser) : @@ -18,45 +14,42 @@ This library is distributed with [npm](https://www.npmjs.com/package/php-parser) npm install php-parser --save ``` -Usage ------ +## Usage ```js // initialize the php parser factory class -var fs = require('fs'); -var path = require('path'); -var engine = require('php-parser'); +const fs = require("fs"); +const path = require("path"); +const engine = require("php-parser"); // initialize a new parser instance -var parser = new engine({ +const parser = new engine({ // some options : parser: { extractDoc: true, - php7: true + php7: true, }, ast: { - withPositions: true - } + withPositions: true, + }, }); // Retrieve the AST from the specified source -var eval = parser.parseEval('echo "Hello World";'); +const eval = parser.parseEval('echo "Hello World";'); // Retrieve an array of tokens (same as php function token_get_all) -var tokens = parser.tokenGetAll(' Dict[str, int]: + """ + Run the the given program and arguments under Cachegrind, parse the + Cachegrind specs. + + For now we just ignore program output, and in general this is not robust. + """ + temp_file = NamedTemporaryFile("r+") + check_call([ + # Disable ASLR: + "setarch", + ARCH, + "-R", + "valgrind", + "--tool=cachegrind", + # Set some reasonable L1 and LL values, based on Haswell. You can set + # your own, important part is that they are consistent across runs, + # instead of the default of copying from the current machine. + "--I1=32768,8,64", + "--D1=32768,8,64", + "--LL=8388608,16,64", + "--cachegrind-out-file=" + temp_file.name, + ] + args_list) + return parse_cachegrind_output(temp_file) + + +def parse_cachegrind_output(temp_file): + # Parse the output file: + lines = iter(temp_file) + for line in lines: + if line.startswith("events: "): + header = line[len("events: "):].strip() + break + for line in lines: + last_line = line + assert last_line.startswith("summary: ") + last_line = last_line[len("summary:"):].strip() + return dict(zip(header.split(), [int(i) for i in last_line.split()])) + + +def get_counts(cg_results: Dict[str, int]) -> Dict[str, int]: + """ + Given the result of run_with_cachegrind(), figure out the parameters we will use for final + estimate. + + We pretend there's no L2 since Cachegrind doesn't currently support it. + + Caveats: we're not including time to process instructions, only time to + access instruction cache(s), so we're assuming time to fetch and run_with_cachegrind + instruction is the same as time to retrieve data if they're both to L1 + cache. + """ + result = {} + d = cg_results + + ram_hits = d["DLmr"] + d["DLmw"] + d["ILmr"] + + l3_hits = d["I1mr"] + d["D1mw"] + d["D1mr"] - ram_hits + + total_memory_rw = d["Ir"] + d["Dr"] + d["Dw"] + l1_hits = total_memory_rw - l3_hits - ram_hits + assert total_memory_rw == l1_hits + l3_hits + ram_hits + + result["l1"] = l1_hits + result["l3"] = l3_hits + result["ram"] = ram_hits + + return result + + +def combined_instruction_estimate(counts: Dict[str, int]) -> int: + """ + Given the result of run_with_cachegrind(), return estimate of total time to run_with_cachegrind. + + Multipliers were determined empirically, but some research suggests they're + a reasonable approximation for cache time ratios. L3 is probably too low, + but then we're not simulating L2... + """ + return counts["l1"] + (5 * counts["l3"]) + (35 * counts["ram"]) + + +def github_action_benchmark_json(value): + return json.dumps([ + { + "name": "score", + "unit": "", + "value": value, + } + ]) + + +if __name__ == "__main__": + print(github_action_benchmark_json(combined_instruction_estimate(get_counts(run_with_cachegrind(sys.argv[1:]))))) diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index 038d31b7e..000000000 --- a/dist/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - Hello, world PHP! - - -
-

Testing the PHP Parser

- - -
-
Output comes here
-
- - - - - - \ No newline at end of file diff --git a/dist/php-parser.js b/dist/php-parser.js deleted file mode 100644 index 4182910ca..000000000 --- a/dist/php-parser.js +++ /dev/null @@ -1,11165 +0,0 @@ -/*! - * - * Package: php-parser - * Parse PHP code from JS and returns its AST - * Build: 6af20f43d0d6855ac0e0 - 2020-4-24 - * Copyright (C) 2020 Glayzzle (BSD-3-Clause) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - * - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["PhpParser"] = factory(); - else - root["PhpParser"] = factory(); -})(window, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 12); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "statement"; -/** - * Any statement. - * @constructor Statement - * @extends {Node} - */ - -module.exports = Node["extends"](KIND, function Statement(kind, docs, location) { - Node.apply(this, [kind || KIND, docs, location]); -}); - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "expression"; -/** - * Any expression node. Since the left-hand side of an assignment may - * be any expression in general, an expression can also be a pattern. - * @constructor Expression - * @extends {Node} - */ - -module.exports = Node["extends"](KIND, function Expression(kind, docs, location) { - Node.apply(this, [kind || KIND, docs, location]); -}); - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/** - * A generic AST node - * @constructor Node - * @property {Location|null} loc - * @property {Comment[]} leadingComments - * @property {Comment[]?} trailingComments - * @property {String} kind - */ - -var Node = function Node(kind, docs, location) { - this.kind = kind; - - if (docs) { - this.leadingComments = docs; - } - - if (location) { - this.loc = location; - } -}; -/** - * Attach comments to current node - * @param {*} docs - */ - - -Node.prototype.setTrailingComments = function (docs) { - this.trailingComments = docs; -}; -/** - * Destroying an unused node - */ - - -Node.prototype.destroy = function (node) { - if (!node) { - throw new Error("Node already initialized, you must swap with another node"); - } - - if (this.leadingComments) { - if (node.leadingComments) { - node.leadingComments = Array.concat(this.leadingComments, node.leadingComments); - } else { - node.leadingComments = this.leadingComments; - } - } - - if (this.trailingComments) { - if (node.trailingComments) { - node.trailingComments = Array.concat(this.trailingComments, node.trailingComments); - } else { - node.trailingComments = this.trailingComments; - } - } - - return node; -}; -/** - * Includes current token position of the parser - * @param {*} parser - */ - - -Node.prototype.includeToken = function (parser) { - if (this.loc) { - if (this.loc.end) { - this.loc.end.line = parser.lexer.yylloc.last_line; - this.loc.end.column = parser.lexer.yylloc.last_column; - this.loc.end.offset = parser.lexer.offset; - } - - if (parser.ast.withSource) { - this.loc.source = parser.lexer._input.substring(this.loc.start.offset, parser.lexer.offset); - } - } - - return this; -}; -/** - * Helper for extending the Node class - * @param {String} type - * @param {Function} constructor - * @return {Function} - */ - - -Node["extends"] = function (type, constructor) { - constructor.prototype = Object.create(this.prototype); - constructor["extends"] = this["extends"]; - constructor.prototype.constructor = constructor; - constructor.kind = type; - return constructor; -}; - -module.exports = Node; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "literal"; -/** - * Defines an array structure - * @constructor Literal - * @extends {Expression} - * @property {string} raw - * @property {Node|string|number|boolean|null} value - */ - -module.exports = Expression["extends"](KIND, function Literal(kind, value, raw, docs, location) { - Expression.apply(this, [kind || KIND, docs, location]); - this.value = value; - - if (raw) { - this.raw = raw; - } -}); - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expr = __webpack_require__(1); - -var KIND = "operation"; -/** - * Defines binary operations - * @constructor Operation - * @extends {Expression} - */ - -module.exports = Expr["extends"](KIND, function Operation(kind, docs, location) { - Expr.apply(this, [kind || KIND, docs, location]); -}); - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "declaration"; -var IS_UNDEFINED = ""; -var IS_PUBLIC = "public"; -var IS_PROTECTED = "protected"; -var IS_PRIVATE = "private"; -/** - * A declaration statement (function, class, interface...) - * @constructor Declaration - * @extends {Statement} - * @property {Identifier|string} name - */ - -var Declaration = Statement["extends"](KIND, function Declaration(kind, name, docs, location) { - Statement.apply(this, [kind || KIND, docs, location]); - this.name = name; -}); -/** - * Generic flags parser - * @param {Integer[]} flags - * @return {void} - */ - -Declaration.prototype.parseFlags = function (flags) { - this.isAbstract = flags[2] === 1; - this.isFinal = flags[2] === 2; - - if (this.kind !== "class") { - if (flags[0] === -1) { - this.visibility = IS_UNDEFINED; - } else if (flags[0] === null) { - this.visibility = null; - } else if (flags[0] === 0) { - this.visibility = IS_PUBLIC; - } else if (flags[0] === 1) { - this.visibility = IS_PROTECTED; - } else if (flags[0] === 2) { - this.visibility = IS_PRIVATE; - } - - this.isStatic = flags[1] === 1; - } -}; - -module.exports = Declaration; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "reference"; -/** - * Defines a reference node - * @constructor Reference - * @extends {Node} - */ - -var Reference = Node["extends"](KIND, function Reference(kind, docs, location) { - Node.apply(this, [kind || KIND, docs, location]); -}); -module.exports = Reference; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "block"; -/** - * A block statement, i.e., a sequence of statements surrounded by braces. - * @constructor Block - * @extends {Statement} - * @property {Node[]} children - */ - -module.exports = Statement["extends"](KIND, function Block(kind, children, docs, location) { - Statement.apply(this, [kind || KIND, docs, location]); - this.children = children.filter(Boolean); -}); - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expr = __webpack_require__(1); - -var KIND = "lookup"; -/** - * Lookup on an offset in the specified object - * @constructor Lookup - * @extends {Expression} - * @property {Expression} what - * @property {Expression} offset - */ - -module.exports = Expr["extends"](KIND, function Lookup(kind, what, offset, docs, location) { - Expr.apply(this, [kind || KIND, docs, location]); - this.what = what; - this.offset = offset; -}); - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); -/** - * Abstract documentation node (ComentLine or CommentBlock) - * @constructor Comment - * @extends {Node} - * @property {String} value - */ - - -module.exports = Node["extends"]("comment", function Comment(kind, value, docs, location) { - Node.apply(this, [kind, docs, location]); - this.value = value; -}); - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "constantstatement"; -/** - * Declares a constants into the current scope - * @constructor ConstantStatement - * @extends {Statement} - * @property {Constant[]} constants - */ - -module.exports = Statement["extends"](KIND, function ConstantStatement(kind, constants, docs, location) { - Statement.apply(this, [kind || KIND, docs, location]); - this.constants = constants; -}); - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Declaration = __webpack_require__(5); - -var KIND = "function"; -/** - * Defines a classic function - * @constructor Function - * @extends {Declaration} - * @property {Parameter[]} arguments - * @property {Identifier} type - * @property {boolean} byref - * @property {boolean} nullable - * @property {Block|null} body - */ - -module.exports = Declaration["extends"](KIND, function _Function(name, args, byref, type, nullable, docs, location) { - Declaration.apply(this, [KIND, name, docs, location]); - this.arguments = args; - this.byref = byref; - this.type = type; - this.nullable = nullable; - this.body = null; -}); - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2020 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -var lexer = __webpack_require__(13); - -var parser = __webpack_require__(23); - -var tokens = __webpack_require__(39); - -var AST = __webpack_require__(40); -/** - * @private - */ - - -function combine(src, to) { - var keys = Object.keys(src); - var i = keys.length; - - while (i--) { - var k = keys[i]; - var val = src[k]; - - if (val === null) { - delete to[k]; - } else if (typeof val === "function") { - to[k] = val.bind(to); - } else if (Array.isArray(val)) { - to[k] = Array.isArray(to[k]) ? to[k].concat(val) : val; - } else if (_typeof(val) === "object") { - to[k] = _typeof(to[k]) === "object" ? combine(val, to[k]) : val; - } else { - to[k] = val; - } - } - - return to; -} -/** - * Initialise a new parser instance with the specified options - * - * @class - * @tutorial Engine - * @example - * var parser = require('php-parser'); - * var instance = new parser({ - * parser: { - * extractDoc: true, - * suppressErrors: true, - * version: 704 // or '7.4' - * }, - * ast: { - * withPositions: true - * }, - * lexer: { - * short_tags: true, - * asp_tags: true - * } - * }); - * - * var evalAST = instance.parseEval('some php code'); - * var codeAST = instance.parseCode(' 704) { - throw new Error("Can only handle versions between 5.x to 7.x"); - } - } - } - - combine(options, this); // same version flags based on parser options - - this.lexer.version = this.parser.version; - } -}; -/** - * Check if the inpyt is a buffer or a string - * @param {Buffer|String} buffer Input value that can be either a buffer or a string - * @return {String} Returns the string from input - */ - - -var getStringBuffer = function getStringBuffer(buffer) { - return typeof buffer.write === "function" ? buffer.toString() : buffer; -}; -/** - * Creates a new instance (Helper) - * @param {Object} options - * @return {Engine} - * @private - */ - - -engine.create = function (options) { - return new engine(options); -}; -/** - * Evaluate the buffer - * @private - */ - - -engine.parseEval = function (buffer, options) { - var self = new engine(options); - return self.parseEval(buffer); -}; -/** - * Parse an evaluating mode string (no need to open php tags) - * @param {String} buffer - * @return {Program} - */ - - -engine.prototype.parseEval = function (buffer) { - this.lexer.mode_eval = true; - this.lexer.all_tokens = false; - buffer = getStringBuffer(buffer); - return this.parser.parse(buffer, "eval"); -}; -/** - * Static function that parse a php code with open/close tags - * @private - */ - - -engine.parseCode = function (buffer, filename, options) { - if (_typeof(filename) === "object" && !options) { - // retro-compatibility - options = filename; - filename = "unknown"; - } - - var self = new engine(options); - return self.parseCode(buffer, filename); -}; -/** - * Function that parse a php code with open/close tags - * - * Sample code : - * ```php - * Note that the output tokens are *STRICLY* similar to PHP function `token_get_all` - * @param {String} buffer - * @return {String[]} - Each item can be a string or an array with following informations [token_name, text, line_number] - */ - - -engine.prototype.tokenGetAll = function (buffer) { - this.lexer.mode_eval = false; - this.lexer.all_tokens = true; - buffer = getStringBuffer(buffer); - var EOF = this.lexer.EOF; - var names = this.tokens.values; - this.lexer.setInput(buffer); - var token = this.lexer.lex() || EOF; - var result = []; - - while (token != EOF) { - var entry = this.lexer.yytext; - - if (names.hasOwnProperty(token)) { - entry = [names[token], entry, this.lexer.yylloc.first_line]; - } - - result.push(entry); - token = this.lexer.lex() || EOF; - } - - return result; -}; // exports the function - - -module.exports = engine; // makes libraries public - -module.exports.tokens = tokens; -module.exports.lexer = lexer; -module.exports.AST = AST; -module.exports.parser = parser; -module.exports.combine = combine; // allow the default export in index.d.ts - -module.exports["default"] = engine; - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/** - * This is the php lexer. It will tokenize the string for helping the - * parser to build the AST from its grammar. - * - * @class - * @property {Integer} EOF - * @property {Boolean} all_tokens defines if all tokens must be retrieved (used by token_get_all only) - * @property {Boolean} comment_tokens extracts comments tokens - * @property {Boolean} mode_eval enables the evald mode (ignore opening tags) - * @property {Boolean} asp_tags disables by default asp tags mode - * @property {Boolean} short_tags enables by default short tags mode - * @property {Object} keywords List of php keyword - * @property {Object} castKeywords List of php keywords for type casting - */ - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -var lexer = function lexer(engine) { - this.engine = engine; - this.tok = this.engine.tokens.names; - this.EOF = 1; - this.debug = false; - this.all_tokens = true; - this.comment_tokens = false; - this.mode_eval = false; - this.asp_tags = false; - this.short_tags = false; - this.version = 704; - this.yyprevcol = 0; - this.keywords = { - __class__: this.tok.T_CLASS_C, - __trait__: this.tok.T_TRAIT_C, - __function__: this.tok.T_FUNC_C, - __method__: this.tok.T_METHOD_C, - __line__: this.tok.T_LINE, - __file__: this.tok.T_FILE, - __dir__: this.tok.T_DIR, - __namespace__: this.tok.T_NS_C, - exit: this.tok.T_EXIT, - die: this.tok.T_EXIT, - "function": this.tok.T_FUNCTION, - "const": this.tok.T_CONST, - "return": this.tok.T_RETURN, - "try": this.tok.T_TRY, - "catch": this.tok.T_CATCH, - "finally": this.tok.T_FINALLY, - "throw": this.tok.T_THROW, - "if": this.tok.T_IF, - elseif: this.tok.T_ELSEIF, - endif: this.tok.T_ENDIF, - "else": this.tok.T_ELSE, - "while": this.tok.T_WHILE, - endwhile: this.tok.T_ENDWHILE, - "do": this.tok.T_DO, - "for": this.tok.T_FOR, - endfor: this.tok.T_ENDFOR, - foreach: this.tok.T_FOREACH, - endforeach: this.tok.T_ENDFOREACH, - declare: this.tok.T_DECLARE, - enddeclare: this.tok.T_ENDDECLARE, - "instanceof": this.tok.T_INSTANCEOF, - as: this.tok.T_AS, - "switch": this.tok.T_SWITCH, - endswitch: this.tok.T_ENDSWITCH, - "case": this.tok.T_CASE, - "default": this.tok.T_DEFAULT, - "break": this.tok.T_BREAK, - "continue": this.tok.T_CONTINUE, - "goto": this.tok.T_GOTO, - echo: this.tok.T_ECHO, - print: this.tok.T_PRINT, - "class": this.tok.T_CLASS, - "interface": this.tok.T_INTERFACE, - trait: this.tok.T_TRAIT, - "extends": this.tok.T_EXTENDS, - "implements": this.tok.T_IMPLEMENTS, - "new": this.tok.T_NEW, - clone: this.tok.T_CLONE, - "var": this.tok.T_VAR, - eval: this.tok.T_EVAL, - include: this.tok.T_INCLUDE, - include_once: this.tok.T_INCLUDE_ONCE, - require: this.tok.T_REQUIRE, - require_once: this.tok.T_REQUIRE_ONCE, - namespace: this.tok.T_NAMESPACE, - use: this.tok.T_USE, - insteadof: this.tok.T_INSTEADOF, - global: this.tok.T_GLOBAL, - isset: this.tok.T_ISSET, - empty: this.tok.T_EMPTY, - __halt_compiler: this.tok.T_HALT_COMPILER, - "static": this.tok.T_STATIC, - "abstract": this.tok.T_ABSTRACT, - "final": this.tok.T_FINAL, - "private": this.tok.T_PRIVATE, - "protected": this.tok.T_PROTECTED, - "public": this.tok.T_PUBLIC, - unset: this.tok.T_UNSET, - list: this.tok.T_LIST, - array: this.tok.T_ARRAY, - callable: this.tok.T_CALLABLE, - or: this.tok.T_LOGICAL_OR, - and: this.tok.T_LOGICAL_AND, - xor: this.tok.T_LOGICAL_XOR - }; - this.castKeywords = { - "int": this.tok.T_INT_CAST, - integer: this.tok.T_INT_CAST, - real: this.tok.T_DOUBLE_CAST, - "double": this.tok.T_DOUBLE_CAST, - "float": this.tok.T_DOUBLE_CAST, - string: this.tok.T_STRING_CAST, - binary: this.tok.T_STRING_CAST, - array: this.tok.T_ARRAY_CAST, - object: this.tok.T_OBJECT_CAST, - bool: this.tok.T_BOOL_CAST, - "boolean": this.tok.T_BOOL_CAST, - unset: this.tok.T_UNSET_CAST - }; -}; -/** - * Initialize the lexer with the specified input - */ - - -lexer.prototype.setInput = function (input) { - this._input = input; - this.size = input.length; - this.yylineno = 1; - this.offset = 0; - this.yyprevcol = 0; - this.yytext = ""; - this.yylloc = { - first_offset: 0, - first_line: 1, - first_column: 0, - prev_offset: 0, - prev_line: 1, - prev_column: 0, - last_line: 1, - last_column: 0 - }; - this.tokens = []; - - if (this.version > 703) { - this.keywords.fn = this.tok.T_FN; - } else { - delete this.keywords.fn; - } - - this.done = this.offset >= this.size; - - if (!this.all_tokens && this.mode_eval) { - this.conditionStack = ["INITIAL"]; - this.begin("ST_IN_SCRIPTING"); - } else { - this.conditionStack = []; - this.begin("INITIAL"); - } // https://github.com/php/php-src/blob/999e32b65a8a4bb59e27e538fa68ffae4b99d863/Zend/zend_language_scanner.h#L59 - // Used for heredoc and nowdoc - - - this.heredoc_label = { - label: "", - length: 0, - indentation: 0, - indentation_uses_spaces: false, - finished: false, - - /** - * this used for parser to detemine the if current node segment is first encaps node. - * if ture, the indentation will remove from the begining. and if false, the prev node - * might be a variable '}' ,and the leading spaces should not be removed util meet the - * first \n - */ - first_encaps_node: false, - // for backward compatible - toString: function toString() { - this.label; - } - }; - return this; -}; -/** - * consumes and returns one char from the input - */ - - -lexer.prototype.input = function () { - var ch = this._input[this.offset]; - if (!ch) return ""; - this.yytext += ch; - this.offset++; - - if (ch === "\r" && this._input[this.offset] === "\n") { - this.yytext += "\n"; - this.offset++; - } - - if (ch === "\n" || ch === "\r") { - this.yylloc.last_line = ++this.yylineno; - this.yyprevcol = this.yylloc.last_column; - this.yylloc.last_column = 0; - } else { - this.yylloc.last_column++; - } - - return ch; -}; -/** - * revert eating specified size - */ - - -lexer.prototype.unput = function (size) { - if (size === 1) { - // 1 char unput (most cases) - this.offset--; - - if (this._input[this.offset] === "\n" && this._input[this.offset - 1] === "\r") { - this.offset--; - size++; - } - - if (this._input[this.offset] === "\r" || this._input[this.offset] === "\n") { - this.yylloc.last_line--; - this.yylineno--; - this.yylloc.last_column = this.yyprevcol; - } else { - this.yylloc.last_column--; - } - - this.yytext = this.yytext.substring(0, this.yytext.length - size); - } else if (size > 0) { - this.offset -= size; - - if (size < this.yytext.length) { - this.yytext = this.yytext.substring(0, this.yytext.length - size); // re-calculate position - - this.yylloc.last_line = this.yylloc.first_line; - this.yylloc.last_column = this.yyprevcol = this.yylloc.first_column; - - for (var i = 0; i < this.yytext.length; i++) { - var c = this.yytext[i]; - - if (c === "\r") { - c = this.yytext[++i]; - this.yyprevcol = this.yylloc.last_column; - this.yylloc.last_line++; - this.yylloc.last_column = 0; - - if (c !== "\n") { - if (c === "\r") { - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - } - } else if (c === "\n") { - this.yyprevcol = this.yylloc.last_column; - this.yylloc.last_line++; - this.yylloc.last_column = 0; - } else { - this.yylloc.last_column++; - } - } - - this.yylineno = this.yylloc.last_line; - } else { - // reset full text - this.yytext = ""; - this.yylloc.last_line = this.yylineno = this.yylloc.first_line; - this.yylloc.last_column = this.yylloc.first_column; - } - } - - return this; -}; // check if the text matches - - -lexer.prototype.tryMatch = function (text) { - return text === this.ahead(text.length); -}; // check if the text matches - - -lexer.prototype.tryMatchCaseless = function (text) { - return text === this.ahead(text.length).toLowerCase(); -}; // look ahead - - -lexer.prototype.ahead = function (size) { - var text = this._input.substring(this.offset, this.offset + size); - - if (text[text.length - 1] === "\r" && this._input[this.offset + size + 1] === "\n") { - text += "\n"; - } - - return text; -}; // consume the specified size - - -lexer.prototype.consume = function (size) { - for (var i = 0; i < size; i++) { - var ch = this._input[this.offset]; - if (!ch) break; - this.yytext += ch; - this.offset++; - - if (ch === "\r" && this._input[this.offset] === "\n") { - this.yytext += "\n"; - this.offset++; - i++; - } - - if (ch === "\n" || ch === "\r") { - this.yylloc.last_line = ++this.yylineno; - this.yyprevcol = this.yylloc.last_column; - this.yylloc.last_column = 0; - } else { - this.yylloc.last_column++; - } - } - - return this; -}; -/** - * Gets the current state - */ - - -lexer.prototype.getState = function () { - return { - yytext: this.yytext, - offset: this.offset, - yylineno: this.yylineno, - yyprevcol: this.yyprevcol, - yylloc: { - first_offset: this.yylloc.first_offset, - first_line: this.yylloc.first_line, - first_column: this.yylloc.first_column, - last_line: this.yylloc.last_line, - last_column: this.yylloc.last_column - }, - heredoc_label: this.heredoc_label - }; -}; -/** - * Sets the current lexer state - */ - - -lexer.prototype.setState = function (state) { - this.yytext = state.yytext; - this.offset = state.offset; - this.yylineno = state.yylineno; - this.yyprevcol = state.yyprevcol; - this.yylloc = state.yylloc; - - if (state.heredoc_label) { - this.heredoc_label = state.heredoc_label; - } - - return this; -}; // prepend next token - - -lexer.prototype.appendToken = function (value, ahead) { - this.tokens.push([value, ahead]); - return this; -}; // return next match that has a token - - -lexer.prototype.lex = function () { - this.yylloc.prev_offset = this.offset; - this.yylloc.prev_line = this.yylloc.last_line; - this.yylloc.prev_column = this.yylloc.last_column; - var token = this.next() || this.lex(); - - if (!this.all_tokens) { - while (token === this.tok.T_WHITESPACE || // ignore white space - !this.comment_tokens && (token === this.tok.T_COMMENT || // ignore single lines comments - token === this.tok.T_DOC_COMMENT) || // ignore doc comments - // ignore open tags - token === this.tok.T_OPEN_TAG) { - token = this.next() || this.lex(); - } - - if (token == this.tok.T_OPEN_TAG_WITH_ECHO) { - // https://github.com/php/php-src/blob/7ff186434e82ee7be7c59d0db9a976641cf7b09c/Zend/zend_compile.c#L1683 - // open tag with echo statement - return this.tok.T_ECHO; - } else if (token === this.tok.T_CLOSE_TAG) { - // https://github.com/php/php-src/blob/7ff186434e82ee7be7c59d0db9a976641cf7b09c/Zend/zend_compile.c#L1680 - return ";"; - /* implicit ; */ - } - } - - if (!this.yylloc.prev_offset) { - this.yylloc.prev_offset = this.yylloc.first_offset; - this.yylloc.prev_line = this.yylloc.first_line; - this.yylloc.prev_column = this.yylloc.first_column; - } - /*else if (this.yylloc.prev_offset === this.offset && this.offset !== this.size) { - throw new Error('Infinite loop @ ' + this.offset + ' / ' + this.size); - }*/ - - - return token; -}; // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - - -lexer.prototype.begin = function (condition) { - this.conditionStack.push(condition); - this.curCondition = condition; - this.stateCb = this["match" + condition]; - - if (typeof this.stateCb !== "function") { - throw new Error('Undefined condition state "' + condition + '"'); - } - - return this; -}; // pop the previously active lexer condition state off the condition stack - - -lexer.prototype.popState = function () { - var n = this.conditionStack.length - 1; - var condition = n > 0 ? this.conditionStack.pop() : this.conditionStack[0]; - this.curCondition = this.conditionStack[this.conditionStack.length - 1]; - this.stateCb = this["match" + this.curCondition]; - - if (typeof this.stateCb !== "function") { - throw new Error('Undefined condition state "' + this.curCondition + '"'); - } - - return condition; -}; // return next match in input - - -lexer.prototype.next = function () { - var token; - - if (!this._input) { - this.done = true; - } - - this.yylloc.first_offset = this.offset; - this.yylloc.first_line = this.yylloc.last_line; - this.yylloc.first_column = this.yylloc.last_column; - this.yytext = ""; - - if (this.done) { - this.yylloc.prev_offset = this.yylloc.first_offset; - this.yylloc.prev_line = this.yylloc.first_line; - this.yylloc.prev_column = this.yylloc.first_column; - return this.EOF; - } - - if (this.tokens.length > 0) { - token = this.tokens.shift(); - - if (_typeof(token[1]) === "object") { - this.setState(token[1]); - } else { - this.consume(token[1]); - } - - token = token[0]; - } else { - token = this.stateCb.apply(this, []); - } - - if (this.offset >= this.size && this.tokens.length === 0) { - this.done = true; - } - - if (this.debug) { - var tName = token; - - if (typeof tName === "number") { - tName = this.engine.tokens.values[tName]; - } else { - tName = '"' + tName + '"'; - } - - var e = new Error(tName + "\tfrom " + this.yylloc.first_line + "," + this.yylloc.first_column + "\t - to " + this.yylloc.last_line + "," + this.yylloc.last_column + '\t"' + this.yytext + '"'); // eslint-disable-next-line no-console - - console.error(e.stack); - } - - return token; -}; // extends the lexer with states - - -[__webpack_require__(14), __webpack_require__(15), __webpack_require__(16), __webpack_require__(18), __webpack_require__(19), __webpack_require__(20), __webpack_require__(21), __webpack_require__(22)].forEach(function (ext) { - for (var k in ext) { - lexer.prototype[k] = ext[k]; - } -}); -module.exports = lexer; - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Reads a single line comment - */ - T_COMMENT: function T_COMMENT() { - while (this.offset < this.size) { - var ch = this.input(); - - if (ch === "\n" || ch === "\r") { - return this.tok.T_COMMENT; - } else if (ch === "?" && !this.aspTagMode && this._input[this.offset] === ">") { - this.unput(1); - return this.tok.T_COMMENT; - } else if (ch === "%" && this.aspTagMode && this._input[this.offset] === ">") { - this.unput(1); - return this.tok.T_COMMENT; - } - } - - return this.tok.T_COMMENT; - }, - - /** - * Behaviour : https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1927 - */ - T_DOC_COMMENT: function T_DOC_COMMENT() { - var ch = this.input(); - var token = this.tok.T_COMMENT; - - if (ch === "*") { - // started with '/*' , check is next is '*' - ch = this.input(); - - if (this.is_WHITESPACE()) { - // check if next is WHITESPACE - token = this.tok.T_DOC_COMMENT; - } - - if (ch === "/") { - return token; - } else { - this.unput(1); // reset - } - } - - while (this.offset < this.size) { - ch = this.input(); - - if (ch === "*" && this._input[this.offset] === "/") { - this.input(); - break; - } - } - - return token; - } -}; - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - nextINITIAL: function nextINITIAL() { - if (this.conditionStack.length > 1 && this.conditionStack[this.conditionStack.length - 1] === "INITIAL") { - // Return to HEREDOC/ST_DOUBLE_QUOTES mode - this.popState(); - } else { - this.begin("ST_IN_SCRIPTING"); - } - - return this; - }, - matchINITIAL: function matchINITIAL() { - while (this.offset < this.size) { - var ch = this.input(); - - if (ch == "<") { - ch = this.ahead(1); - - if (ch == "?") { - if (this.tryMatch("?=")) { - this.unput(1).appendToken(this.tok.T_OPEN_TAG_WITH_ECHO, 3).nextINITIAL(); - break; - } else if (this.tryMatchCaseless("?php")) { - ch = this._input[this.offset + 4]; - - if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r") { - this.unput(1).appendToken(this.tok.T_OPEN_TAG, 6).nextINITIAL(); - break; - } - } - - if (this.short_tags) { - this.unput(1).appendToken(this.tok.T_OPEN_TAG, 2).nextINITIAL(); - break; - } - } else if (this.asp_tags && ch == "%") { - if (this.tryMatch("%=")) { - this.aspTagMode = true; - this.unput(1).appendToken(this.tok.T_OPEN_TAG_WITH_ECHO, 3).nextINITIAL(); - break; - } else { - this.aspTagMode = true; - this.unput(1).appendToken(this.tok.T_OPEN_TAG, 2).nextINITIAL(); - break; - } - } - } - } - - if (this.yytext.length > 0) { - return this.tok.T_INLINE_HTML; - } else { - return false; - } - } -}; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/* istanbul ignore else */ - -var MAX_LENGTH_OF_LONG = 10; -var long_min_digits = "2147483648"; - -if (process.arch == "x64") { - MAX_LENGTH_OF_LONG = 19; - long_min_digits = "9223372036854775808"; -} - -module.exports = { - consume_NUM: function consume_NUM() { - var ch = this.yytext[0]; - var hasPoint = ch === "."; - - if (ch === "0") { - ch = this.input(); // check if hexa - - if (ch === "x" || ch === "X") { - ch = this.input(); - - if (ch !== "_" && this.is_HEX()) { - return this.consume_HNUM(); - } else { - this.unput(ch ? 2 : 1); - } // check binary notation - - } else if (ch === "b" || ch === "B") { - ch = this.input(); - - if (ch !== "_" && ch === "0" || ch === "1") { - return this.consume_BNUM(); - } else { - this.unput(ch ? 2 : 1); - } // @fixme check octal notation ? not usefull - - } else if (!this.is_NUM()) { - if (ch) this.unput(1); - } - } - - while (this.offset < this.size) { - var prev = ch; - ch = this.input(); - - if (ch === "_") { - if (prev === "_") { - // restriction : next to underscore / 1__1; - this.unput(2); // keep 1 - - break; - } - - if (prev === ".") { - // next to decimal point "1._0" - this.unput(1); // keep 1. - - break; - } - - if (prev === "e" || prev === "E") { - // next to e "1e_10" - this.unput(2); // keep 1 - - break; - } - } else if (ch === ".") { - if (hasPoint) { - // no multiple points "1.0.5" - this.unput(1); // keep 1.0 - - break; - } - - if (prev === "_") { - // next to decimal point "1_.0" - this.unput(2); // keep 1 - - break; - } - - hasPoint = true; - continue; - } else if (ch === "e" || ch === "E") { - if (prev === "_") { - // next to e "1_e10" - this.unput(1); - break; - } - - var undo = 2; - ch = this.input(); - - if (ch === "+" || ch === "-") { - // 1e-5 - undo = 3; - ch = this.input(); - } - - if (this.is_NUM_START()) { - this.consume_LNUM(); - return this.tok.T_DNUMBER; - } - - this.unput(ch ? undo : undo - 1); // keep only 1 - - break; - } - - if (!this.is_NUM()) { - // example : 10.0a - if (ch) this.unput(1); // keep 10.0 - - break; - } - } - - if (hasPoint) { - return this.tok.T_DNUMBER; - } else if (this.yytext.length < MAX_LENGTH_OF_LONG - 1) { - return this.tok.T_LNUMBER; - } else { - if (this.yytext.length < MAX_LENGTH_OF_LONG || this.yytext.length == MAX_LENGTH_OF_LONG && this.yytext < long_min_digits) { - return this.tok.T_LNUMBER; - } - - return this.tok.T_DNUMBER; - } - }, - // read hexa - consume_HNUM: function consume_HNUM() { - while (this.offset < this.size) { - var ch = this.input(); - - if (!this.is_HEX()) { - if (ch) this.unput(1); - break; - } - } - - return this.tok.T_LNUMBER; - }, - // read a generic number - consume_LNUM: function consume_LNUM() { - while (this.offset < this.size) { - var ch = this.input(); - - if (!this.is_NUM()) { - if (ch) this.unput(1); - break; - } - } - - return this.tok.T_LNUMBER; - }, - // read binary - consume_BNUM: function consume_BNUM() { - var ch; - - while (this.offset < this.size) { - ch = this.input(); - - if (ch !== "0" && ch !== "1" && ch !== "_") { - if (ch) this.unput(1); - break; - } - } - - return this.tok.T_LNUMBER; - } -}; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(17))) - -/***/ }), -/* 17 */ -/***/ (function(module, exports) { - -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - matchST_LOOKING_FOR_PROPERTY: function matchST_LOOKING_FOR_PROPERTY() { - var ch = this.input(); - - if (ch === "-") { - ch = this.input(); - - if (ch === ">") { - // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1296 - return this.tok.T_OBJECT_OPERATOR; - } - - if (ch) this.unput(1); - } else if (this.is_WHITESPACE()) { - return this.tok.T_WHITESPACE; - } else if (this.is_LABEL_START()) { - // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1300 - this.consume_LABEL(); - this.popState(); - return this.tok.T_STRING; - } // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1306 - - - this.popState(); - if (ch) this.unput(1); - return false; - }, - matchST_LOOKING_FOR_VARNAME: function matchST_LOOKING_FOR_VARNAME() { - var ch = this.input(); // SHIFT STATE - - this.popState(); - this.begin("ST_IN_SCRIPTING"); - - if (this.is_LABEL_START()) { - this.consume_LABEL(); - ch = this.input(); - - if (ch === "[" || ch === "}") { - this.unput(1); - return this.tok.T_STRING_VARNAME; - } else { - // any char (that's started with a label sequence) - this.unput(this.yytext.length); - } - } else { - // any char (thats not a label start sequence) - if (ch) this.unput(1); - } // stops looking for a varname and starts the scripting mode - - - return false; - }, - matchST_VAR_OFFSET: function matchST_VAR_OFFSET() { - var ch = this.input(); - - if (this.is_NUM_START()) { - this.consume_NUM(); - return this.tok.T_NUM_STRING; - } else if (ch === "]") { - this.popState(); - return "]"; - } else if (ch === "$") { - this.input(); - - if (this.is_LABEL_START()) { - this.consume_LABEL(); - return this.tok.T_VARIABLE; - } else { - throw new Error("Unexpected terminal"); - } - } else if (this.is_LABEL_START()) { - this.consume_LABEL(); - return this.tok.T_STRING; - } else if (this.is_WHITESPACE() || ch === "\\" || ch === "'" || ch === "#") { - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else if (ch === "[" || ch === "{" || ch === "}" || ch === '"' || ch === "`" || this.is_TOKEN()) { - return ch; - } else { - throw new Error("Unexpected terminal"); - } - } -}; - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - matchST_IN_SCRIPTING: function matchST_IN_SCRIPTING() { - var ch = this.input(); - - switch (ch) { - case " ": - case "\t": - case "\n": - case "\r": - case "\r\n": - return this.T_WHITESPACE(); - - case "#": - return this.T_COMMENT(); - - case "/": - if (this._input[this.offset] === "/") { - return this.T_COMMENT(); - } else if (this._input[this.offset] === "*") { - this.input(); - return this.T_DOC_COMMENT(); - } - - return this.consume_TOKEN(); - - case "'": - return this.T_CONSTANT_ENCAPSED_STRING(); - - case '"': - return this.ST_DOUBLE_QUOTES(); - - case "`": - this.begin("ST_BACKQUOTE"); - return "`"; - - case "?": - if (!this.aspTagMode && this.tryMatch(">")) { - this.input(); - var nextCH = this._input[this.offset]; - if (nextCH === "\n" || nextCH === "\r") this.input(); - - if (this.conditionStack.length > 1) { - this.begin("INITIAL"); - } - - return this.tok.T_CLOSE_TAG; - } - - return this.consume_TOKEN(); - - case "%": - if (this.aspTagMode && this._input[this.offset] === ">") { - this.input(); // consume the '>' - - ch = this._input[this.offset]; // read next - - if (ch === "\n" || ch === "\r") { - this.input(); // consume the newline - } - - this.aspTagMode = false; - - if (this.conditionStack.length > 1) { - this.begin("INITIAL"); - } - - return this.tok.T_CLOSE_TAG; - } - - return this.consume_TOKEN(); - - case "{": - this.begin("ST_IN_SCRIPTING"); - return "{"; - - case "}": - if (this.conditionStack.length > 2) { - // Return to HEREDOC/ST_DOUBLE_QUOTES mode - this.popState(); - } - - return "}"; - - default: - if (ch === ".") { - ch = this.input(); - - if (this.is_NUM_START()) { - return this.consume_NUM(); - } else { - if (ch) this.unput(1); - } - } - - if (this.is_NUM_START()) { - return this.consume_NUM(); - } else if (this.is_LABEL_START()) { - return this.consume_LABEL().T_STRING(); - } else if (this.is_TOKEN()) { - return this.consume_TOKEN(); - } - - } - - throw new Error('Bad terminal sequence "' + ch + '" at line ' + this.yylineno + " (offset " + this.offset + ")"); - }, - T_WHITESPACE: function T_WHITESPACE() { - while (this.offset < this.size) { - var ch = this.input(); - - if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r") { - continue; - } - - if (ch) this.unput(1); - break; - } - - return this.tok.T_WHITESPACE; - } -}; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var newline = ["\n", "\r"]; -var valid_after_heredoc = ["\n", "\r", ";"]; -var valid_after_heredoc_73 = valid_after_heredoc.concat(["\t", " ", ",", "]", ")", "/", "=", "!"]); -module.exports = { - T_CONSTANT_ENCAPSED_STRING: function T_CONSTANT_ENCAPSED_STRING() { - var ch; - - while (this.offset < this.size) { - ch = this.input(); - - if (ch == "\\") { - this.input(); - } else if (ch == "'") { - break; - } - } - - return this.tok.T_CONSTANT_ENCAPSED_STRING; - }, - // check if matching a HEREDOC state - is_HEREDOC: function is_HEREDOC() { - var revert = this.offset; - - if (this._input[this.offset - 1] === "<" && this._input[this.offset] === "<" && this._input[this.offset + 1] === "<") { - this.offset += 3; // optional tabs / spaces - - if (this.is_TABSPACE()) { - while (this.offset < this.size) { - this.offset++; - - if (!this.is_TABSPACE()) { - break; - } - } - } // optional quotes - - - var tChar = this._input[this.offset - 1]; - - if (tChar === "'" || tChar === '"') { - this.offset++; - } else { - tChar = null; - } // required label - - - if (this.is_LABEL_START()) { - var yyoffset = this.offset - 1; - - while (this.offset < this.size) { - this.offset++; - - if (!this.is_LABEL()) { - break; - } - } - - var yylabel = this._input.substring(yyoffset, this.offset - 1); - - if (!tChar || tChar === this._input[this.offset - 1]) { - // required ending quote - if (tChar) this.offset++; // require newline - - if (newline.includes(this._input[this.offset - 1])) { - // go go go - this.heredoc_label.label = yylabel; - this.heredoc_label.length = yylabel.length; - this.heredoc_label.finished = false; - yyoffset = this.offset - revert; - this.offset = revert; - this.consume(yyoffset); - - if (tChar === "'") { - this.begin("ST_NOWDOC"); - } else { - this.begin("ST_HEREDOC"); - } // prematch to get the indentation information from end of doc - - - this.prematch_ENDOFDOC(); - return this.tok.T_START_HEREDOC; - } - } - } - } - - this.offset = revert; - return false; - }, - ST_DOUBLE_QUOTES: function ST_DOUBLE_QUOTES() { - var ch; - - while (this.offset < this.size) { - ch = this.input(); - - if (ch == "\\") { - this.input(); - } else if (ch == '"') { - break; - } else if (ch == "$") { - ch = this.input(); - - if (ch == "{" || this.is_LABEL_START()) { - this.unput(2); - break; - } - - if (ch) this.unput(1); - } else if (ch == "{") { - ch = this.input(); - - if (ch == "$") { - this.unput(2); - break; - } - - if (ch) this.unput(1); - } - } - - if (ch == '"') { - return this.tok.T_CONSTANT_ENCAPSED_STRING; - } else { - var prefix = 1; - - if (this.yytext[0] === "b" || this.yytext[0] === "B") { - prefix = 2; - } - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_ENCAPSED_AND_WHITESPACE, this.yytext.length - prefix); - } - - this.unput(this.yytext.length - prefix); - this.begin("ST_DOUBLE_QUOTES"); - return this.yytext; - } - }, - // check if its a DOC end sequence - isDOC_MATCH: function isDOC_MATCH(offset, consumeLeadingSpaces) { - // @fixme : check if out of text limits - // consumeLeadingSpaces is false happen DOC prematch END HEREDOC stage. - // Ensure current state is really after a new line break, not after a such as ${variables} - var prev_ch = this._input[offset - 2]; - - if (!newline.includes(prev_ch)) { - return false; - } // skip leading spaces or tabs - - - var indentation_uses_spaces = false; - var indentation_uses_tabs = false; // reset heredoc_label structure - - var indentation = 0; - var leading_ch = this._input[offset - 1]; - - if (this.version >= 703) { - while (leading_ch === "\t" || leading_ch === " ") { - if (leading_ch === " ") { - indentation_uses_spaces = true; - } else if (leading_ch === "\t") { - indentation_uses_tabs = true; - } - - leading_ch = this._input[offset + indentation]; - indentation++; - } // Move offset to skip leading whitespace - - - offset = offset + indentation; // return out if there was only whitespace on this line - - if (newline.includes(this._input[offset - 1])) { - return false; - } - } - - if (this._input.substring(offset - 1, offset - 1 + this.heredoc_label.length) === this.heredoc_label.label) { - var ch = this._input[offset - 1 + this.heredoc_label.length]; - - if ((this.version >= 703 ? valid_after_heredoc_73 : valid_after_heredoc).includes(ch)) { - if (consumeLeadingSpaces) { - this.consume(indentation); // https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes - - if (indentation_uses_spaces && indentation_uses_tabs) { - throw new Error("Parse error: mixing spaces and tabs in ending marker at line " + this.yylineno + " (offset " + this.offset + ")"); - } - } else { - // Called in prematch_ENDOFDOC - this.heredoc_label.indentation = indentation; - this.heredoc_label.indentation_uses_spaces = indentation_uses_spaces; - this.heredoc_label.first_encaps_node = true; - } - - return true; - } - } - - return false; - }, - - /** - * Prematch the end of HEREDOC/NOWDOC end tag to preset the - * context of this.heredoc_label - */ - prematch_ENDOFDOC: function prematch_ENDOFDOC() { - // reset heredoc - this.heredoc_label.indentation_uses_spaces = false; - this.heredoc_label.indentation = 0; - this.heredoc_label.first_encaps_node = true; - var offset = this.offset + 1; - - while (offset < this._input.length) { - // if match heredoc_label structrue will be set - if (this.isDOC_MATCH(offset, false)) { - return; - } - - if (!newline.includes(this._input[offset - 1])) { - // skip one line - while (!newline.includes(this._input[offset++]) && offset < this._input.length) {// skip - } - } - - offset++; - } - }, - matchST_NOWDOC: function matchST_NOWDOC() { - /** edge case : empty now doc **/ - if (this.isDOC_MATCH(this.offset, true)) { - // @fixme : never reached (may be caused by quotes) - this.consume(this.heredoc_label.length); - this.popState(); - return this.tok.T_END_HEREDOC; - } - /** SCANNING CONTENTS **/ - - - var ch = this._input[this.offset - 1]; - - while (this.offset < this.size) { - if (newline.includes(ch)) { - ch = this.input(); - - if (this.isDOC_MATCH(this.offset, true)) { - this.unput(1).popState(); - this.appendToken(this.tok.T_END_HEREDOC, this.heredoc_label.length); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } - } else { - ch = this.input(); - } - } // too bad ! reached end of document (will get a parse error) - - - return this.tok.T_ENCAPSED_AND_WHITESPACE; - }, - matchST_HEREDOC: function matchST_HEREDOC() { - /** edge case : empty here doc **/ - var ch = this.input(); - - if (this.isDOC_MATCH(this.offset, true)) { - this.consume(this.heredoc_label.length - 1); - this.popState(); - return this.tok.T_END_HEREDOC; - } - /** SCANNING CONTENTS **/ - - - while (this.offset < this.size) { - if (ch === "\\") { - ch = this.input(); // ignore next - - if (!newline.includes(ch)) { - ch = this.input(); - } - } - - if (newline.includes(ch)) { - ch = this.input(); - - if (this.isDOC_MATCH(this.offset, true)) { - this.unput(1).popState(); - this.appendToken(this.tok.T_END_HEREDOC, this.heredoc_label.length); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } - } else if (ch === "$") { - ch = this.input(); - - if (ch === "{") { - // start of ${ - this.begin("ST_LOOKING_FOR_VARNAME"); - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES, 2); - this.unput(2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - return this.tok.T_DOLLAR_OPEN_CURLY_BRACES; - } - } else if (this.is_LABEL_START()) { - // start of $var... - var yyoffset = this.offset; - var next = this.consume_VARIABLE(); - - if (this.yytext.length > this.offset - yyoffset + 2) { - this.appendToken(next, this.offset - yyoffset + 2); - this.unput(this.offset - yyoffset + 2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - return next; - } //console.log(this.yytext); - - } - } else if (ch === "{") { - ch = this.input(); - - if (ch === "$") { - // start of {$... - this.begin("ST_IN_SCRIPTING"); - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_CURLY_OPEN, 1); - this.unput(2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - this.unput(1); - return this.tok.T_CURLY_OPEN; - } - } - } else { - ch = this.input(); - } - } // too bad ! reached end of document (will get a parse error) - - - return this.tok.T_ENCAPSED_AND_WHITESPACE; - }, - consume_VARIABLE: function consume_VARIABLE() { - this.consume_LABEL(); - var ch = this.input(); - - if (ch == "[") { - this.unput(1); - this.begin("ST_VAR_OFFSET"); - return this.tok.T_VARIABLE; - } else if (ch === "-") { - if (this.input() === ">") { - this.input(); - - if (this.is_LABEL_START()) { - this.begin("ST_LOOKING_FOR_PROPERTY"); - } - - this.unput(3); - return this.tok.T_VARIABLE; - } else { - this.unput(2); - } - } else { - if (ch) this.unput(1); - } - - return this.tok.T_VARIABLE; - }, - // HANDLES BACKQUOTES - matchST_BACKQUOTE: function matchST_BACKQUOTE() { - var ch = this.input(); - - if (ch === "$") { - ch = this.input(); - - if (ch === "{") { - this.begin("ST_LOOKING_FOR_VARNAME"); - return this.tok.T_DOLLAR_OPEN_CURLY_BRACES; - } else if (this.is_LABEL_START()) { - var tok = this.consume_VARIABLE(); - return tok; - } - } else if (ch === "{") { - if (this._input[this.offset] === "$") { - this.begin("ST_IN_SCRIPTING"); - return this.tok.T_CURLY_OPEN; - } - } else if (ch === "`") { - this.popState(); - return "`"; - } // any char - - - while (this.offset < this.size) { - if (ch === "\\") { - this.input(); - } else if (ch === "`") { - this.unput(1); - this.popState(); - this.appendToken("`", 1); - break; - } else if (ch === "$") { - ch = this.input(); - - if (ch === "{") { - this.begin("ST_LOOKING_FOR_VARNAME"); - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES, 2); - this.unput(2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - return this.tok.T_DOLLAR_OPEN_CURLY_BRACES; - } - } else if (this.is_LABEL_START()) { - // start of $var... - var yyoffset = this.offset; - var next = this.consume_VARIABLE(); - - if (this.yytext.length > this.offset - yyoffset + 2) { - this.appendToken(next, this.offset - yyoffset + 2); - this.unput(this.offset - yyoffset + 2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - return next; - } - } - - continue; - } else if (ch === "{") { - ch = this.input(); - - if (ch === "$") { - // start of {$... - this.begin("ST_IN_SCRIPTING"); - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_CURLY_OPEN, 1); - this.unput(2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - this.unput(1); - return this.tok.T_CURLY_OPEN; - } - } - - continue; - } - - ch = this.input(); - } - - return this.tok.T_ENCAPSED_AND_WHITESPACE; - }, - matchST_DOUBLE_QUOTES: function matchST_DOUBLE_QUOTES() { - var ch = this.input(); - - if (ch === "$") { - ch = this.input(); - - if (ch === "{") { - this.begin("ST_LOOKING_FOR_VARNAME"); - return this.tok.T_DOLLAR_OPEN_CURLY_BRACES; - } else if (this.is_LABEL_START()) { - var tok = this.consume_VARIABLE(); - return tok; - } - } else if (ch === "{") { - if (this._input[this.offset] === "$") { - this.begin("ST_IN_SCRIPTING"); - return this.tok.T_CURLY_OPEN; - } - } else if (ch === '"') { - this.popState(); - return '"'; - } // any char - - - while (this.offset < this.size) { - if (ch === "\\") { - this.input(); - } else if (ch === '"') { - this.unput(1); - this.popState(); - this.appendToken('"', 1); - break; - } else if (ch === "$") { - ch = this.input(); - - if (ch === "{") { - this.begin("ST_LOOKING_FOR_VARNAME"); - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES, 2); - this.unput(2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - return this.tok.T_DOLLAR_OPEN_CURLY_BRACES; - } - } else if (this.is_LABEL_START()) { - // start of $var... - var yyoffset = this.offset; - var next = this.consume_VARIABLE(); - - if (this.yytext.length > this.offset - yyoffset + 2) { - this.appendToken(next, this.offset - yyoffset + 2); - this.unput(this.offset - yyoffset + 2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - return next; - } - } - - if (ch) this.unput(1); - } else if (ch === "{") { - ch = this.input(); - - if (ch === "$") { - // start of {$... - this.begin("ST_IN_SCRIPTING"); - - if (this.yytext.length > 2) { - this.appendToken(this.tok.T_CURLY_OPEN, 1); - this.unput(2); - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } else { - // @fixme : yytext = '"{$' (this.yytext.length > 3) - this.unput(1); - return this.tok.T_CURLY_OPEN; - } - } - - if (ch) this.unput(1); - } - - ch = this.input(); - } - - return this.tok.T_ENCAPSED_AND_WHITESPACE; - } -}; - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - T_STRING: function T_STRING() { - var token = this.yytext.toLowerCase(); - var id = this.keywords[token]; - - if (typeof id !== "number") { - if (token === "yield") { - if (this.version >= 700 && this.tryMatch(" from")) { - this.consume(5); - id = this.tok.T_YIELD_FROM; - } else { - id = this.tok.T_YIELD; - } - } else { - id = this.tok.T_STRING; - - if (token === "b" || token === "B") { - var ch = this.input(1); - - if (ch === '"') { - return this.ST_DOUBLE_QUOTES(); - } else if (ch === "'") { - return this.T_CONSTANT_ENCAPSED_STRING(); - } else if (ch) { - this.unput(1); - } - } - } - } - - return id; - }, - // reads a custom token - consume_TOKEN: function consume_TOKEN() { - var ch = this._input[this.offset - 1]; - var fn = this.tokenTerminals[ch]; - - if (fn) { - return fn.apply(this, []); - } else { - return this.yytext; - } - }, - // list of special char tokens - tokenTerminals: { - $: function $() { - this.offset++; - - if (this.is_LABEL_START()) { - this.offset--; - this.consume_LABEL(); - return this.tok.T_VARIABLE; - } else { - this.offset--; - return "$"; - } - }, - "-": function _() { - var nchar = this._input[this.offset]; - - if (nchar === ">") { - this.begin("ST_LOOKING_FOR_PROPERTY").input(); - return this.tok.T_OBJECT_OPERATOR; - } else if (nchar === "-") { - this.input(); - return this.tok.T_DEC; - } else if (nchar === "=") { - this.input(); - return this.tok.T_MINUS_EQUAL; - } - - return "-"; - }, - "\\": function _() { - return this.tok.T_NS_SEPARATOR; - }, - "/": function _() { - if (this._input[this.offset] === "=") { - this.input(); - return this.tok.T_DIV_EQUAL; - } - - return "/"; - }, - ":": function _() { - if (this._input[this.offset] === ":") { - this.input(); - return this.tok.T_DOUBLE_COLON; - } else { - return ":"; - } - }, - "(": function _() { - var initial = this.offset; - this.input(); - - if (this.is_TABSPACE()) { - this.consume_TABSPACE().input(); - } - - if (this.is_LABEL_START()) { - var yylen = this.yytext.length; - this.consume_LABEL(); - var castToken = this.yytext.substring(yylen - 1).toLowerCase(); - var castId = this.castKeywords[castToken]; - - if (typeof castId === "number") { - this.input(); - - if (this.is_TABSPACE()) { - this.consume_TABSPACE().input(); - } - - if (this._input[this.offset - 1] === ")") { - return castId; - } - } - } // revert the check - - - this.unput(this.offset - initial); - return "("; - }, - "=": function _() { - var nchar = this._input[this.offset]; - - if (nchar === ">") { - this.input(); - return this.tok.T_DOUBLE_ARROW; - } else if (nchar === "=") { - if (this._input[this.offset + 1] === "=") { - this.consume(2); - return this.tok.T_IS_IDENTICAL; - } else { - this.input(); - return this.tok.T_IS_EQUAL; - } - } - - return "="; - }, - "+": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "+") { - this.input(); - return this.tok.T_INC; - } else if (nchar === "=") { - this.input(); - return this.tok.T_PLUS_EQUAL; - } - - return "+"; - }, - "!": function _() { - if (this._input[this.offset] === "=") { - if (this._input[this.offset + 1] === "=") { - this.consume(2); - return this.tok.T_IS_NOT_IDENTICAL; - } else { - this.input(); - return this.tok.T_IS_NOT_EQUAL; - } - } - - return "!"; - }, - "?": function _() { - if (this.version >= 700 && this._input[this.offset] === "?") { - if (this.version >= 704 && this._input[this.offset + 1] === "=") { - this.consume(2); - return this.tok.T_COALESCE_EQUAL; - } else { - this.input(); - return this.tok.T_COALESCE; - } - } - - return "?"; - }, - "<": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "<") { - nchar = this._input[this.offset + 1]; - - if (nchar === "=") { - this.consume(2); - return this.tok.T_SL_EQUAL; - } else if (nchar === "<") { - if (this.is_HEREDOC()) { - return this.tok.T_START_HEREDOC; - } - } - - this.input(); - return this.tok.T_SL; - } else if (nchar === "=") { - this.input(); - - if (this.version >= 700 && this._input[this.offset] === ">") { - this.input(); - return this.tok.T_SPACESHIP; - } else { - return this.tok.T_IS_SMALLER_OR_EQUAL; - } - } else if (nchar === ">") { - this.input(); - return this.tok.T_IS_NOT_EQUAL; - } - - return "<"; - }, - ">": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "=") { - this.input(); - return this.tok.T_IS_GREATER_OR_EQUAL; - } else if (nchar === ">") { - nchar = this._input[this.offset + 1]; - - if (nchar === "=") { - this.consume(2); - return this.tok.T_SR_EQUAL; - } else { - this.input(); - return this.tok.T_SR; - } - } - - return ">"; - }, - "*": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "=") { - this.input(); - return this.tok.T_MUL_EQUAL; - } else if (nchar === "*") { - this.input(); - - if (this._input[this.offset] === "=") { - this.input(); - return this.tok.T_POW_EQUAL; - } else { - return this.tok.T_POW; - } - } - - return "*"; - }, - ".": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "=") { - this.input(); - return this.tok.T_CONCAT_EQUAL; - } else if (nchar === "." && this._input[this.offset + 1] === ".") { - this.consume(2); - return this.tok.T_ELLIPSIS; - } - - return "."; - }, - "%": function _() { - if (this._input[this.offset] === "=") { - this.input(); - return this.tok.T_MOD_EQUAL; - } - - return "%"; - }, - "&": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "=") { - this.input(); - return this.tok.T_AND_EQUAL; - } else if (nchar === "&") { - this.input(); - return this.tok.T_BOOLEAN_AND; - } - - return "&"; - }, - "|": function _() { - var nchar = this._input[this.offset]; - - if (nchar === "=") { - this.input(); - return this.tok.T_OR_EQUAL; - } else if (nchar === "|") { - this.input(); - return this.tok.T_BOOLEAN_OR; - } - - return "|"; - }, - "^": function _() { - if (this._input[this.offset] === "=") { - this.input(); - return this.tok.T_XOR_EQUAL; - } - - return "^"; - } - } -}; - -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var tokens = ";:,.\\[]()|^&+-/*=%!~$<>?@"; -module.exports = { - // check if the char can be a numeric - is_NUM: function is_NUM() { - var ch = this._input.charCodeAt(this.offset - 1); - - return ch > 47 && ch < 58 || ch === 95; - }, - // check if the char can be a numeric - is_NUM_START: function is_NUM_START() { - var ch = this._input.charCodeAt(this.offset - 1); - - return ch > 47 && ch < 58; - }, - // check if current char can be a label - is_LABEL: function is_LABEL() { - var ch = this._input.charCodeAt(this.offset - 1); - - return ch > 96 && ch < 123 || ch > 64 && ch < 91 || ch === 95 || ch > 47 && ch < 58 || ch > 126; - }, - // check if current char can be a label - is_LABEL_START: function is_LABEL_START() { - var ch = this._input.charCodeAt(this.offset - 1); // A - Z - - - if (ch > 64 && ch < 91) return true; // a - z - - if (ch > 96 && ch < 123) return true; // _ (95) - - if (ch === 95) return true; // utf8 / extended - - if (ch > 126) return true; // else - - return false; - }, - // reads each char of the label - consume_LABEL: function consume_LABEL() { - while (this.offset < this.size) { - var ch = this.input(); - - if (!this.is_LABEL()) { - if (ch) this.unput(1); - break; - } - } - - return this; - }, - // check if current char is a token char - is_TOKEN: function is_TOKEN() { - var ch = this._input[this.offset - 1]; - return tokens.indexOf(ch) !== -1; - }, - // check if current char is a whitespace - is_WHITESPACE: function is_WHITESPACE() { - var ch = this._input[this.offset - 1]; - return ch === " " || ch === "\t" || ch === "\n" || ch === "\r"; - }, - // check if current char is a whitespace (without newlines) - is_TABSPACE: function is_TABSPACE() { - var ch = this._input[this.offset - 1]; - return ch === " " || ch === "\t"; - }, - // consume all whitespaces (excluding newlines) - consume_TABSPACE: function consume_TABSPACE() { - while (this.offset < this.size) { - var ch = this.input(); - - if (!this.is_TABSPACE()) { - if (ch) this.unput(1); - break; - } - } - - return this; - }, - // check if current char can be a hexadecimal number - is_HEX: function is_HEX() { - var ch = this._input.charCodeAt(this.offset - 1); // 0 - 9 - - - if (ch > 47 && ch < 58) return true; // A - F - - if (ch > 64 && ch < 71) return true; // a - f - - if (ch > 96 && ch < 103) return true; // _ (code 95) - - if (ch === 95) return true; // else - - return false; - } -}; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/** - * @private - */ - -function isNumber(n) { - return n != "." && n != "," && !isNaN(parseFloat(n)) && isFinite(n); -} -/** - * The PHP Parser class that build the AST tree from the lexer - * - * @class - * @tutorial Parser - * @property {Lexer} lexer - current lexer instance - * @property {AST} ast - the AST factory instance - * @property {Integer|String} token - current token - * @property {Boolean} extractDoc - should extract documentation as AST node - * @property {Boolean} extractTokens - should extract each token - * @property {Boolean} suppressErrors - should ignore parsing errors and continue - * @property {Boolean} debug - should output debug informations - */ - - -var parser = function parser(lexer, ast) { - this.lexer = lexer; - this.ast = ast; - this.tok = lexer.tok; - this.EOF = lexer.EOF; - this.token = null; - this.prev = null; - this.debug = false; - this.version = 704; - this.extractDoc = false; - this.extractTokens = false; - this.suppressErrors = false; - - var mapIt = function mapIt(item) { - return [item, null]; - }; - - this.entries = { - // reserved_non_modifiers - IDENTIFIER: new Map([this.tok.T_ABSTRACT, this.tok.T_ARRAY, this.tok.T_AS, this.tok.T_BREAK, this.tok.T_CALLABLE, this.tok.T_CASE, this.tok.T_CATCH, this.tok.T_CLASS, this.tok.T_CLASS_C, this.tok.T_CLONE, this.tok.T_CONST, this.tok.T_CONTINUE, this.tok.T_DECLARE, this.tok.T_DEFAULT, this.tok.T_DIR, this.tok.T_DO, this.tok.T_ECHO, this.tok.T_ELSE, this.tok.T_ELSEIF, this.tok.T_EMPTY, this.tok.T_ENDDECLARE, this.tok.T_ENDFOR, this.tok.T_ENDFOREACH, this.tok.T_ENDIF, this.tok.T_ENDSWITCH, this.tok.T_ENDWHILE, this.tok.T_EVAL, this.tok.T_EXIT, this.tok.T_EXTENDS, this.tok.T_FILE, this.tok.T_FINAL, this.tok.T_FINALLY, this.tok.T_FN, this.tok.T_FOR, this.tok.T_FOREACH, this.tok.T_FUNC_C, this.tok.T_FUNCTION, this.tok.T_GLOBAL, this.tok.T_GOTO, this.tok.T_IF, this.tok.T_IMPLEMENTS, this.tok.T_INCLUDE, this.tok.T_INCLUDE_ONCE, this.tok.T_INSTANCEOF, this.tok.T_INSTEADOF, this.tok.T_INTERFACE, this.tok.T_ISSET, this.tok.T_LINE, this.tok.T_LIST, this.tok.T_LOGICAL_AND, this.tok.T_LOGICAL_OR, this.tok.T_LOGICAL_XOR, this.tok.T_METHOD_C, this.tok.T_NAMESPACE, this.tok.T_NEW, this.tok.T_NS_C, this.tok.T_PRINT, this.tok.T_PRIVATE, this.tok.T_PROTECTED, this.tok.T_PUBLIC, this.tok.T_REQUIRE, this.tok.T_REQUIRE_ONCE, this.tok.T_RETURN, this.tok.T_STATIC, this.tok.T_SWITCH, this.tok.T_THROW, this.tok.T_TRAIT, this.tok.T_TRY, this.tok.T_UNSET, this.tok.T_USE, this.tok.T_VAR, this.tok.T_WHILE, this.tok.T_YIELD].map(mapIt)), - VARIABLE: new Map([this.tok.T_VARIABLE, "$", "&", this.tok.T_NS_SEPARATOR, this.tok.T_STRING, this.tok.T_NAMESPACE, this.tok.T_STATIC].map(mapIt)), - SCALAR: new Map([this.tok.T_CONSTANT_ENCAPSED_STRING, this.tok.T_START_HEREDOC, this.tok.T_LNUMBER, this.tok.T_DNUMBER, this.tok.T_ARRAY, "[", this.tok.T_CLASS_C, this.tok.T_TRAIT_C, this.tok.T_FUNC_C, this.tok.T_METHOD_C, this.tok.T_LINE, this.tok.T_FILE, this.tok.T_DIR, this.tok.T_NS_C, '"', 'b"', 'B"', "-", this.tok.T_NS_SEPARATOR].map(mapIt)), - T_MAGIC_CONST: new Map([this.tok.T_CLASS_C, this.tok.T_TRAIT_C, this.tok.T_FUNC_C, this.tok.T_METHOD_C, this.tok.T_LINE, this.tok.T_FILE, this.tok.T_DIR, this.tok.T_NS_C].map(mapIt)), - T_MEMBER_FLAGS: new Map([this.tok.T_PUBLIC, this.tok.T_PRIVATE, this.tok.T_PROTECTED, this.tok.T_STATIC, this.tok.T_ABSTRACT, this.tok.T_FINAL].map(mapIt)), - EOS: new Map([";", this.EOF, this.tok.T_INLINE_HTML].map(mapIt)), - EXPR: new Map(["@", "-", "+", "!", "~", "(", "`", this.tok.T_LIST, this.tok.T_CLONE, this.tok.T_INC, this.tok.T_DEC, this.tok.T_NEW, this.tok.T_ISSET, this.tok.T_EMPTY, this.tok.T_INCLUDE, this.tok.T_INCLUDE_ONCE, this.tok.T_REQUIRE, this.tok.T_REQUIRE_ONCE, this.tok.T_EVAL, this.tok.T_INT_CAST, this.tok.T_DOUBLE_CAST, this.tok.T_STRING_CAST, this.tok.T_ARRAY_CAST, this.tok.T_OBJECT_CAST, this.tok.T_BOOL_CAST, this.tok.T_UNSET_CAST, this.tok.T_EXIT, this.tok.T_PRINT, this.tok.T_YIELD, this.tok.T_STATIC, this.tok.T_FUNCTION, this.tok.T_FN, // using VARIABLES : - this.tok.T_VARIABLE, "$", this.tok.T_NS_SEPARATOR, this.tok.T_STRING, // using SCALAR : - this.tok.T_STRING, // @see variable.js line 45 > conflict with variable = shift/reduce :) - this.tok.T_CONSTANT_ENCAPSED_STRING, this.tok.T_START_HEREDOC, this.tok.T_LNUMBER, this.tok.T_DNUMBER, this.tok.T_ARRAY, "[", this.tok.T_CLASS_C, this.tok.T_TRAIT_C, this.tok.T_FUNC_C, this.tok.T_METHOD_C, this.tok.T_LINE, this.tok.T_FILE, this.tok.T_DIR, this.tok.T_NS_C, '"', 'b"', 'B"', "-", this.tok.T_NS_SEPARATOR].map(mapIt)) - }; -}; -/** - * helper : gets a token name - */ - - -parser.prototype.getTokenName = function (token) { - if (!isNumber(token)) { - return "'" + token + "'"; - } else { - if (token == this.EOF) return "the end of file (EOF)"; - return this.lexer.engine.tokens.values[token]; - } -}; -/** - * main entry point : converts a source code to AST - */ - - -parser.prototype.parse = function (code, filename) { - this._errors = []; - this.filename = filename || "eval"; - this.currentNamespace = [""]; - - if (this.extractDoc) { - this._docs = []; - } else { - this._docs = null; - } - - if (this.extractTokens) { - this._tokens = []; - } else { - this._tokens = null; - } - - this._docIndex = 0; - this._lastNode = null; - this.lexer.setInput(code); - this.lexer.all_tokens = this.extractTokens; - this.lexer.comment_tokens = this.extractDoc; - this.length = this.lexer._input.length; - this.innerList = false; - this.innerListForm = false; - var program = this.node("program"); - var childs = []; - this.next(); - - while (this.token != this.EOF) { - childs.push(this.read_start()); - } // append last comment - - - if (childs.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - childs.push(this.node("noop")()); - } // #176 : register latest position - - - this.prev = [this.lexer.yylloc.last_line, this.lexer.yylloc.last_column, this.lexer.offset]; - var result = program(childs, this._errors, this._docs, this._tokens); - - if (this.debug) { - var errors = this.ast.checkNodes(); - - if (errors.length > 0) { - errors.forEach(function (error) { - if (error.position) { - // eslint-disable-next-line no-console - console.log("Node at line " + error.position.line + ", column " + error.position.column); - } // eslint-disable-next-line no-console - - - console.log(error.stack.join("\n")); - }); - throw new Error("Some nodes are not closed"); - } - } - - return result; -}; -/** - * Raise an error - */ - - -parser.prototype.raiseError = function (message, msgExpect, expect, token) { - message += " on line " + this.lexer.yylloc.first_line; - - if (!this.suppressErrors) { - var err = new SyntaxError(message, this.filename, this.lexer.yylloc.first_line); - err.lineNumber = this.lexer.yylloc.first_line; - err.fileName = this.filename; - err.columnNumber = this.lexer.yylloc.first_column; - throw err; - } // Error node : - - - var node = this.ast.prepare("error", null, this)(message, token, this.lexer.yylloc.first_line, expect); - - this._errors.push(node); - - return node; -}; -/** - * handling errors - */ - - -parser.prototype.error = function (expect) { - var msg = "Parse Error : syntax error"; - var token = this.getTokenName(this.token); - var msgExpect = ""; - - if (this.token !== this.EOF) { - if (isNumber(this.token)) { - var symbol = this.text(); - - if (symbol.length > 10) { - symbol = symbol.substring(0, 7) + "..."; - } - - token = "'" + symbol + "' (" + token + ")"; - } - - msg += ", unexpected " + token; - } - - if (expect && !Array.isArray(expect)) { - if (isNumber(expect) || expect.length === 1) { - msgExpect = ", expecting " + this.getTokenName(expect); - } - - msg += msgExpect; - } - - return this.raiseError(msg, msgExpect, expect, token); -}; -/** - * Creates a new AST node - */ - - -parser.prototype.node = function (name) { - if (this.extractDoc) { - var docs = null; - - if (this._docIndex < this._docs.length) { - docs = this._docs.slice(this._docIndex); - this._docIndex = this._docs.length; - - if (this.debug) { - // eslint-disable-next-line no-console - console.log(new Error("Append docs on " + name)); // eslint-disable-next-line no-console - - console.log(docs); - } - } - - var node = this.ast.prepare(name, docs, this); - /** - * TOKENS : - * node1 commentA token commmentB node2 commentC token commentD node3 commentE token - * - * AST : - * structure:S1 [ - * left: node1 ( trail: commentA ), - * right: structure:S2 [ - * node2 (lead: commentB, trail: commentC), - * node3 (lead: commentD) - * ], - * trail: commentE - * ] - * - * Algorithm : - * - * Attach the last comments on parent of current node - * If a new node is started and the parent has a trailing comment - * the move it on previous node - * - * start S2 - * start node1 - * consume node1 & set commentA as trailingComment on S2 - * start S2 - * S1 has a trailingComment, attach it on node1 - * ... - * NOTE : As the trailingComment Behavior depends on AST, it will be build on - * the AST layer - last child node will keep it's trailingComment nodes - */ - - node.postBuild = function (self) { - if (this._docIndex < this._docs.length) { - if (this._lastNode) { - var offset = this.prev[2]; - var max = this._docIndex; - - for (; max < this._docs.length; max++) { - if (this._docs[max].offset > offset) { - break; - } - } - - if (max > this._docIndex) { - // inject trailing comment on child node - this._lastNode.setTrailingComments(this._docs.slice(this._docIndex, max)); - - this._docIndex = max; - } - } else if (this.token === this.EOF) { - // end of content - self.setTrailingComments(this._docs.slice(this._docIndex)); - this._docIndex = this._docs.length; - } - } - - this._lastNode = self; - }.bind(this); - - return node; - } - - return this.ast.prepare(name, null, this); -}; -/** - * expects an end of statement or end of file - * @return {boolean} - */ - - -parser.prototype.expectEndOfStatement = function (node) { - if (this.token === ";") { - // include only real ';' statements - // https://github.com/glayzzle/php-parser/issues/164 - if (node && this.lexer.yytext === ";") { - node.includeToken(this); - } - } else if (this.token !== this.tok.T_INLINE_HTML && this.token !== this.EOF) { - this.error(";"); - return false; - } - - this.next(); - return true; -}; -/** outputs some debug information on current token **/ - - -var ignoreStack = ["parser.next", "parser.node", "parser.showlog"]; - -parser.prototype.showlog = function () { - var stack = new Error().stack.split("\n"); - var line; - - for (var offset = 2; offset < stack.length; offset++) { - line = stack[offset].trim(); - var found = false; - - for (var i = 0; i < ignoreStack.length; i++) { - if (line.substring(3, 3 + ignoreStack[i].length) === ignoreStack[i]) { - found = true; - break; - } - } - - if (!found) { - break; - } - } // eslint-disable-next-line no-console - - - console.log("Line " + this.lexer.yylloc.first_line + " : " + this.getTokenName(this.token) + ">" + this.lexer.yytext + "<" + " @-->" + line); - return this; -}; -/** - * Force the parser to check the current token. - * - * If the current token does not match to expected token, - * the an error will be raised. - * - * If the suppressError mode is activated, then the error will - * be added to the program error stack and this function will return `false`. - * - * @param {String|Number} token - * @return {boolean} - * @throws Error - */ - - -parser.prototype.expect = function (token) { - if (Array.isArray(token)) { - if (token.indexOf(this.token) === -1) { - this.error(token); - return false; - } - } else if (this.token != token) { - this.error(token); - return false; - } - - return true; -}; -/** - * Returns the current token contents - * @return {String} - */ - - -parser.prototype.text = function () { - return this.lexer.yytext; -}; -/** consume the next token **/ - - -parser.prototype.next = function () { - // prepare the back command - if (this.token !== ";" || this.lexer.yytext === ";") { - // ignore '?>' from automated resolution - // https://github.com/glayzzle/php-parser/issues/168 - this.prev = [this.lexer.yylloc.last_line, this.lexer.yylloc.last_column, this.lexer.offset]; - } // eating the token - - - this.lex(); // showing the debug - - if (this.debug) { - this.showlog(); - } // handling comments - - - if (this.extractDoc) { - while (this.token === this.tok.T_COMMENT || this.token === this.tok.T_DOC_COMMENT) { - // APPEND COMMENTS - if (this.token === this.tok.T_COMMENT) { - this._docs.push(this.read_comment()); - } else { - this._docs.push(this.read_doc_comment()); - } - } - } - - return this; -}; -/** - * Eating a token - */ - - -parser.prototype.lex = function () { - // append on token stack - if (this.extractTokens) { - do { - // the token - this.token = this.lexer.lex() || this.EOF; - if (this.token === this.EOF) return this; - var entry = this.lexer.yytext; - - if (this.lexer.engine.tokens.values.hasOwnProperty(this.token)) { - entry = [this.lexer.engine.tokens.values[this.token], entry, this.lexer.yylloc.first_line, this.lexer.yylloc.first_offset, this.lexer.offset]; - } else { - entry = [null, entry, this.lexer.yylloc.first_line, this.lexer.yylloc.first_offset, this.lexer.offset]; - } - - this._tokens.push(entry); - - if (this.token === this.tok.T_CLOSE_TAG) { - // https://github.com/php/php-src/blob/7ff186434e82ee7be7c59d0db9a976641cf7b09c/Zend/zend_compile.c#L1680 - this.token = ";"; - return this; - } else if (this.token === this.tok.T_OPEN_TAG_WITH_ECHO) { - this.token = this.tok.T_ECHO; - return this; - } - } while (this.token === this.tok.T_WHITESPACE || // ignore white space - !this.extractDoc && (this.token === this.tok.T_COMMENT || // ignore single lines comments - this.token === this.tok.T_DOC_COMMENT) || // ignore doc comments - // ignore open tags - this.token === this.tok.T_OPEN_TAG); - } else { - this.token = this.lexer.lex() || this.EOF; - } - - return this; -}; -/** - * Check if token is of specified type - */ - - -parser.prototype.is = function (type) { - if (Array.isArray(type)) { - return type.indexOf(this.token) !== -1; - } - - return this.entries[type].has(this.token); -}; // extends the parser with syntax files - - -[__webpack_require__(24), __webpack_require__(25), __webpack_require__(26), __webpack_require__(27), __webpack_require__(28), __webpack_require__(29), __webpack_require__(30), __webpack_require__(31), __webpack_require__(32), __webpack_require__(33), __webpack_require__(34), __webpack_require__(35), __webpack_require__(36), __webpack_require__(37), __webpack_require__(38)].forEach(function (ext) { - for (var k in ext) { - if (parser.prototype.hasOwnProperty(k)) { - // @see https://github.com/glayzzle/php-parser/issues/234 - throw new Error("Function " + k + " is already defined - collision"); - } - - parser.prototype[k] = ext[k]; - } -}); -module.exports = parser; - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Parse an array - * ```ebnf - * array ::= T_ARRAY '(' array_pair_list ')' | - * '[' array_pair_list ']' - * ``` - */ - read_array: function read_array() { - var expect = null; - var shortForm = false; - var result = this.node("array"); - - if (this.token === this.tok.T_ARRAY) { - this.next().expect("("); - expect = ")"; - } else { - shortForm = true; - expect = "]"; - } - - var items = []; - - if (this.next().token !== expect) { - items = this.read_array_pair_list(shortForm); - } - - this.expect(expect); - this.next(); - return result(shortForm, items); - }, - - /** - * Reads an array of items - * ```ebnf - * array_pair_list ::= array_pair (',' array_pair?)* - * ``` - */ - read_array_pair_list: function read_array_pair_list(shortForm) { - var self = this; - return this.read_list(function () { - return self.read_array_pair(shortForm); - }, ",", true); - }, - - /** - * Reads an entry - * array_pair: - * expr T_DOUBLE_ARROW expr - * | expr - * | expr T_DOUBLE_ARROW '&' variable - * | '&' variable - * | expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')' - * | T_LIST '(' array_pair_list ')' - */ - read_array_pair: function read_array_pair(shortForm) { - if (!shortForm && this.token === ")" || shortForm && this.token === "]") { - return; - } - - if (this.token === ",") { - return this.node("noop")(); - } - - var entry = this.node("entry"); - var key = null; - var value = null; - var byRef = false; - var unpack = false; - - if (this.token === "&") { - this.next(); - byRef = true; - value = this.read_variable(true, false); - } else if (this.token === this.tok.T_ELLIPSIS && this.version >= 704) { - this.next(); - - if (this.token === "&") { - this.error(); - } - - unpack = true; - value = this.read_expr(); - } else { - var expr = this.read_expr(); - - if (this.token === this.tok.T_DOUBLE_ARROW) { - this.next(); - key = expr; - - if (this.token === "&") { - this.next(); - byRef = true; - value = this.read_variable(true, false); - } else { - value = this.read_expr(); - } - } else { - value = expr; - } - } - - return entry(key, value, byRef, unpack); - } -}; - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -module.exports = { - /** - * reading a class - * ```ebnf - * class ::= class_scope? T_CLASS T_STRING (T_EXTENDS NAMESPACE_NAME)? (T_IMPLEMENTS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' CLASS_BODY '}' - * ``` - */ - read_class_declaration_statement: function read_class_declaration_statement() { - var result = this.node("class"); - var flag = this.read_class_modifiers(); // graceful mode : ignore token & go next - - if (this.token !== this.tok.T_CLASS) { - this.error(this.tok.T_CLASS); - this.next(); - return null; - } - - this.next().expect(this.tok.T_STRING); - var propName = this.node("identifier"); - var name = this.text(); - this.next(); - propName = propName(name); - var propExtends = this.read_extends_from(); - var propImplements = this.read_implements_list(); - this.expect("{"); - var body = this.next().read_class_body(); - return result(propName, propExtends, propImplements, body, flag); - }, - read_class_modifiers: function read_class_modifiers() { - return [0, 0, this.read_class_modifier()]; - }, - read_class_modifier: function read_class_modifier() { - var result = 0; - - if (this.token === this.tok.T_ABSTRACT) { - this.next(); - return 1; - } else if (this.token === this.tok.T_FINAL) { - this.next(); - return 2; - } - - return result; - }, - - /** - * Reads a class body - * ```ebnf - * class_body ::= (member_flags? (T_VAR | T_STRING | T_FUNCTION))* - * ``` - */ - read_class_body: function read_class_body() { - var result = []; - - while (this.token !== this.EOF && this.token !== "}") { - if (this.token === this.tok.T_COMMENT) { - result.push(this.read_comment()); - continue; - } - - if (this.token === this.tok.T_DOC_COMMENT) { - result.push(this.read_doc_comment()); - continue; - } // check T_USE trait - - - if (this.token === this.tok.T_USE) { - result = result.concat(this.read_trait_use_statement()); - continue; - } // read member flags - - - var flags = this.read_member_flags(false); // check constant - - if (this.token === this.tok.T_CONST) { - var constants = this.read_constant_list(flags); - - if (this.expect(";")) { - this.next(); - } - - result = result.concat(constants); - continue; - } // jump over T_VAR then land on T_VARIABLE - - - if (this.token === this.tok.T_VAR) { - this.next().expect(this.tok.T_VARIABLE); - flags[0] = null; // public (as null) - - flags[1] = 0; // non static var - } - - if (this.token === this.tok.T_FUNCTION) { - // reads a function - result.push(this.read_function(false, flags)); - } else if (this.token === this.tok.T_VARIABLE || // support https://wiki.php.net/rfc/typed_properties_v2 - this.version >= 704 && (this.token === "?" || this.token === this.tok.T_CALLABLE || this.token === this.tok.T_ARRAY || this.token === this.tok.T_NS_SEPARATOR || this.token === this.tok.T_STRING || this.token === this.tok.T_NAMESPACE)) { - // reads a variable - var variables = this.read_variable_list(flags); - this.expect(";"); - this.next(); - result = result.concat(variables); - } else { - // raise an error - this.error([this.tok.T_CONST, this.tok.T_VARIABLE, this.tok.T_FUNCTION]); // ignore token - - this.next(); - } - } - - this.expect("}"); - this.next(); - return result; - }, - - /** - * Reads variable list - * ```ebnf - * variable_list ::= (variable_declaration ',')* variable_declaration - * ``` - */ - read_variable_list: function read_variable_list(flags) { - var result = this.node("propertystatement"); - var properties = this.read_list( - /** - * Reads a variable declaration - * - * ```ebnf - * variable_declaration ::= T_VARIABLE '=' scalar - * ``` - */ - function read_variable_declaration() { - var result = this.node("property"); - - var _this$read_optional_t = this.read_optional_type(), - _this$read_optional_t2 = _slicedToArray(_this$read_optional_t, 2), - nullable = _this$read_optional_t2[0], - type = _this$read_optional_t2[1]; - - this.expect(this.tok.T_VARIABLE); - var propName = this.node("identifier"); - var name = this.text().substring(1); // ignore $ - - this.next(); - propName = propName(name); - - if (this.token === ";" || this.token === ",") { - return result(propName, null, nullable, type); - } else if (this.token === "=") { - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L815 - return result(propName, this.next().read_expr(), nullable, type); - } else { - this.expect([",", ";", "="]); - return result(propName, null, nullable, type); - } - }, ","); - return result(null, properties, flags); - }, - - /** - * Reads constant list - * ```ebnf - * constant_list ::= T_CONST (constant_declaration ',')* constant_declaration - * ``` - */ - read_constant_list: function read_constant_list(flags) { - if (this.expect(this.tok.T_CONST)) { - this.next(); - } - - var result = this.node("classconstant"); - var items = this.read_list( - /** - * Reads a constant declaration - * - * ```ebnf - * constant_declaration ::= (T_STRING | IDENTIFIER) '=' expr - * ``` - * @return {Constant} [:link:](AST.md#constant) - */ - function read_constant_declaration() { - var result = this.node("constant"); - var constName = null; - var value = null; - - if (this.token === this.tok.T_STRING || this.version >= 700 && this.is("IDENTIFIER")) { - constName = this.node("identifier"); - var name = this.text(); - this.next(); - constName = constName(name); - } else { - this.expect("IDENTIFIER"); - } - - if (this.expect("=")) { - value = this.next().read_expr(); - } - - return result(constName, value); - }, ","); - return result(null, items, flags); - }, - - /** - * Read member flags - * @return array - * 1st index : 0 => public, 1 => protected, 2 => private - * 2nd index : 0 => instance member, 1 => static member - * 3rd index : 0 => normal, 1 => abstract member, 2 => final member - */ - read_member_flags: function read_member_flags(asInterface) { - var result = [-1, -1, -1]; - - if (this.is("T_MEMBER_FLAGS")) { - var idx = 0, - val = 0; - - do { - switch (this.token) { - case this.tok.T_PUBLIC: - idx = 0; - val = 0; - break; - - case this.tok.T_PROTECTED: - idx = 0; - val = 1; - break; - - case this.tok.T_PRIVATE: - idx = 0; - val = 2; - break; - - case this.tok.T_STATIC: - idx = 1; - val = 1; - break; - - case this.tok.T_ABSTRACT: - idx = 2; - val = 1; - break; - - case this.tok.T_FINAL: - idx = 2; - val = 2; - break; - } - - if (asInterface) { - if (idx == 0 && val == 2) { - // an interface can't be private - this.expect([this.tok.T_PUBLIC, this.tok.T_PROTECTED]); - val = -1; - } else if (idx == 2 && val == 1) { - // an interface cant be abstract - this.error(); - val = -1; - } - } - - if (result[idx] !== -1) { - // already defined flag - this.error(); - } else if (val !== -1) { - result[idx] = val; - } - } while (this.next().is("T_MEMBER_FLAGS")); - } - - if (result[1] == -1) result[1] = 0; - if (result[2] == -1) result[2] = 0; - return result; - }, - - /** - * optional_type: - * /- empty -/ { $$ = NULL; } - * | type_expr { $$ = $1; } - * ; - * - * type_expr: - * type { $$ = $1; } - * | '?' type { $$ = $2; $$->attr |= ZEND_TYPE_NULLABLE; } - * | union_type { $$ = $1; } - * ; - * - * type: - * T_ARRAY { $$ = zend_ast_create_ex(ZEND_AST_TYPE, IS_ARRAY); } - * | T_CALLABLE { $$ = zend_ast_create_ex(ZEND_AST_TYPE, IS_CALLABLE); } - * | name { $$ = $1; } - * ; - * - * union_type: - * type '|' type { $$ = zend_ast_create_list(2, ZEND_AST_TYPE_UNION, $1, $3); } - * | union_type '|' type { $$ = zend_ast_list_add($1, $3); } - * ; - */ - read_optional_type: function read_optional_type() { - var nullable = false; - - if (this.token === "?") { - nullable = true; - this.next(); - } - - var type = this.read_type(); - - if (nullable && !type) { - this.raiseError("Expecting a type definition combined with nullable operator"); - } - - if (!nullable && !type) { - return [false, null]; - } - - if (this.token === "|") { - type = [type]; - - do { - this.next(); - var variant = this.read_type(); - - if (!variant) { - this.raiseError("Expecting a type definition"); - break; - } - - type.push(variant); - } while (this.token === "|"); - } - - return [nullable, type]; - }, - - /** - * reading an interface - * ```ebnf - * interface ::= T_INTERFACE T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' INTERFACE_BODY '}' - * ``` - */ - read_interface_declaration_statement: function read_interface_declaration_statement() { - var result = this.node("interface"); - - if (this.token !== this.tok.T_INTERFACE) { - this.error(this.tok.T_INTERFACE); - this.next(); - return null; - } - - this.next().expect(this.tok.T_STRING); - var propName = this.node("identifier"); - var name = this.text(); - this.next(); - propName = propName(name); - var propExtends = this.read_interface_extends_list(); - this.expect("{"); - var body = this.next().read_interface_body(); - return result(propName, propExtends, body); - }, - - /** - * Reads an interface body - * ```ebnf - * interface_body ::= (member_flags? (T_CONST | T_FUNCTION))* - * ``` - */ - read_interface_body: function read_interface_body() { - var result = []; - - while (this.token !== this.EOF && this.token !== "}") { - if (this.token === this.tok.T_COMMENT) { - result.push(this.read_comment()); - continue; - } - - if (this.token === this.tok.T_DOC_COMMENT) { - result.push(this.read_doc_comment()); - continue; - } // read member flags - - - var flags = this.read_member_flags(true); // check constant - - if (this.token == this.tok.T_CONST) { - var constants = this.read_constant_list(flags); - - if (this.expect(";")) { - this.next(); - } - - result = result.concat(constants); - } else if (this.token === this.tok.T_FUNCTION) { - // reads a function - var method = this.read_function_declaration(2, flags); - method.parseFlags(flags); - result.push(method); - - if (this.expect(";")) { - this.next(); - } - } else { - // raise an error - this.error([this.tok.T_CONST, this.tok.T_FUNCTION]); - this.next(); - } - } - - if (this.expect("}")) { - this.next(); - } - - return result; - }, - - /** - * reading a trait - * ```ebnf - * trait ::= T_TRAIT T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' FUNCTION* '}' - * ``` - */ - read_trait_declaration_statement: function read_trait_declaration_statement() { - var result = this.node("trait"); // graceful mode : ignore token & go next - - if (this.token !== this.tok.T_TRAIT) { - this.error(this.tok.T_TRAIT); - this.next(); - return null; - } - - this.next().expect(this.tok.T_STRING); - var propName = this.node("identifier"); - var name = this.text(); - this.next(); - propName = propName(name); - this.expect("{"); - var body = this.next().read_class_body(); - return result(propName, body); - }, - - /** - * reading a use statement - * ```ebnf - * trait_use_statement ::= namespace_name (',' namespace_name)* ('{' trait_use_alias '}')? - * ``` - */ - read_trait_use_statement: function read_trait_use_statement() { - // defines use statements - var node = this.node("traituse"); - this.expect(this.tok.T_USE) && this.next(); - var traits = [this.read_namespace_name()]; - var adaptations = null; - - while (this.token === ",") { - traits.push(this.next().read_namespace_name()); - } - - if (this.token === "{") { - adaptations = []; // defines alias statements - - while (this.next().token !== this.EOF) { - if (this.token === "}") break; - adaptations.push(this.read_trait_use_alias()); - this.expect(";"); - } - - if (this.expect("}")) { - this.next(); - } - } else { - if (this.expect(";")) { - this.next(); - } - } - - return node(traits, adaptations); - }, - - /** - * Reading trait alias - * ```ebnf - * trait_use_alias ::= namespace_name ( T_DOUBLE_COLON T_STRING )? (T_INSTEADOF namespace_name) | (T_AS member_flags? T_STRING) - * ``` - * name list : https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L303 - * trait adaptation : https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L742 - */ - read_trait_use_alias: function read_trait_use_alias() { - var node = this.node(); - var trait = null; - var method; - - if (this.is("IDENTIFIER")) { - method = this.node("identifier"); - var methodName = this.text(); - this.next(); - method = method(methodName); - } else { - method = this.read_namespace_name(); - - if (this.token === this.tok.T_DOUBLE_COLON) { - this.next(); - - if (this.token === this.tok.T_STRING || this.version >= 700 && this.is("IDENTIFIER")) { - trait = method; - method = this.node("identifier"); - - var _methodName = this.text(); - - this.next(); - method = method(_methodName); - } else { - this.expect(this.tok.T_STRING); - } - } else { - // convert identifier as string - method = method.name; - } - } // handle trait precedence - - - if (this.token === this.tok.T_INSTEADOF) { - return node("traitprecedence", trait, method, this.next().read_name_list()); - } else if (this.token === this.tok.T_AS) { - // handle trait alias - var flags = null; - var alias = null; - - if (this.next().is("T_MEMBER_FLAGS")) { - flags = this.read_member_flags(); - } - - if (this.token === this.tok.T_STRING || this.version >= 700 && this.is("IDENTIFIER")) { - alias = this.node("identifier"); - var name = this.text(); - this.next(); - alias = alias(name); - } else if (flags === false) { - // no visibility flags and no name => too bad - this.expect(this.tok.T_STRING); - } - - return node("traitalias", trait, method, alias, flags); - } // handle errors - - - this.expect([this.tok.T_AS, this.tok.T_INSTEADOF]); - return node("traitalias", trait, method, null, null); - } -}; - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Comments with // or # or / * ... * / - */ - read_comment: function read_comment() { - var text = this.text(); - var result = this.ast.prepare(text.substring(0, 2) === "/*" ? "commentblock" : "commentline", null, this); - var offset = this.lexer.yylloc.first_offset; // handle location on comment - - var prev = this.prev; - this.prev = [this.lexer.yylloc.last_line, this.lexer.yylloc.last_column, this.lexer.offset]; - this.lex(); - result = result(text); - result.offset = offset; - this.prev = prev; - return result; - }, - - /** - * Comments with / ** ... * / - */ - read_doc_comment: function read_doc_comment() { - var result = this.ast.prepare("commentblock", null, this); - var offset = this.lexer.yylloc.first_offset; - var text = this.text(); - var prev = this.prev; - this.prev = [this.lexer.yylloc.last_line, this.lexer.yylloc.last_column, this.lexer.offset]; - this.lex(); - result = result(text); - result.offset = offset; - this.prev = prev; - return result; - } -}; - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - read_expr: function read_expr(expr) { - var result = this.node(); - - if (this.token === "@") { - if (!expr) { - expr = this.next().read_expr(); - } - - return result("silent", expr); - } - - if (!expr) { - expr = this.read_expr_item(); - } // binary operations - - - if (this.token === "|") return result("bin", "|", expr, this.next().read_expr()); - if (this.token === "&") return result("bin", "&", expr, this.next().read_expr()); - if (this.token === "^") return result("bin", "^", expr, this.next().read_expr()); - if (this.token === ".") return result("bin", ".", expr, this.next().read_expr()); - if (this.token === "+") return result("bin", "+", expr, this.next().read_expr()); - if (this.token === "-") return result("bin", "-", expr, this.next().read_expr()); - if (this.token === "*") return result("bin", "*", expr, this.next().read_expr()); - if (this.token === "/") return result("bin", "/", expr, this.next().read_expr()); - if (this.token === "%") return result("bin", "%", expr, this.next().read_expr()); - if (this.token === this.tok.T_POW) return result("bin", "**", expr, this.next().read_expr()); - if (this.token === this.tok.T_SL) return result("bin", "<<", expr, this.next().read_expr()); - if (this.token === this.tok.T_SR) return result("bin", ">>", expr, this.next().read_expr()); // more binary operations (formerly bool) - - if (this.token === this.tok.T_BOOLEAN_OR) return result("bin", "||", expr, this.next().read_expr()); - if (this.token === this.tok.T_LOGICAL_OR) return result("bin", "or", expr, this.next().read_expr()); - if (this.token === this.tok.T_BOOLEAN_AND) return result("bin", "&&", expr, this.next().read_expr()); - if (this.token === this.tok.T_LOGICAL_AND) return result("bin", "and", expr, this.next().read_expr()); - if (this.token === this.tok.T_LOGICAL_XOR) return result("bin", "xor", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_IDENTICAL) return result("bin", "===", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_NOT_IDENTICAL) return result("bin", "!==", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_EQUAL) return result("bin", "==", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_NOT_EQUAL) return result("bin", "!=", expr, this.next().read_expr()); - if (this.token === "<") return result("bin", "<", expr, this.next().read_expr()); - if (this.token === ">") return result("bin", ">", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_SMALLER_OR_EQUAL) return result("bin", "<=", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_GREATER_OR_EQUAL) return result("bin", ">=", expr, this.next().read_expr()); - if (this.token === this.tok.T_SPACESHIP) return result("bin", "<=>", expr, this.next().read_expr()); - - if (this.token === this.tok.T_INSTANCEOF) { - expr = result("bin", "instanceof", expr, this.next().read_class_name_reference()); - - if (this.token !== ";" && this.token !== this.tok.T_INLINE_HTML && this.token !== this.EOF) { - expr = this.read_expr(expr); - } - } // extra operations : - // $username = $_GET['user'] ?? 'nobody'; - - - if (this.token === this.tok.T_COALESCE) return result("bin", "??", expr, this.next().read_expr()); // extra operations : - // $username = $_GET['user'] ? true : false; - - if (this.token === "?") { - var trueArg = null; - - if (this.next().token !== ":") { - trueArg = this.read_expr(); - } - - this.expect(":") && this.next(); - return result("retif", expr, trueArg, this.read_expr()); - } else { - // see #193 - result.destroy(expr); - } - - return expr; - }, - - /** - * Reads a cast expression - */ - read_expr_cast: function read_expr_cast(type) { - return this.node("cast")(type, this.text(), this.next().read_expr()); - }, - - /** - * Read a isset variable - */ - read_isset_variable: function read_isset_variable() { - return this.read_expr(); - }, - - /** - * Reads isset variables - */ - read_isset_variables: function read_isset_variables() { - return this.read_function_list(this.read_isset_variable, ","); - }, - - /* - * Reads internal PHP functions - */ - read_internal_functions_in_yacc: function read_internal_functions_in_yacc() { - var result = null; - - switch (this.token) { - case this.tok.T_ISSET: - { - result = this.node("isset"); - - if (this.next().expect("(")) { - this.next(); - } - - var variables = this.read_isset_variables(); - - if (this.expect(")")) { - this.next(); - } - - result = result(variables); - } - break; - - case this.tok.T_EMPTY: - { - result = this.node("empty"); - - if (this.next().expect("(")) { - this.next(); - } - - var expression = this.read_expr(); - - if (this.expect(")")) { - this.next(); - } - - result = result(expression); - } - break; - - case this.tok.T_INCLUDE: - result = this.node("include")(false, false, this.next().read_expr()); - break; - - case this.tok.T_INCLUDE_ONCE: - result = this.node("include")(true, false, this.next().read_expr()); - break; - - case this.tok.T_EVAL: - { - result = this.node("eval"); - - if (this.next().expect("(")) { - this.next(); - } - - var expr = this.read_expr(); - - if (this.expect(")")) { - this.next(); - } - - result = result(expr); - } - break; - - case this.tok.T_REQUIRE: - result = this.node("include")(false, true, this.next().read_expr()); - break; - - case this.tok.T_REQUIRE_ONCE: - result = this.node("include")(true, true, this.next().read_expr()); - break; - } - - return result; - }, - - /** - * Reads optional expression - */ - read_optional_expr: function read_optional_expr(stopToken) { - if (this.token !== stopToken) { - return this.read_expr(); - } - - return null; - }, - - /** - * Reads exit expression - */ - read_exit_expr: function read_exit_expr() { - var expression = null; - - if (this.token === "(") { - this.next(); - expression = this.read_optional_expr(")"); - this.expect(")") && this.next(); - } - - return expression; - }, - - /** - * ```ebnf - * Reads an expression - * expr ::= @todo - * ``` - */ - read_expr_item: function read_expr_item() { - var result, expr; - if (this.token === "+") return this.node("unary")("+", this.next().read_expr()); - if (this.token === "-") return this.node("unary")("-", this.next().read_expr()); - if (this.token === "!") return this.node("unary")("!", this.next().read_expr()); - if (this.token === "~") return this.node("unary")("~", this.next().read_expr()); - - if (this.token === "(") { - expr = this.next().read_expr(); - expr.parenthesizedExpression = true; - this.expect(")") && this.next(); - return this.handleDereferencable(expr); - } - - if (this.token === "`") { - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1048 - return this.read_encapsed_string("`"); - } - - if (this.token === this.tok.T_LIST) { - var assign = null; - var isInner = this.innerList; - result = this.node("list"); - - if (!isInner) { - assign = this.node("assign"); - } - - if (this.next().expect("(")) { - this.next(); - } - - if (!this.innerList) this.innerList = true; // reads inner items - - var assignList = this.read_array_pair_list(false); - - if (this.expect(")")) { - this.next(); - } // check if contains at least one assignment statement - - - var hasItem = false; - - for (var i = 0; i < assignList.length; i++) { - if (assignList[i] !== null && assignList[i].kind !== "noop") { - hasItem = true; - break; - } - } - - if (!hasItem) { - this.raiseError("Fatal Error : Cannot use empty list on line " + this.lexer.yylloc.first_line); - } // handles the node resolution - - - if (!isInner) { - this.innerList = false; - - if (this.expect("=")) { - return assign(result(assignList, false), this.next().read_expr(), "="); - } else { - // error fallback : list($a, $b); - return result(assignList, false); - } - } else { - return result(assignList, false); - } - } - - if (this.token === this.tok.T_CLONE) return this.node("clone")(this.next().read_expr()); - - switch (this.token) { - case this.tok.T_INC: - return this.node("pre")("+", this.next().read_variable(false, false)); - - case this.tok.T_DEC: - return this.node("pre")("-", this.next().read_variable(false, false)); - - case this.tok.T_NEW: - return this.read_new_expr(); - - case this.tok.T_ISSET: - case this.tok.T_EMPTY: - case this.tok.T_INCLUDE: - case this.tok.T_INCLUDE_ONCE: - case this.tok.T_EVAL: - case this.tok.T_REQUIRE: - case this.tok.T_REQUIRE_ONCE: - return this.read_internal_functions_in_yacc(); - - case this.tok.T_INT_CAST: - return this.read_expr_cast("int"); - - case this.tok.T_DOUBLE_CAST: - return this.read_expr_cast("float"); - - case this.tok.T_STRING_CAST: - return this.read_expr_cast(this.text().indexOf("binary") !== -1 ? "binary" : "string"); - - case this.tok.T_ARRAY_CAST: - return this.read_expr_cast("array"); - - case this.tok.T_OBJECT_CAST: - return this.read_expr_cast("object"); - - case this.tok.T_BOOL_CAST: - return this.read_expr_cast("bool"); - - case this.tok.T_UNSET_CAST: - return this.read_expr_cast("unset"); - - case this.tok.T_EXIT: - { - var useDie = this.lexer.yytext.toLowerCase() === "die"; - result = this.node("exit"); - this.next(); - var expression = this.read_exit_expr(); - return result(expression, useDie); - } - - case this.tok.T_PRINT: - return this.node("print")(this.next().read_expr()); - // T_YIELD (expr (T_DOUBLE_ARROW expr)?)? - - case this.tok.T_YIELD: - { - var value = null; - var key = null; - result = this.node("yield"); - - if (this.next().is("EXPR")) { - // reads the yield return value - value = this.read_expr(); - - if (this.token === this.tok.T_DOUBLE_ARROW) { - // reads the yield returned key - key = value; - value = this.next().read_expr(); - } - } - - return result(value, key); - } - // T_YIELD_FROM expr - - case this.tok.T_YIELD_FROM: - result = this.node("yieldfrom"); - expr = this.next().read_expr(); - return result(expr); - - case this.tok.T_FN: - case this.tok.T_FUNCTION: - return this.read_inline_function(); - - case this.tok.T_STATIC: - { - var backup = [this.token, this.lexer.getState()]; - this.next(); - - if (this.token === this.tok.T_FUNCTION || this.version >= 704 && this.token === this.tok.T_FN) { - // handles static function - return this.read_inline_function([0, 1, 0]); - } else { - // rollback - this.lexer.tokens.push(backup); - this.next(); - } - } - } // SCALAR | VARIABLE - - - if (this.is("VARIABLE")) { - result = this.node(); - expr = this.read_variable(false, false); // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L877 - // should accept only a variable - - var isConst = expr.kind === "identifier" || expr.kind === "staticlookup" && expr.offset.kind === "identifier"; // VARIABLES SPECIFIC OPERATIONS - - switch (this.token) { - case "=": - { - if (isConst) this.error("VARIABLE"); - - if (this.next().token == "&") { - return this.read_assignref(result, expr); - } - - return result("assign", expr, this.read_expr(), "="); - } - // operations : - - case this.tok.T_PLUS_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "+="); - - case this.tok.T_MINUS_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "-="); - - case this.tok.T_MUL_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "*="); - - case this.tok.T_POW_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "**="); - - case this.tok.T_DIV_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "/="); - - case this.tok.T_CONCAT_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), ".="); - - case this.tok.T_MOD_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "%="); - - case this.tok.T_AND_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "&="); - - case this.tok.T_OR_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "|="); - - case this.tok.T_XOR_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "^="); - - case this.tok.T_SL_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "<<="); - - case this.tok.T_SR_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), ">>="); - - case this.tok.T_COALESCE_EQUAL: - if (isConst) this.error("VARIABLE"); - return result("assign", expr, this.next().read_expr(), "??="); - - case this.tok.T_INC: - if (isConst) this.error("VARIABLE"); - this.next(); - return result("post", "+", expr); - - case this.tok.T_DEC: - if (isConst) this.error("VARIABLE"); - this.next(); - return result("post", "-", expr); - - default: - // see #193 - result.destroy(expr); - } - } else if (this.is("SCALAR")) { - result = this.node(); - expr = this.read_scalar(); - - if (expr.kind === "array" && expr.shortForm && this.token === "=") { - // list assign - var list = this.node("list")(expr.items, true); - if (expr.loc) list.loc = expr.loc; - var right = this.next().read_expr(); - return result("assign", list, right, "="); - } else { - // see #189 - swap docs on nodes - result.destroy(expr); - } // classic array - - - return this.handleDereferencable(expr); - } else { - this.error("EXPR"); - this.next(); - } // returns variable | scalar - - - return expr; - }, - - /** - * Reads assignment - * @param {*} left - */ - read_assignref: function read_assignref(result, left) { - this.next(); - var right; - - if (this.token === this.tok.T_NEW) { - if (this.version >= 700) { - this.error(); - } - - right = this.read_new_expr(); - } else { - right = this.read_variable(false, false); - } - - return result("assignref", left, right); - }, - - /** - * - * inline_function: - * function returns_ref backup_doc_comment '(' parameter_list ')' lexical_vars return_type - * backup_fn_flags '{' inner_statement_list '}' backup_fn_flags - * { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $2 | $13, $1, $3, - * zend_string_init("{closure}", sizeof("{closure}") - 1, 0), - * $5, $7, $11, $8); CG(extra_fn_flags) = $9; } - * | fn returns_ref '(' parameter_list ')' return_type backup_doc_comment T_DOUBLE_ARROW backup_fn_flags backup_lex_pos expr backup_fn_flags - * { $$ = zend_ast_create_decl(ZEND_AST_ARROW_FUNC, $2 | $12, $1, $7, - * zend_string_init("{closure}", sizeof("{closure}") - 1, 0), $4, NULL, - * zend_ast_create(ZEND_AST_RETURN, $11), $6); - * ((zend_ast_decl *) $$)->lex_pos = $10; - * CG(extra_fn_flags) = $9; } * - */ - read_inline_function: function read_inline_function(flags) { - if (this.token === this.tok.T_FUNCTION) { - return this.read_function(true, flags); - } // introduced in PHP 7.4 - - - if (!this.version >= 704) { - this.raiseError("Arrow Functions are not allowed"); - } // as an arrowfunc - - - var node = this.node("arrowfunc"); // eat T_FN - - if (this.expect(this.tok.T_FN)) this.next(); // check the & - - var isRef = this.is_reference(); // ... - - if (this.expect("(")) this.next(); - var params = this.read_parameter_list(); - if (this.expect(")")) this.next(); - var nullable = false; - var returnType = null; - - if (this.token === ":") { - if (this.next().token === "?") { - nullable = true; - this.next(); - } - - returnType = this.read_type(); - } - - if (this.expect(this.tok.T_DOUBLE_ARROW)) this.next(); - var body = this.read_expr(); - return node(params, isRef, body, returnType, nullable, flags ? true : false); - }, - - /** - * ```ebnf - * new_expr ::= T_NEW (namespace_name function_argument_list) | (T_CLASS ... class declaration) - * ``` - * https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L850 - */ - read_new_expr: function read_new_expr() { - var result = this.node("new"); - this.expect(this.tok.T_NEW) && this.next(); - var args = []; - - if (this.token === this.tok.T_CLASS) { - var what = this.node("class"); // Annonymous class declaration - - if (this.next().token === "(") { - args = this.read_argument_list(); - } - - var propExtends = this.read_extends_from(); - var propImplements = this.read_implements_list(); - var body = null; - - if (this.expect("{")) { - body = this.next().read_class_body(); - } - - return result(what(null, propExtends, propImplements, body, [0, 0, 0]), args); - } // Already existing class - - - var name = this.read_new_class_name(); - - if (this.token === "(") { - args = this.read_argument_list(); - } - - return result(name, args); - }, - - /** - * Reads a class name - * ```ebnf - * read_new_class_name ::= namespace_name | variable - * ``` - */ - read_new_class_name: function read_new_class_name() { - if (this.token === this.tok.T_NS_SEPARATOR || this.token === this.tok.T_STRING || this.token === this.tok.T_NAMESPACE) { - var result = this.read_namespace_name(true); - - if (this.token === this.tok.T_DOUBLE_COLON) { - result = this.read_static_getter(result); - } - - return result; - } else if (this.is("VARIABLE")) { - return this.read_variable(true, false); - } else { - this.expect([this.tok.T_STRING, "VARIABLE"]); - } - }, - handleDereferencable: function handleDereferencable(expr) { - while (this.token !== this.EOF) { - if (this.token === this.tok.T_OBJECT_OPERATOR || this.token === this.tok.T_DOUBLE_COLON) { - expr = this.recursive_variable_chain_scan(expr, false, false, true); - } else if (this.token === this.tok.T_CURLY_OPEN || this.token === "[") { - expr = this.read_dereferencable(expr); - } else if (this.token === "(") { - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1118 - expr = this.node("call")(expr, this.read_argument_list()); - } else { - return expr; - } - } - - return expr; - } -}; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * checks if current token is a reference keyword - */ - is_reference: function is_reference() { - if (this.token == "&") { - this.next(); - return true; - } - - return false; - }, - - /** - * checks if current token is a variadic keyword - */ - is_variadic: function is_variadic() { - if (this.token === this.tok.T_ELLIPSIS) { - this.next(); - return true; - } - - return false; - }, - - /** - * reading a function - * ```ebnf - * function ::= function_declaration code_block - * ``` - */ - read_function: function read_function(closure, flag) { - var result = this.read_function_declaration(closure ? 1 : flag ? 2 : 0, flag && flag[1] === 1); - - if (flag && flag[2] == 1) { - // abstract function : - result.parseFlags(flag); - - if (this.expect(";")) { - this.next(); - } - } else { - if (this.expect("{")) { - result.body = this.read_code_block(false); - - if (result.loc && result.body.loc) { - result.loc.end = result.body.loc.end; - } - } - - if (!closure && flag) { - result.parseFlags(flag); - } - } - - return result; - }, - - /** - * reads a function declaration (without his body) - * ```ebnf - * function_declaration ::= T_FUNCTION '&'? T_STRING '(' parameter_list ')' - * ``` - */ - read_function_declaration: function read_function_declaration(type, isStatic) { - var nodeName = "function"; - - if (type === 1) { - nodeName = "closure"; - } else if (type === 2) { - nodeName = "method"; - } - - var result = this.node(nodeName); - - if (this.expect(this.tok.T_FUNCTION)) { - this.next(); - } - - var isRef = this.is_reference(); - var name = false, - use = [], - returnType = null, - nullable = false; - - if (type !== 1) { - var nameNode = this.node("identifier"); - - if (type === 2) { - if (this.version >= 700) { - if (this.token === this.tok.T_STRING || this.is("IDENTIFIER")) { - name = this.text(); - this.next(); - } else if (this.version < 704) { - this.error("IDENTIFIER"); - } - } else if (this.token === this.tok.T_STRING) { - name = this.text(); - this.next(); - } else { - this.error("IDENTIFIER"); - } - } else { - if (this.version >= 700) { - if (this.token === this.tok.T_STRING) { - name = this.text(); - this.next(); - } else if (this.version >= 704) { - if (!this.expect("(")) { - this.next(); - } - } else { - this.error(this.tok.T_STRING); - this.next(); - } - } else { - if (this.expect(this.tok.T_STRING)) { - name = this.text(); - } - - this.next(); - } - } - - name = nameNode(name); - } - - if (this.expect("(")) this.next(); - var params = this.read_parameter_list(); - if (this.expect(")")) this.next(); - - if (type === 1) { - use = this.read_lexical_vars(); - } - - if (this.token === ":") { - if (this.next().token === "?") { - nullable = true; - this.next(); - } - - returnType = this.read_type(); - } - - if (type === 1) { - // closure - return result(params, isRef, use, returnType, nullable, isStatic); - } - - return result(name, params, isRef, returnType, nullable); - }, - read_lexical_vars: function read_lexical_vars() { - var result = []; - - if (this.token === this.tok.T_USE) { - this.next(); - this.expect("(") && this.next(); - result = this.read_lexical_var_list(); - this.expect(")") && this.next(); - } - - return result; - }, - read_lexical_var_list: function read_lexical_var_list() { - return this.read_list(this.read_lexical_var, ","); - }, - - /** - * ```ebnf - * lexical_var ::= '&'? T_VARIABLE - * ``` - */ - read_lexical_var: function read_lexical_var() { - if (this.token === "&") { - return this.read_byref(this.read_lexical_var.bind(this)); - } - - var result = this.node("variable"); - this.expect(this.tok.T_VARIABLE); - var name = this.text().substring(1); - this.next(); - return result(name, false); - }, - - /** - * reads a list of parameters - * ```ebnf - * parameter_list ::= (parameter ',')* parameter? - * ``` - */ - read_parameter_list: function read_parameter_list() { - var result = []; - - if (this.token != ")") { - while (this.token != this.EOF) { - result.push(this.read_parameter()); - - if (this.token == ",") { - this.next(); - } else if (this.token == ")") { - break; - } else { - this.error([",", ")"]); - break; - } - } - } - - return result; - }, - - /** - * ```ebnf - * parameter ::= type? '&'? T_ELLIPSIS? T_VARIABLE ('=' expr)? - * ``` - * @see https://github.com/php/php-src/blob/493524454d66adde84e00d249d607ecd540de99f/Zend/zend_language_parser.y#L640 - */ - read_parameter: function read_parameter() { - var node = this.node("parameter"); - var parameterName = null; - var value = null; - var type = null; - var nullable = false; - - if (this.token === "?") { - this.next(); - nullable = true; - } - - type = this.read_type(); - - if (nullable && !type) { - this.raiseError("Expecting a type definition combined with nullable operator"); - } - - var isRef = this.is_reference(); - var isVariadic = this.is_variadic(); - - if (this.expect(this.tok.T_VARIABLE)) { - parameterName = this.node("identifier"); - var name = this.text().substring(1); - this.next(); - parameterName = parameterName(name); - } - - if (this.token == "=") { - value = this.next().read_expr(); - } - - return node(parameterName, type, value, isRef, isVariadic, nullable); - }, - - /** - * Reads a list of arguments - * ```ebnf - * function_argument_list ::= '(' (argument_list (',' argument_list)*)? ')' - * ``` - */ - read_argument_list: function read_argument_list() { - var result = []; - this.expect("(") && this.next(); - - if (this.token !== ")") { - result = this.read_non_empty_argument_list(); - } - - this.expect(")") && this.next(); - return result; - }, - - /** - * Reads non empty argument list - */ - read_non_empty_argument_list: function read_non_empty_argument_list() { - var wasVariadic = false; - return this.read_function_list(function () { - var argument = this.read_argument(); - - if (argument) { - if (wasVariadic) { - this.raiseError("Unexpected argument after a variadic argument"); - } - - if (argument.kind === "variadic") { - wasVariadic = true; - } - } - - return argument; - }.bind(this), ","); - }, - - /** - * ```ebnf - * argument_list ::= T_ELLIPSIS? expr - * ``` - */ - read_argument: function read_argument() { - if (this.token === this.tok.T_ELLIPSIS) { - return this.node("variadic")(this.next().read_expr()); - } - - return this.read_expr(); - }, - - /** - * read type hinting - * ```ebnf - * type ::= T_ARRAY | T_CALLABLE | namespace_name - * ``` - */ - read_type: function read_type() { - var result = this.node(); - - if (this.token === this.tok.T_ARRAY || this.token === this.tok.T_CALLABLE) { - var type = this.text(); - this.next(); - return result("typereference", type.toLowerCase(), type); - } else if (this.token === this.tok.T_STRING) { - var _type = this.text(); - - var backup = [this.token, this.lexer.getState()]; - this.next(); - - if (this.token !== this.tok.T_NS_SEPARATOR && this.ast.typereference.types.indexOf(_type.toLowerCase()) > -1) { - return result("typereference", _type.toLowerCase(), _type); - } else { - // rollback a classic namespace - this.lexer.tokens.push(backup); - this.next(); // fix : destroy not consumed node (release comments) - - result.destroy(); - return this.read_namespace_name(); - } - } else if (this.token === this.tok.T_NAMESPACE || this.token === this.tok.T_NS_SEPARATOR) { - // fix : destroy not consumed node (release comments) - result.destroy(); - return this.read_namespace_name(); - } // fix : destroy not consumed node (release comments) - - - result.destroy(); - return null; - } -}; - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Reads an IF statement - * - * ```ebnf - * if ::= T_IF '(' expr ')' ':' ... - * ``` - */ - read_if: function read_if() { - var result = this.node("if"); - var test = this.next().read_if_expr(); - var body = null; - var alternate = null; - var shortForm = false; - - if (this.token === ":") { - shortForm = true; - this.next(); - body = this.node("block"); - var items = []; - - while (this.token !== this.EOF && this.token !== this.tok.T_ENDIF) { - if (this.token === this.tok.T_ELSEIF) { - alternate = this.read_elseif_short(); - break; - } else if (this.token === this.tok.T_ELSE) { - alternate = this.read_else_short(); - break; - } - - items.push(this.read_inner_statement()); - } - - body = body(null, items); - this.expect(this.tok.T_ENDIF) && this.next(); - this.expectEndOfStatement(); - } else { - body = this.read_statement(); - - if (this.token === this.tok.T_ELSEIF) { - alternate = this.read_if(); - } else if (this.token === this.tok.T_ELSE) { - alternate = this.next().read_statement(); - } - } - - return result(test, body, alternate, shortForm); - }, - - /** - * reads an if expression : '(' expr ')' - */ - read_if_expr: function read_if_expr() { - this.expect("(") && this.next(); - var result = this.read_expr(); - this.expect(")") && this.next(); - return result; - }, - - /** - * reads an elseif (expr): statements - */ - read_elseif_short: function read_elseif_short() { - var alternate = null; - var result = this.node("if"); - var test = this.next().read_if_expr(); - if (this.expect(":")) this.next(); - var body = this.node("block"); - var items = []; - - while (this.token != this.EOF && this.token !== this.tok.T_ENDIF) { - if (this.token === this.tok.T_ELSEIF) { - alternate = this.read_elseif_short(); - break; - } else if (this.token === this.tok.T_ELSE) { - alternate = this.read_else_short(); - break; - } - - items.push(this.read_inner_statement()); - } - - return result(test, body(null, items), alternate, true); - }, - - /** - * - */ - read_else_short: function read_else_short() { - if (this.next().expect(":")) this.next(); - var body = this.node("block"); - var items = []; - - while (this.token != this.EOF && this.token !== this.tok.T_ENDIF) { - items.push(this.read_inner_statement()); - } - - return body(null, items); - } -}; - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Reads a while statement - * ```ebnf - * while ::= T_WHILE (statement | ':' inner_statement_list T_ENDWHILE ';') - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L587 - * @return {While} - */ - read_while: function read_while() { - var result = this.node("while"); - this.expect(this.tok.T_WHILE) && this.next(); - var test = null; - var body = null; - var shortForm = false; - if (this.expect("(")) this.next(); - test = this.read_expr(); - if (this.expect(")")) this.next(); - - if (this.token === ":") { - shortForm = true; - body = this.read_short_form(this.tok.T_ENDWHILE); - } else { - body = this.read_statement(); - } - - return result(test, body, shortForm); - }, - - /** - * Reads a do / while loop - * ```ebnf - * do ::= T_DO statement T_WHILE '(' expr ')' ';' - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L423 - * @return {Do} - */ - read_do: function read_do() { - var result = this.node("do"); - this.expect(this.tok.T_DO) && this.next(); - var test = null; - var body = null; - body = this.read_statement(); - - if (this.expect(this.tok.T_WHILE)) { - if (this.next().expect("(")) this.next(); - test = this.read_expr(); - if (this.expect(")")) this.next(); - if (this.expect(";")) this.next(); - } - - return result(test, body); - }, - - /** - * Read a for incremental loop - * ```ebnf - * for ::= T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement - * for_statement ::= statement | ':' inner_statement_list T_ENDFOR ';' - * for_exprs ::= expr? (',' expr)* - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L425 - * @return {For} - */ - read_for: function read_for() { - var result = this.node("for"); - this.expect(this.tok.T_FOR) && this.next(); - var init = []; - var test = []; - var increment = []; - var body = null; - var shortForm = false; - if (this.expect("(")) this.next(); - - if (this.token !== ";") { - init = this.read_list(this.read_expr, ","); - if (this.expect(";")) this.next(); - } else { - this.next(); - } - - if (this.token !== ";") { - test = this.read_list(this.read_expr, ","); - if (this.expect(";")) this.next(); - } else { - this.next(); - } - - if (this.token !== ")") { - increment = this.read_list(this.read_expr, ","); - if (this.expect(")")) this.next(); - } else { - this.next(); - } - - if (this.token === ":") { - shortForm = true; - body = this.read_short_form(this.tok.T_ENDFOR); - } else { - body = this.read_statement(); - } - - return result(init, test, increment, body, shortForm); - }, - - /** - * Reads a foreach loop - * ```ebnf - * foreach ::= '(' expr T_AS foreach_variable (T_DOUBLE_ARROW foreach_variable)? ')' statement - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L438 - * @return {Foreach} - */ - read_foreach: function read_foreach() { - var result = this.node("foreach"); - this.expect(this.tok.T_FOREACH) && this.next(); - var source = null; - var key = null; - var value = null; - var body = null; - var shortForm = false; - if (this.expect("(")) this.next(); - source = this.read_expr(); - - if (this.expect(this.tok.T_AS)) { - this.next(); - value = this.read_foreach_variable(); - - if (this.token === this.tok.T_DOUBLE_ARROW) { - key = value; - value = this.next().read_foreach_variable(); - } - } // grammatically correct but not supported by PHP - - - if (key && key.kind === "list") { - this.raiseError("Fatal Error : Cannot use list as key element"); - } - - if (this.expect(")")) this.next(); - - if (this.token === ":") { - shortForm = true; - body = this.read_short_form(this.tok.T_ENDFOREACH); - } else { - body = this.read_statement(); - } - - return result(source, key, value, body, shortForm); - }, - - /** - * Reads a foreach variable statement - * ```ebnf - * foreach_variable = - * variable | - * '&' variable | - * T_LIST '(' assignment_list ')' | - * '[' assignment_list ']' - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L544 - * @return {Expression} - */ - read_foreach_variable: function read_foreach_variable() { - if (this.token === this.tok.T_LIST || this.token === "[") { - var isShort = this.token === "["; - var result = this.node("list"); - this.next(); - if (!isShort && this.expect("(")) this.next(); - var assignList = this.read_array_pair_list(isShort); - if (this.expect(isShort ? "]" : ")")) this.next(); - return result(assignList, isShort); - } else { - return this.read_variable(false, false); - } - } -}; - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * ```ebnf - * start ::= (namespace | top_statement)* - * ``` - */ - read_start: function read_start() { - if (this.token == this.tok.T_NAMESPACE) { - return this.read_namespace(); - } else { - return this.read_top_statement(); - } - } -}; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Reads a namespace declaration block - * ```ebnf - * namespace ::= T_NAMESPACE namespace_name? '{' - * top_statements - * '}' - * | T_NAMESPACE namespace_name ';' top_statements - * ``` - * @see http://php.net/manual/en/language.namespaces.php - * @return {Namespace} - */ - read_namespace: function read_namespace() { - var result = this.node("namespace"); - var body; - this.expect(this.tok.T_NAMESPACE) && this.next(); - var name; - - if (this.token == "{") { - name = { - name: [""] - }; - } else { - name = this.read_namespace_name(); - } - - this.currentNamespace = name; - - if (this.token == ";") { - this.currentNamespace = name; - body = this.next().read_top_statements(); - this.expect(this.EOF); - return result(name.name, body, false); - } else if (this.token == "{") { - this.currentNamespace = name; - body = this.next().read_top_statements(); - this.expect("}") && this.next(); - - if (body.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - body.push(this.node("noop")()); - } - - return result(name.name, body, true); - } else if (this.token === "(") { - // @fixme after merging #478 - name.resolution = this.ast.reference.RELATIVE_NAME; - name.name = name.name.substring(1); - result.destroy(); - return this.node("call")(name, this.read_argument_list()); - } else { - this.error(["{", ";"]); // graceful mode : - - this.currentNamespace = name; - body = this.read_top_statements(); - this.expect(this.EOF); - return result(name, body, false); - } - }, - - /** - * Reads a namespace name - * ```ebnf - * namespace_name ::= T_NS_SEPARATOR? (T_STRING T_NS_SEPARATOR)* T_STRING - * ``` - * @see http://php.net/manual/en/language.namespaces.rules.php - * @return {Reference} - */ - read_namespace_name: function read_namespace_name(resolveReference) { - var result = this.node(); - var relative = false; - - if (this.token === this.tok.T_NAMESPACE) { - this.next().expect(this.tok.T_NS_SEPARATOR) && this.next(); - relative = true; - } - - var names = this.read_list(this.tok.T_STRING, this.tok.T_NS_SEPARATOR, true); - - if (!relative && names.length === 1 && (resolveReference || this.token !== "(")) { - if (names[0].toLowerCase() === "parent") { - return result("parentreference", names[0]); - } else if (names[0].toLowerCase() === "self") { - return result("selfreference", names[0]); - } - } - - return result("name", names, relative); - }, - - /** - * Reads a use statement - * ```ebnf - * use_statement ::= T_USE - * use_type? use_declarations | - * use_type use_statement '{' use_declarations '}' | - * use_statement '{' use_declarations(=>typed) '}' - * ';' - * ``` - * @see http://php.net/manual/en/language.namespaces.importing.php - * @return {UseGroup} - */ - read_use_statement: function read_use_statement() { - var result = this.node("usegroup"); - var items = []; - var name = null; - this.expect(this.tok.T_USE) && this.next(); - var type = this.read_use_type(); - items.push(this.read_use_declaration(false)); - - if (this.token === ",") { - items = items.concat(this.next().read_use_declarations(false)); - } else if (this.token === "{") { - name = items[0].name; - items = this.next().read_use_declarations(type === null); - this.expect("}") && this.next(); - } - - result = result(name, type, items); - this.expect(";") && this.next(); - return result; - }, - - /** - * - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1045 - */ - read_class_name_reference: function read_class_name_reference() { - // resolved as the same - return this.read_variable(true, false); - }, - - /** - * Reads a use declaration - * ```ebnf - * use_declaration ::= use_type? namespace_name use_alias - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L380 - * @return {UseItem} - */ - read_use_declaration: function read_use_declaration(typed) { - var result = this.node("useitem"); - var type = null; - if (typed) type = this.read_use_type(); - var name = this.read_namespace_name(); - var alias = this.read_use_alias(); - return result(name.name, alias, type); - }, - - /** - * Reads a list of use declarations - * ```ebnf - * use_declarations ::= use_declaration (',' use_declaration)* - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L380 - * @return {UseItem[]} - */ - read_use_declarations: function read_use_declarations(typed) { - var result = [this.read_use_declaration(typed)]; - - while (this.token === ",") { - this.next(); - - if (typed) { - if (this.token !== this.tok.T_FUNCTION && this.token !== this.tok.T_CONST && this.token !== this.tok.T_STRING) { - break; - } - } else if (this.token !== this.tok.T_STRING && this.token !== this.tok.T_NS_SEPARATOR) { - break; - } - - result.push(this.read_use_declaration(typed)); - } - - return result; - }, - - /** - * Reads a use statement - * ```ebnf - * use_alias ::= (T_AS T_STRING)? - * ``` - * @return {String|null} - */ - read_use_alias: function read_use_alias() { - var result = null; - - if (this.token === this.tok.T_AS) { - if (this.next().expect(this.tok.T_STRING)) { - var aliasName = this.node("identifier"); - var name = this.text(); - this.next(); - result = aliasName(name); - } - } - - return result; - }, - - /** - * Reads the namespace type declaration - * ```ebnf - * use_type ::= (T_FUNCTION | T_CONST)? - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L335 - * @return {String|null} Possible values : function, const - */ - read_use_type: function read_use_type() { - if (this.token === this.tok.T_FUNCTION) { - this.next(); - return this.ast.useitem.TYPE_FUNCTION; - } else if (this.token === this.tok.T_CONST) { - this.next(); - return this.ast.useitem.TYPE_CONST; - } - - return null; - } -}; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var specialChar = { - "\\": "\\", - $: "$", - n: "\n", - r: "\r", - t: "\t", - f: String.fromCharCode(12), - v: String.fromCharCode(11), - e: String.fromCharCode(27) -}; -module.exports = { - /** - * Unescape special chars - */ - resolve_special_chars: function resolve_special_chars(text, doubleQuote) { - if (!doubleQuote) { - // single quote fix - return text.replace(/\\\\/g, "\\").replace(/\\'/g, "'"); - } - - return text.replace(/\\"/, '"').replace(/\\([\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}|u{([0-9a-fA-F]+)})/g, function ($match, p1, p2) { - if (specialChar[p1]) { - return specialChar[p1]; - } else if ("x" === p1[0] || "X" === p1[0]) { - return String.fromCodePoint(parseInt(p1.substr(1), 16)); - } else if ("u" === p1[0]) { - return String.fromCodePoint(parseInt(p2, 16)); - } else { - return String.fromCodePoint(parseInt(p1, 8)); - } - }); - }, - - /** - * Remove all leading spaces each line for heredoc text if there is a indentation - * @param {string} text - * @param {number} indentation - * @param {boolean} indentation_uses_spaces - * @param {boolean} first_encaps_node if it is behind a variable, the first N spaces should not be removed - */ - remove_heredoc_leading_whitespace_chars: function remove_heredoc_leading_whitespace_chars(text, indentation, indentation_uses_spaces, first_encaps_node) { - if (indentation === 0) { - return text; - } - - this.check_heredoc_indentation_level(text, indentation, indentation_uses_spaces, first_encaps_node); - var matchedChar = indentation_uses_spaces ? " " : "\t"; - var removementRegExp = new RegExp("\\n".concat(matchedChar, "{").concat(indentation, "}"), "g"); - var removementFirstEncapsNodeRegExp = new RegExp("^".concat(matchedChar, "{").concat(indentation, "}")); // Rough replace, need more check - - if (first_encaps_node) { - // Remove text leading whitespace - text = text.replace(removementFirstEncapsNodeRegExp, ""); - } // Remove leading whitespace after \n - - - return text.replace(removementRegExp, "\n"); - }, - - /** - * Check indentation level of heredoc in text, if mismatch, raiseError - * @param {string} text - * @param {number} indentation - * @param {boolean} indentation_uses_spaces - * @param {boolean} first_encaps_node if it is behind a variable, the first N spaces should not be removed - */ - check_heredoc_indentation_level: function check_heredoc_indentation_level(text, indentation, indentation_uses_spaces, first_encaps_node) { - var textSize = text.length; - var offset = 0; - var leadingWhitespaceCharCount = 0; - /** - * @var inCoutingState {boolean} reset to true after a new line - */ - - var inCoutingState = true; - var chToCheck = indentation_uses_spaces ? " " : "\t"; - var inCheckState = false; - - if (!first_encaps_node) { - // start from first \n - offset = text.indexOf("\n"); // if no \n, just return - - if (offset === -1) { - return; - } - - offset++; - } - - while (offset < textSize) { - if (inCoutingState) { - if (text[offset] === chToCheck) { - leadingWhitespaceCharCount++; - } else { - inCheckState = true; - } - } else { - inCoutingState = false; - } - - if (text[offset] !== "\n" && inCheckState && leadingWhitespaceCharCount < indentation) { - this.raiseError("Invalid body indentation level (expecting an indentation at least ".concat(indentation, ")")); - } else { - inCheckState = false; - } - - if (text[offset] === "\n") { - // Reset counting state - inCoutingState = true; - leadingWhitespaceCharCount = 0; - } - - offset++; - } - }, - - /** - * Reads dereferencable scalar - */ - read_dereferencable_scalar: function read_dereferencable_scalar() { - var result = null; - - switch (this.token) { - case this.tok.T_CONSTANT_ENCAPSED_STRING: - { - var value = this.node("string"); - var text = this.text(); - var offset = 0; - - if (text[0] === "b" || text[0] === "B") { - offset = 1; - } - - var isDoubleQuote = text[offset] === '"'; - this.next(); - var textValue = this.resolve_special_chars(text.substring(offset + 1, text.length - 1), isDoubleQuote); - value = value(isDoubleQuote, textValue, offset === 1, // unicode flag - text); - - if (this.token === this.tok.T_DOUBLE_COLON) { - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1151 - result = this.read_static_getter(value); - } else { - // dirrect string - result = value; - } - } - break; - - case this.tok.T_ARRAY: - // array parser - result = this.read_array(); - break; - - case "[": - // short array format - result = this.read_array(); - break; - } - - return result; - }, - - /** - * ```ebnf - * scalar ::= T_MAGIC_CONST - * | T_LNUMBER | T_DNUMBER - * | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE? T_END_HEREDOC - * | '"' encaps_list '"' - * | T_START_HEREDOC encaps_list T_END_HEREDOC - * | namespace_name (T_DOUBLE_COLON T_STRING)? - * ``` - */ - read_scalar: function read_scalar() { - if (this.is("T_MAGIC_CONST")) { - return this.get_magic_constant(); - } else { - var value, node; - - switch (this.token) { - // NUMERIC - case this.tok.T_LNUMBER: // long - - case this.tok.T_DNUMBER: - { - // double - var result = this.node("number"); - value = this.text(); - this.next(); - return result(value, null); - } - - case this.tok.T_START_HEREDOC: - if (this.lexer.curCondition === "ST_NOWDOC") { - var start = this.lexer.yylloc.first_offset; - node = this.node("nowdoc"); - value = this.next().text(); // strip the last line return char - - if (this.lexer.heredoc_label.indentation > 0) { - value = value.substring(0, value.length - this.lexer.heredoc_label.indentation); - } - - var lastCh = value[value.length - 1]; - - if (lastCh === "\n") { - if (value[value.length - 2] === "\r") { - // windows style - value = value.substring(0, value.length - 2); - } else { - // linux style - value = value.substring(0, value.length - 1); - } - } else if (lastCh === "\r") { - // mac style - value = value.substring(0, value.length - 1); - } - - this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE) && this.next(); - this.expect(this.tok.T_END_HEREDOC) && this.next(); - - var raw = this.lexer._input.substring(start, this.lexer.yylloc.first_offset); - - node = node(this.remove_heredoc_leading_whitespace_chars(value, this.lexer.heredoc_label.indentation, this.lexer.heredoc_label.indentation_uses_spaces, this.lexer.heredoc_label.first_encaps_node), raw, this.lexer.heredoc_label.label); - return node; - } else { - return this.read_encapsed_string(this.tok.T_END_HEREDOC); - } - - case '"': - return this.read_encapsed_string('"'); - - case 'b"': - case 'B"': - { - return this.read_encapsed_string('"', true); - } - // TEXTS - - case this.tok.T_CONSTANT_ENCAPSED_STRING: - case this.tok.T_ARRAY: // array parser - - case "[": - // short array format - return this.read_dereferencable_scalar(); - - default: - { - var err = this.error("SCALAR"); // graceful mode : ignore token & return error node - - this.next(); - return err; - } - } - } - }, - - /** - * Handles the dereferencing - */ - read_dereferencable: function read_dereferencable(expr) { - var result, offset; - var node = this.node("offsetlookup"); - - if (this.token === "[") { - offset = this.next().read_expr(); - if (this.expect("]")) this.next(); - result = node(expr, offset); - } else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { - offset = this.read_encapsed_string_item(false); - result = node(expr, offset); - } - - return result; - }, - - /** - * Reads and extracts an encapsed item - * ```ebnf - * encapsed_string_item ::= T_ENCAPSED_AND_WHITESPACE - * | T_DOLLAR_OPEN_CURLY_BRACES expr '}' - * | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' - * | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - * | T_CURLY_OPEN variable '}' - * | variable - * | variable '[' expr ']' - * | variable T_OBJECT_OPERATOR T_STRING - * ``` - * @return {String|Variable|Expr|Lookup} - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1219 - */ - read_encapsed_string_item: function read_encapsed_string_item(isDoubleQuote) { - var encapsedPart = this.node("encapsedpart"); - var syntax = null; - var curly = false; - var result = this.node(), - offset, - node, - name; // plain text - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1222 - - if (this.token === this.tok.T_ENCAPSED_AND_WHITESPACE) { - var text = this.text(); - this.next(); // if this.lexer.heredoc_label.first_encaps_node -> remove first indents - - result = result("string", false, this.version >= 703 && !this.lexer.heredoc_label.finished ? this.remove_heredoc_leading_whitespace_chars(this.resolve_special_chars(text, isDoubleQuote), this.lexer.heredoc_label.indentation, this.lexer.heredoc_label.indentation_uses_spaces, this.lexer.heredoc_label.first_encaps_node) : text, false, text); - } else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { - syntax = "simple"; - curly = true; // dynamic variable name - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1239 - - name = null; - - if (this.next().token === this.tok.T_STRING_VARNAME) { - name = this.node("variable"); - var varName = this.text(); - this.next(); // check if lookup an offset - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1243 - - if (this.token === "[") { - name = name(varName, false); - node = this.node("offsetlookup"); - offset = this.next().read_expr(); - this.expect("]") && this.next(); - result = node(name, offset); - } else { - result = name(varName, false); - } - } else { - result = result("variable", this.read_expr(), false); - } - - this.expect("}") && this.next(); - } else if (this.token === this.tok.T_CURLY_OPEN) { - // expression - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1246 - syntax = "complex"; - result.destroy(); - result = this.next().read_variable(false, false); - this.expect("}") && this.next(); - } else if (this.token === this.tok.T_VARIABLE) { - syntax = "simple"; // plain variable - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1231 - - result.destroy(); - result = this.read_simple_variable(); // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1233 - - if (this.token === "[") { - node = this.node("offsetlookup"); - offset = this.next().read_encaps_var_offset(); - this.expect("]") && this.next(); - result = node(result, offset); - } // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1236 - - - if (this.token === this.tok.T_OBJECT_OPERATOR) { - node = this.node("propertylookup"); - this.next().expect(this.tok.T_STRING); - var what = this.node("identifier"); - name = this.text(); - this.next(); - result = node(result, what(name)); - } // error / fallback - - } else { - this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE); - var value = this.text(); - this.next(); // consider it as string - - result.destroy(); - result = result("string", false, value, false, value); - } // reset first_encaps_node to false after access any node - - - this.lexer.heredoc_label.first_encaps_node = false; - return encapsedPart(result, syntax, curly); - }, - - /** - * Reads an encapsed string - */ - read_encapsed_string: function read_encapsed_string(expect) { - var isBinary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var labelStart = this.lexer.yylloc.first_offset; - var node = this.node("encapsed"); - this.next(); - var start = this.lexer.yylloc.prev_offset - (isBinary ? 1 : 0); - var value = []; - var type = null; - - if (expect === "`") { - type = this.ast.encapsed.TYPE_SHELL; - } else if (expect === '"') { - type = this.ast.encapsed.TYPE_STRING; - } else { - type = this.ast.encapsed.TYPE_HEREDOC; - } // reading encapsed parts - - - while (this.token !== expect && this.token !== this.EOF) { - value.push(this.read_encapsed_string_item(true)); - } - - if (value.length > 0 && value[value.length - 1].kind === "encapsedpart" && value[value.length - 1].expression.kind === "string") { - var _node = value[value.length - 1].expression; - var lastCh = _node.value[_node.value.length - 1]; - - if (lastCh === "\n") { - if (_node.value[_node.value.length - 2] === "\r") { - // windows style - _node.value = _node.value.substring(0, _node.value.length - 2); - } else { - // linux style - _node.value = _node.value.substring(0, _node.value.length - 1); - } - } else if (lastCh === "\r") { - // mac style - _node.value = _node.value.substring(0, _node.value.length - 1); - } - } - - this.expect(expect) && this.next(); - - var raw = this.lexer._input.substring(type === "heredoc" ? labelStart : start - 1, this.lexer.yylloc.first_offset); - - node = node(value, raw, type); - - if (expect === this.tok.T_END_HEREDOC) { - node.label = this.lexer.heredoc_label.label; - this.lexer.heredoc_label.finished = true; - } - - return node; - }, - - /** - * Constant token - */ - get_magic_constant: function get_magic_constant() { - var result = this.node("magic"); - var name = this.text(); - this.next(); - return result(name.toUpperCase(), name); - } -}; - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * reading a list of top statements (helper for top_statement*) - * ```ebnf - * top_statements ::= top_statement* - * ``` - */ - read_top_statements: function read_top_statements() { - var result = []; - - while (this.token !== this.EOF && this.token !== "}") { - var statement = this.read_top_statement(); - - if (statement) { - if (Array.isArray(statement)) { - result = result.concat(statement); - } else { - result.push(statement); - } - } - } - - return result; - }, - - /** - * reading a top statement - * ```ebnf - * top_statement ::= - * namespace | function | class - * | interface | trait - * | use_statements | const_list - * | statement - * ``` - */ - read_top_statement: function read_top_statement() { - switch (this.token) { - case this.tok.T_FUNCTION: - return this.read_function(false, false); - // optional flags - - case this.tok.T_ABSTRACT: - case this.tok.T_FINAL: - case this.tok.T_CLASS: - return this.read_class_declaration_statement(); - - case this.tok.T_INTERFACE: - return this.read_interface_declaration_statement(); - - case this.tok.T_TRAIT: - return this.read_trait_declaration_statement(); - - case this.tok.T_USE: - return this.read_use_statement(); - - case this.tok.T_CONST: - { - var result = this.node("constantstatement"); - var items = this.next().read_const_list(); - this.expectEndOfStatement(); - return result(null, items); - } - - case this.tok.T_NAMESPACE: - return this.read_namespace(); - - case this.tok.T_HALT_COMPILER: - { - var _result = this.node("halt"); - - if (this.next().expect("(")) this.next(); - if (this.expect(")")) this.next(); - this.expect(";"); - this.lexer.done = true; - return _result(this.lexer._input.substring(this.lexer.offset)); - } - - default: - return this.read_statement(); - } - }, - - /** - * reads a list of simple inner statements (helper for inner_statement*) - * ```ebnf - * inner_statements ::= inner_statement* - * ``` - */ - read_inner_statements: function read_inner_statements() { - var result = []; - - while (this.token != this.EOF && this.token !== "}") { - var statement = this.read_inner_statement(); - - if (statement) { - if (Array.isArray(statement)) { - result = result.concat(statement); - } else { - result.push(statement); - } - } - } - - return result; - }, - - /** - * Reads a list of constants declaration - * ```ebnf - * const_list ::= T_CONST T_STRING '=' expr (',' T_STRING '=' expr)* ';' - * ``` - */ - read_const_list: function read_const_list() { - return this.read_list(function () { - this.expect(this.tok.T_STRING); - var result = this.node("constant"); - var constName = this.node("identifier"); - var name = this.text(); - this.next(); - constName = constName(name); - - if (this.expect("=")) { - return result(constName, this.next().read_expr()); - } else { - // fallback - return result(constName, null); - } - }, ",", false); - }, - - /** - * Reads a list of constants declaration - * ```ebnf - * declare_list ::= IDENTIFIER '=' expr (',' IDENTIFIER '=' expr)* - * ``` - * @retrurn {Array} - */ - read_declare_list: function read_declare_list() { - var result = []; - - while (this.token != this.EOF && this.token !== ")") { - this.expect(this.tok.T_STRING); - var directive = this.node("declaredirective"); - var key = this.node("identifier"); - var name = this.text(); - this.next(); - key = key(name); - var value = null; - - if (this.expect("=")) { - value = this.next().read_expr(); - } - - result.push(directive(key, value)); - if (this.token !== ",") break; - this.next(); - } - - return result; - }, - - /** - * reads a simple inner statement - * ```ebnf - * inner_statement ::= '{' inner_statements '}' | token - * ``` - */ - read_inner_statement: function read_inner_statement() { - switch (this.token) { - case this.tok.T_FUNCTION: - return this.read_function(false, false); - // optional flags - - case this.tok.T_ABSTRACT: - case this.tok.T_FINAL: - case this.tok.T_CLASS: - return this.read_class_declaration_statement(); - - case this.tok.T_INTERFACE: - return this.read_interface_declaration_statement(); - - case this.tok.T_TRAIT: - return this.read_trait_declaration_statement(); - - case this.tok.T_HALT_COMPILER: - { - this.raiseError("__HALT_COMPILER() can only be used from the outermost scope"); // fallback : returns a node but does not stop the parsing - - var node = this.node("halt"); - this.next().expect("(") && this.next(); - this.expect(")") && this.next(); - node = node(this.lexer._input.substring(this.lexer.offset)); - this.expect(";") && this.next(); - return node; - } - - default: - return this.read_statement(); - } - }, - - /** - * Reads statements - */ - read_statement: function read_statement() { - switch (this.token) { - case "{": - return this.read_code_block(false); - - case this.tok.T_IF: - return this.read_if(); - - case this.tok.T_SWITCH: - return this.read_switch(); - - case this.tok.T_FOR: - return this.read_for(); - - case this.tok.T_FOREACH: - return this.read_foreach(); - - case this.tok.T_WHILE: - return this.read_while(); - - case this.tok.T_DO: - return this.read_do(); - - case this.tok.T_COMMENT: - return this.read_comment(); - - case this.tok.T_DOC_COMMENT: - return this.read_doc_comment(); - - case this.tok.T_RETURN: - { - var result = this.node("return"); - this.next(); - var expr = this.read_optional_expr(";"); - this.expectEndOfStatement(); - return result(expr); - } - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L429 - - case this.tok.T_BREAK: - case this.tok.T_CONTINUE: - { - var _result2 = this.node(this.token === this.tok.T_CONTINUE ? "continue" : "break"); - - this.next(); - var level = this.read_optional_expr(";"); - this.expectEndOfStatement(); - return _result2(level); - } - - case this.tok.T_GLOBAL: - { - var _result3 = this.node("global"); - - var items = this.next().read_list(this.read_simple_variable, ","); - this.expectEndOfStatement(); - return _result3(items); - } - - case this.tok.T_STATIC: - { - var current = [this.token, this.lexer.getState()]; - - var _result4 = this.node(); - - if (this.next().token === this.tok.T_DOUBLE_COLON) { - // static keyword for a class - this.lexer.tokens.push(current); - - var _expr = this.next().read_expr(); - - this.expectEndOfStatement(_expr); - return _result4("expressionstatement", _expr); - } - - if (this.token === this.tok.T_FUNCTION) { - return this.read_function(true, [0, 1, 0]); - } - - var _items = this.read_variable_declarations(); - - this.expectEndOfStatement(); - return _result4("static", _items); - } - - case this.tok.T_ECHO: - { - var _result5 = this.node("echo"); - - var text = this.text(); - var shortForm = text === " 0 ? this.lexer._input[this.lexer.yylloc.first_offset - 1] : null; - var fixFirstLine = prevChar === "\r" || prevChar === "\n"; // revert back the first stripped line - - if (fixFirstLine) { - if (prevChar === "\n" && this.lexer.yylloc.first_offset > 1 && this.lexer._input[this.lexer.yylloc.first_offset - 2] === "\r") { - prevChar = "\r\n"; - } - } - - var _result6 = this.node("inline"); - - this.next(); - return _result6(value, fixFirstLine ? prevChar + value : value); - } - - case this.tok.T_UNSET: - { - var _result7 = this.node("unset"); - - this.next().expect("(") && this.next(); - var variables = this.read_function_list(this.read_variable, ","); - this.expect(")") && this.next(); - this.expect(";") && this.next(); - return _result7(variables); - } - - case this.tok.T_DECLARE: - { - var _result8 = this.node("declare"); - - var body = []; - var mode; - this.next().expect("(") && this.next(); - var directives = this.read_declare_list(); - this.expect(")") && this.next(); - - if (this.token === ":") { - this.next(); - - while (this.token != this.EOF && this.token !== this.tok.T_ENDDECLARE) { - // @todo : check declare_statement from php / not valid - body.push(this.read_top_statement()); - } - - if (body.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - body.push(this.node("noop")()); - } - - this.expect(this.tok.T_ENDDECLARE) && this.next(); - this.expectEndOfStatement(); - mode = this.ast.declare.MODE_SHORT; - } else if (this.token === "{") { - this.next(); - - while (this.token != this.EOF && this.token !== "}") { - // @todo : check declare_statement from php / not valid - body.push(this.read_top_statement()); - } - - if (body.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - body.push(this.node("noop")()); - } - - this.expect("}") && this.next(); - mode = this.ast.declare.MODE_BLOCK; - } else { - this.expect(";") && this.next(); - mode = this.ast.declare.MODE_NONE; - } - - return _result8(directives, body, mode); - } - - case this.tok.T_TRY: - return this.read_try(); - - case this.tok.T_THROW: - { - var _result9 = this.node("throw"); - - var _expr2 = this.next().read_expr(); - - this.expectEndOfStatement(); - return _result9(_expr2); - } - // ignore this (extra ponctuation) - - case ";": - { - this.next(); - return null; - } - - case this.tok.T_STRING: - { - var _result10 = this.node(); - - var _current = [this.token, this.lexer.getState()]; - var labelNameText = this.text(); - var labelName = this.node("identifier"); // AST : https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L457 - - if (this.next().token === ":") { - labelName = labelName(labelNameText); - this.next(); - return _result10("label", labelName); - } else { - labelName.destroy(); - } // default fallback expr / T_STRING '::' (etc...) - - - _result10.destroy(); - - this.lexer.tokens.push(_current); - var statement = this.node("expressionstatement"); - - var _expr3 = this.next().read_expr(); - - this.expectEndOfStatement(_expr3); - return statement(_expr3); - } - - case this.tok.T_GOTO: - { - var _result11 = this.node("goto"); - - var _labelName = null; - - if (this.next().expect(this.tok.T_STRING)) { - _labelName = this.node("identifier"); - var name = this.text(); - this.next(); - _labelName = _labelName(name); - this.expectEndOfStatement(); - } - - return _result11(_labelName); - } - - default: - { - // default fallback expr - var _statement = this.node("expressionstatement"); - - var _expr4 = this.read_expr(); - - this.expectEndOfStatement(_expr4); - return _statement(_expr4); - } - } - }, - - /** - * ```ebnf - * code_block ::= '{' (inner_statements | top_statements) '}' - * ``` - */ - read_code_block: function read_code_block(top) { - var result = this.node("block"); - this.expect("{") && this.next(); - var body = top ? this.read_top_statements() : this.read_inner_statements(); - - if (body.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - body.push(this.node("noop")()); - } - - this.expect("}") && this.next(); - return result(null, body); - } -}; - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Reads a switch statement - * ```ebnf - * switch ::= T_SWITCH '(' expr ')' switch_case_list - * ``` - * @return {Switch} - * @see http://php.net/manual/en/control-structures.switch.php - */ - read_switch: function read_switch() { - var result = this.node("switch"); - this.expect(this.tok.T_SWITCH) && this.next(); - this.expect("(") && this.next(); - var test = this.read_expr(); - this.expect(")") && this.next(); - var shortForm = this.token === ":"; - var body = this.read_switch_case_list(); - return result(test, body, shortForm); - }, - - /** - * ```ebnf - * switch_case_list ::= '{' ';'? case_list* '}' | ':' ';'? case_list* T_ENDSWITCH ';' - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L566 - */ - read_switch_case_list: function read_switch_case_list() { - // DETECT SWITCH MODE - var expect = null; - var result = this.node("block"); - var items = []; - - if (this.token === "{") { - expect = "}"; - } else if (this.token === ":") { - expect = this.tok.T_ENDSWITCH; - } else { - this.expect(["{", ":"]); - } - - this.next(); // OPTIONNAL ';' - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L570 - - if (this.token === ";") { - this.next(); - } // EXTRACTING CASES - - - while (this.token !== this.EOF && this.token !== expect) { - items.push(this.read_case_list(expect)); - } - - if (items.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - items.push(this.node("noop")()); - } // CHECK END TOKEN - - - this.expect(expect) && this.next(); - - if (expect === this.tok.T_ENDSWITCH) { - this.expectEndOfStatement(); - } - - return result(null, items); - }, - - /** - * ```ebnf - * case_list ::= ((T_CASE expr) | T_DEFAULT) (':' | ';') inner_statement* - * ``` - */ - read_case_list: function read_case_list(stopToken) { - var result = this.node("case"); - var test = null; - - if (this.token === this.tok.T_CASE) { - test = this.next().read_expr(); - } else if (this.token === this.tok.T_DEFAULT) { - // the default entry - no condition - this.next(); - } else { - this.expect([this.tok.T_CASE, this.tok.T_DEFAULT]); - } // case_separator - - - this.expect([":", ";"]) && this.next(); - var body = this.node("block"); - var items = []; - - while (this.token !== this.EOF && this.token !== stopToken && this.token !== this.tok.T_CASE && this.token !== this.tok.T_DEFAULT) { - items.push(this.read_inner_statement()); - } - - return result(test, body(null, items)); - } -}; - -/***/ }), -/* 36 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * ```ebnf - * try ::= T_TRY '{' inner_statement* '}' - * ( - * T_CATCH '(' namespace_name variable ')' '{' inner_statement* '}' - * )* - * (T_FINALLY '{' inner_statement* '}')? - * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L448 - * @return {Try} - */ - read_try: function read_try() { - this.expect(this.tok.T_TRY); - var result = this.node("try"); - var always = null; - var catches = []; - var body = this.next().read_statement(); // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L455 - - while (this.token === this.tok.T_CATCH) { - var item = this.node("catch"); - this.next().expect("(") && this.next(); - var what = this.read_list(this.read_namespace_name, "|", false); - var variable = this.read_variable(true, false); - this.expect(")"); - catches.push(item(this.next().read_statement(), what, variable)); - } - - if (this.token === this.tok.T_FINALLY) { - always = this.next().read_statement(); - } - - return result(body, catches, always); - } -}; - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -module.exports = { - /** - * Reads a short form of tokens - * @param {Number} token - The ending token - * @return {Block} - */ - read_short_form: function read_short_form(token) { - var body = this.node("block"); - var items = []; - if (this.expect(":")) this.next(); - - while (this.token != this.EOF && this.token !== token) { - items.push(this.read_inner_statement()); - } - - if (items.length === 0 && this.extractDoc && this._docs.length > this._docIndex) { - items.push(this.node("noop")()); - } - - if (this.expect(token)) this.next(); - this.expectEndOfStatement(); - return body(null, items); - }, - - /** - * https://wiki.php.net/rfc/trailing-comma-function-calls - * @param {*} item - * @param {*} separator - */ - read_function_list: function read_function_list(item, separator) { - var result = []; - - do { - if (this.token == separator && this.version >= 703 && result.length > 0) { - result.push(this.node("noop")()); - break; - } - - result.push(item.apply(this, [])); - - if (this.token != separator) { - break; - } - - if (this.next().token == ")" && this.version >= 703) { - break; - } - } while (this.token != this.EOF); - - return result; - }, - - /** - * Helper : reads a list of tokens / sample : T_STRING ',' T_STRING ... - * ```ebnf - * list ::= separator? ( item separator )* item - * ``` - */ - read_list: function read_list(item, separator, preserveFirstSeparator) { - var result = []; - - if (this.token == separator) { - if (preserveFirstSeparator) { - result.push(typeof item === "function" ? this.node("noop")() : null); - } - - this.next(); - } - - if (typeof item === "function") { - do { - var itemResult = item.apply(this, []); - - if (itemResult) { - result.push(itemResult); - } - - if (this.token != separator) { - break; - } - } while (this.next().token != this.EOF); - } else { - if (this.expect(item)) { - result.push(this.text()); - } else { - return []; - } - - while (this.next().token != this.EOF) { - if (this.token != separator) break; // trim current separator & check item - - if (this.next().token != item) break; - result.push(this.text()); - } - } - - return result; - }, - - /** - * Reads a list of names separated by a comma - * - * ```ebnf - * name_list ::= namespace (',' namespace)* - * ``` - * - * Sample code : - * ```php - * func()->property // chained calls - * ``` - */ - read_variable: function read_variable(read_only, encapsed) { - var result; // check the byref flag - - if (this.token === "&") { - return this.read_byref(this.read_variable.bind(this, read_only, encapsed)); - } // reads the entry point - - - if (this.is([this.tok.T_VARIABLE, "$"])) { - result = this.read_reference_variable(encapsed); - } else if (this.is([this.tok.T_NS_SEPARATOR, this.tok.T_STRING, this.tok.T_NAMESPACE])) { - result = this.node(); - var name = this.read_namespace_name(); - - if (this.token != this.tok.T_DOUBLE_COLON && this.token != "(" && ["parentreference", "selfreference"].indexOf(name.kind) === -1) { - // @see parser.js line 130 : resolves a conflict with scalar - var literal = name.name.toLowerCase(); - - if (literal === "true") { - result = name.destroy(result("boolean", true, name.name)); - } else if (literal === "false") { - result = name.destroy(result("boolean", false, name.name)); - } else if (literal === "null") { - result = name.destroy(result("nullkeyword", name.name)); - } else { - result.destroy(name); - result = name; - } - } else { - // @fixme possible #193 bug - result.destroy(name); - result = name; - } - } else if (this.token === this.tok.T_STATIC) { - result = this.node("staticreference"); - var raw = this.text(); - this.next(); - result = result(raw); - } else { - this.expect("VARIABLE"); - } // static mode - - - if (this.token === this.tok.T_DOUBLE_COLON) { - result = this.read_static_getter(result, encapsed); - } - - return this.recursive_variable_chain_scan(result, read_only, encapsed); - }, - // resolves a static call - read_static_getter: function read_static_getter(what, encapsed) { - var result = this.node("staticlookup"); - var offset, name; - - if (this.next().is([this.tok.T_VARIABLE, "$"])) { - offset = this.read_reference_variable(encapsed); - } else if (this.token === this.tok.T_STRING || this.token === this.tok.T_CLASS || this.version >= 700 && this.is("IDENTIFIER")) { - offset = this.node("identifier"); - name = this.text(); - this.next(); - offset = offset(name); - } else if (this.token === "{") { - offset = this.node("literal"); - name = this.next().read_expr(); - this.expect("}") && this.next(); - offset = offset("literal", name, null); - this.expect("("); - } else { - this.error([this.tok.T_VARIABLE, this.tok.T_STRING]); // graceful mode : set getter as error node and continue - - offset = this.node("identifier"); - name = this.text(); - this.next(); - offset = offset(name); - } - - return result(what, offset); - }, - read_what: function read_what() { - var is_static_lookup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var what = null; - var name = null; - - switch (this.next().token) { - case this.tok.T_STRING: - what = this.node("identifier"); - name = this.text(); - this.next(); - what = what(name); - - if (is_static_lookup && this.token === this.tok.T_OBJECT_OPERATOR) { - this.error(); - } - - break; - - case this.tok.T_VARIABLE: - what = this.node("variable"); - name = this.text().substring(1); - this.next(); - what = what(name, false); - break; - - case "$": - what = this.node(); - this.next().expect(["$", "{", this.tok.T_VARIABLE]); - - if (this.token === "{") { - // $obj->${$varname} - name = this.next().read_expr(); - this.expect("}") && this.next(); - what = what("variable", name, true); - } else { - // $obj->$$varname - name = this.read_expr(); - what = what("variable", name, false); - } - - break; - - case "{": - what = this.node("encapsedpart"); - name = this.next().read_expr(); - this.expect("}") && this.next(); - what = what(name, "complex", false); - break; - - default: - this.error([this.tok.T_STRING, this.tok.T_VARIABLE, "$", "{"]); // graceful mode : set what as error mode & continue - - what = this.node("identifier"); - name = this.text(); - this.next(); - what = what(name); - break; - } - - return what; - }, - recursive_variable_chain_scan: function recursive_variable_chain_scan(result, read_only, encapsed) { - var node, offset; - - recursive_scan_loop: while (this.token != this.EOF) { - switch (this.token) { - case "(": - if (read_only) { - // @fixme : add more informations & test - return result; - } else { - result = this.node("call")(result, this.read_argument_list()); - } - - break; - - case "[": - case "{": - { - var backet = this.token; - var isSquareBracket = backet === "["; - node = this.node("offsetlookup"); - this.next(); - offset = false; - - if (encapsed) { - offset = this.read_encaps_var_offset(); - this.expect(isSquareBracket ? "]" : "}") && this.next(); - } else { - var isCallableVariable = isSquareBracket ? this.token !== "]" : this.token !== "}"; // callable_variable : https://github.com/php/php-src/blob/493524454d66adde84e00d249d607ecd540de99f/Zend/zend_language_parser.y#L1122 - - if (isCallableVariable) { - offset = this.read_expr(); - this.expect(isSquareBracket ? "]" : "}") && this.next(); - } else { - this.next(); - } - } - - result = node(result, offset); - break; - } - - case this.tok.T_DOUBLE_COLON: - // @see https://github.com/glayzzle/php-parser/issues/107#issuecomment-354104574 - if (result.kind === "staticlookup" && result.offset.kind === "identifier") { - this.error(); - } - - node = this.node("staticlookup"); - result = node(result, this.read_what(true)); // fix 185 - // static lookup dereferencables are limited to staticlookup over functions - - /*if (dereferencable && this.token !== "(") { - this.error("("); - }*/ - - break; - - case this.tok.T_OBJECT_OPERATOR: - { - node = this.node("propertylookup"); - result = node(result, this.read_what()); - break; - } - - default: - break recursive_scan_loop; - } - } - - return result; - }, - - /** - * https://github.com/php/php-src/blob/493524454d66adde84e00d249d607ecd540de99f/Zend/zend_language_parser.y#L1231 - */ - read_encaps_var_offset: function read_encaps_var_offset() { - var offset = this.node(); - - if (this.token === this.tok.T_STRING) { - var text = this.text(); - this.next(); - offset = offset("identifier", text); - } else if (this.token === this.tok.T_NUM_STRING) { - var num = this.text(); - this.next(); - offset = offset("number", num, null); - } else if (this.token === "-") { - this.next(); - - var _num = -1 * this.text(); - - this.expect(this.tok.T_NUM_STRING) && this.next(); - offset = offset("number", _num, null); - } else if (this.token === this.tok.T_VARIABLE) { - var name = this.text().substring(1); - this.next(); - offset = offset("variable", name, false); - } else { - this.expect([this.tok.T_STRING, this.tok.T_NUM_STRING, "-", this.tok.T_VARIABLE]); // fallback : consider as identifier - - var _text = this.text(); - - this.next(); - offset = offset("identifier", _text); - } - - return offset; - }, - - /** - * ```ebnf - * reference_variable ::= simple_variable ('[' OFFSET ']')* | '{' EXPR '}' - * ``` - * - * $foo[123]; // foo is an array ==> gets its entry - * $foo{1}; // foo is a string ==> get the 2nd char offset - * ${'foo'}[123]; // get the dynamic var $foo - * $foo[123]{1}; // gets the 2nd char from the 123 array entry - * - */ - read_reference_variable: function read_reference_variable(encapsed) { - var result = this.read_simple_variable(); - var offset; - - while (this.token != this.EOF) { - var node = this.node(); - - if (this.token == "{" && !encapsed) { - // @fixme check coverage, not sure thats working - offset = this.next().read_expr(); - this.expect("}") && this.next(); - result = node("offsetlookup", result, offset); - } else { - node.destroy(); - break; - } - } - - return result; - }, - - /** - * ```ebnf - * simple_variable ::= T_VARIABLE | '$' '{' expr '}' | '$' simple_variable - * ``` - */ - read_simple_variable: function read_simple_variable() { - var result = this.node("variable"); - var name; - - if (this.expect([this.tok.T_VARIABLE, "$"]) && this.token === this.tok.T_VARIABLE) { - // plain variable name - name = this.text().substring(1); - this.next(); - result = result(name, false); - } else { - if (this.token === "$") this.next(); // dynamic variable name - - switch (this.token) { - case "{": - { - var expr = this.next().read_expr(); - this.expect("}") && this.next(); - result = result(expr, true); - break; - } - - case "$": - // $$$var - result = result(this.read_simple_variable(), false); - break; - - case this.tok.T_VARIABLE: - { - // $$var - name = this.text().substring(1); - var node = this.node("variable"); - this.next(); - result = result(node(name, false), false); - break; - } - - default: - this.error(["{", "$", this.tok.T_VARIABLE]); // graceful mode - - name = this.text(); - this.next(); - result = result(name, false); - } - } - - return result; - } -}; - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/** - * PHP AST Tokens - * @type {Object} - */ - -module.exports = { - values: { - 101: "T_HALT_COMPILER", - 102: "T_USE", - 103: "T_ENCAPSED_AND_WHITESPACE", - 104: "T_OBJECT_OPERATOR", - 105: "T_STRING", - 106: "T_DOLLAR_OPEN_CURLY_BRACES", - 107: "T_STRING_VARNAME", - 108: "T_CURLY_OPEN", - 109: "T_NUM_STRING", - 110: "T_ISSET", - 111: "T_EMPTY", - 112: "T_INCLUDE", - 113: "T_INCLUDE_ONCE", - 114: "T_EVAL", - 115: "T_REQUIRE", - 116: "T_REQUIRE_ONCE", - 117: "T_NAMESPACE", - 118: "T_NS_SEPARATOR", - 119: "T_AS", - 120: "T_IF", - 121: "T_ENDIF", - 122: "T_WHILE", - 123: "T_DO", - 124: "T_FOR", - 125: "T_SWITCH", - 126: "T_BREAK", - 127: "T_CONTINUE", - 128: "T_RETURN", - 129: "T_GLOBAL", - 130: "T_STATIC", - 131: "T_ECHO", - 132: "T_INLINE_HTML", - 133: "T_UNSET", - 134: "T_FOREACH", - 135: "T_DECLARE", - 136: "T_TRY", - 137: "T_THROW", - 138: "T_GOTO", - 139: "T_FINALLY", - 140: "T_CATCH", - 141: "T_ENDDECLARE", - 142: "T_LIST", - 143: "T_CLONE", - 144: "T_PLUS_EQUAL", - 145: "T_MINUS_EQUAL", - 146: "T_MUL_EQUAL", - 147: "T_DIV_EQUAL", - 148: "T_CONCAT_EQUAL", - 149: "T_MOD_EQUAL", - 150: "T_AND_EQUAL", - 151: "T_OR_EQUAL", - 152: "T_XOR_EQUAL", - 153: "T_SL_EQUAL", - 154: "T_SR_EQUAL", - 155: "T_INC", - 156: "T_DEC", - 157: "T_BOOLEAN_OR", - 158: "T_BOOLEAN_AND", - 159: "T_LOGICAL_OR", - 160: "T_LOGICAL_AND", - 161: "T_LOGICAL_XOR", - 162: "T_SL", - 163: "T_SR", - 164: "T_IS_IDENTICAL", - 165: "T_IS_NOT_IDENTICAL", - 166: "T_IS_EQUAL", - 167: "T_IS_NOT_EQUAL", - 168: "T_IS_SMALLER_OR_EQUAL", - 169: "T_IS_GREATER_OR_EQUAL", - 170: "T_INSTANCEOF", - 171: "T_INT_CAST", - 172: "T_DOUBLE_CAST", - 173: "T_STRING_CAST", - 174: "T_ARRAY_CAST", - 175: "T_OBJECT_CAST", - 176: "T_BOOL_CAST", - 177: "T_UNSET_CAST", - 178: "T_EXIT", - 179: "T_PRINT", - 180: "T_YIELD", - 181: "T_YIELD_FROM", - 182: "T_FUNCTION", - 183: "T_DOUBLE_ARROW", - 184: "T_DOUBLE_COLON", - 185: "T_ARRAY", - 186: "T_CALLABLE", - 187: "T_CLASS", - 188: "T_ABSTRACT", - 189: "T_TRAIT", - 190: "T_FINAL", - 191: "T_EXTENDS", - 192: "T_INTERFACE", - 193: "T_IMPLEMENTS", - 194: "T_VAR", - 195: "T_PUBLIC", - 196: "T_PROTECTED", - 197: "T_PRIVATE", - 198: "T_CONST", - 199: "T_NEW", - 200: "T_INSTEADOF", - 201: "T_ELSEIF", - 202: "T_ELSE", - 203: "T_ENDSWITCH", - 204: "T_CASE", - 205: "T_DEFAULT", - 206: "T_ENDFOR", - 207: "T_ENDFOREACH", - 208: "T_ENDWHILE", - 209: "T_CONSTANT_ENCAPSED_STRING", - 210: "T_LNUMBER", - 211: "T_DNUMBER", - 212: "T_LINE", - 213: "T_FILE", - 214: "T_DIR", - 215: "T_TRAIT_C", - 216: "T_METHOD_C", - 217: "T_FUNC_C", - 218: "T_NS_C", - 219: "T_START_HEREDOC", - 220: "T_END_HEREDOC", - 221: "T_CLASS_C", - 222: "T_VARIABLE", - 223: "T_OPEN_TAG", - 224: "T_OPEN_TAG_WITH_ECHO", - 225: "T_CLOSE_TAG", - 226: "T_WHITESPACE", - 227: "T_COMMENT", - 228: "T_DOC_COMMENT", - 229: "T_ELLIPSIS", - 230: "T_COALESCE", - 231: "T_POW", - 232: "T_POW_EQUAL", - 233: "T_SPACESHIP", - 234: "T_COALESCE_EQUAL", - 235: "T_FN" - }, - names: { - T_HALT_COMPILER: 101, - T_USE: 102, - T_ENCAPSED_AND_WHITESPACE: 103, - T_OBJECT_OPERATOR: 104, - T_STRING: 105, - T_DOLLAR_OPEN_CURLY_BRACES: 106, - T_STRING_VARNAME: 107, - T_CURLY_OPEN: 108, - T_NUM_STRING: 109, - T_ISSET: 110, - T_EMPTY: 111, - T_INCLUDE: 112, - T_INCLUDE_ONCE: 113, - T_EVAL: 114, - T_REQUIRE: 115, - T_REQUIRE_ONCE: 116, - T_NAMESPACE: 117, - T_NS_SEPARATOR: 118, - T_AS: 119, - T_IF: 120, - T_ENDIF: 121, - T_WHILE: 122, - T_DO: 123, - T_FOR: 124, - T_SWITCH: 125, - T_BREAK: 126, - T_CONTINUE: 127, - T_RETURN: 128, - T_GLOBAL: 129, - T_STATIC: 130, - T_ECHO: 131, - T_INLINE_HTML: 132, - T_UNSET: 133, - T_FOREACH: 134, - T_DECLARE: 135, - T_TRY: 136, - T_THROW: 137, - T_GOTO: 138, - T_FINALLY: 139, - T_CATCH: 140, - T_ENDDECLARE: 141, - T_LIST: 142, - T_CLONE: 143, - T_PLUS_EQUAL: 144, - T_MINUS_EQUAL: 145, - T_MUL_EQUAL: 146, - T_DIV_EQUAL: 147, - T_CONCAT_EQUAL: 148, - T_MOD_EQUAL: 149, - T_AND_EQUAL: 150, - T_OR_EQUAL: 151, - T_XOR_EQUAL: 152, - T_SL_EQUAL: 153, - T_SR_EQUAL: 154, - T_INC: 155, - T_DEC: 156, - T_BOOLEAN_OR: 157, - T_BOOLEAN_AND: 158, - T_LOGICAL_OR: 159, - T_LOGICAL_AND: 160, - T_LOGICAL_XOR: 161, - T_SL: 162, - T_SR: 163, - T_IS_IDENTICAL: 164, - T_IS_NOT_IDENTICAL: 165, - T_IS_EQUAL: 166, - T_IS_NOT_EQUAL: 167, - T_IS_SMALLER_OR_EQUAL: 168, - T_IS_GREATER_OR_EQUAL: 169, - T_INSTANCEOF: 170, - T_INT_CAST: 171, - T_DOUBLE_CAST: 172, - T_STRING_CAST: 173, - T_ARRAY_CAST: 174, - T_OBJECT_CAST: 175, - T_BOOL_CAST: 176, - T_UNSET_CAST: 177, - T_EXIT: 178, - T_PRINT: 179, - T_YIELD: 180, - T_YIELD_FROM: 181, - T_FUNCTION: 182, - T_DOUBLE_ARROW: 183, - T_DOUBLE_COLON: 184, - T_ARRAY: 185, - T_CALLABLE: 186, - T_CLASS: 187, - T_ABSTRACT: 188, - T_TRAIT: 189, - T_FINAL: 190, - T_EXTENDS: 191, - T_INTERFACE: 192, - T_IMPLEMENTS: 193, - T_VAR: 194, - T_PUBLIC: 195, - T_PROTECTED: 196, - T_PRIVATE: 197, - T_CONST: 198, - T_NEW: 199, - T_INSTEADOF: 200, - T_ELSEIF: 201, - T_ELSE: 202, - T_ENDSWITCH: 203, - T_CASE: 204, - T_DEFAULT: 205, - T_ENDFOR: 206, - T_ENDFOREACH: 207, - T_ENDWHILE: 208, - T_CONSTANT_ENCAPSED_STRING: 209, - T_LNUMBER: 210, - T_DNUMBER: 211, - T_LINE: 212, - T_FILE: 213, - T_DIR: 214, - T_TRAIT_C: 215, - T_METHOD_C: 216, - T_FUNC_C: 217, - T_NS_C: 218, - T_START_HEREDOC: 219, - T_END_HEREDOC: 220, - T_CLASS_C: 221, - T_VARIABLE: 222, - T_OPEN_TAG: 223, - T_OPEN_TAG_WITH_ECHO: 224, - T_CLOSE_TAG: 225, - T_WHITESPACE: 226, - T_COMMENT: 227, - T_DOC_COMMENT: 228, - T_ELLIPSIS: 229, - T_COALESCE: 230, - T_POW: 231, - T_POW_EQUAL: 232, - T_SPACESHIP: 233, - T_COALESCE_EQUAL: 234, - T_FN: 235 - } -}; - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Location = __webpack_require__(41); - -var Position = __webpack_require__(42); -/** - * ## Class hierarchy - * - * - [Location](#location) - * - [Position](#position) - * - [Node](#node) - * - [Noop](#noop) - * - [NullKeyword](#nullkeyword) - * - [StaticVariable](#staticvariable) - * - [EncapsedPart](#encapsedpart) - * - [Constant](#constant) - * - [Identifier](#identifier) - * - [Reference](#reference) - * - [TypeReference](#typereference) - * - [ParentReference](#parentreference) - * - [StaticReference](#staticreference) - * - [SelfReference](#selfreference) - * - [Name](#name) - * - [TraitUse](#traituse) - * - [TraitAlias](#traitalias) - * - [TraitPrecedence](#traitprecedence) - * - [Comment](#comment) - * - [CommentLine](#commentline) - * - [CommentBlock](#commentblock) - * - [Error](#error) - * - [Expression](#expression) - * - [Entry](#entry) - * - [ArrowFunc](#arrowfunc) - * - [Closure](#closure) - * - [ByRef](#byref) - * - [Silent](#silent) - * - [RetIf](#retif) - * - [New](#new) - * - [Include](#include) - * - [Call](#call) - * - [Eval](#eval) - * - [Exit](#exit) - * - [Clone](#clone) - * - [Assign](#assign) - * - [AssignRef](#assignref) - * - [Array](#array) - * - [List](#list) - * - [Variable](#variable) - * - [Variadic](#variadic) - * - [Yield](#yield) - * - [YieldFrom](#yieldfrom) - * - [Print](#print) - * - [Isset](#isset) - * - [Empty](#empty) - * - [Lookup](#lookup) - * - [PropertyLookup](#propertylookup) - * - [StaticLookup](#staticlookup) - * - [OffsetLookup](#offsetlookup) - * - [Operation](#operation) - * - [Pre](#pre) - * - [Post](#post) - * - [Bin](#bin) - * - [Unary](#unary) - * - [Cast](#cast) - * - [Literal](#literal) - * - [Boolean](#boolean) - * - [String](#string) - * - [Number](#number) - * - [Inline](#inline) - * - [Magic](#magic) - * - [Nowdoc](#nowdoc) - * - [Encapsed](#encapsed) - * - [Statement](#statement) - * - [ConstantStatement](#constantstatement) - * - [ClassConstant](#classconstant) - * - [Return](#return) - * - [Label](#label) - * - [Continue](#continue) - * - [Case](#case) - * - [Break](#break) - * - [Echo](#echo) - * - [Unset](#unset) - * - [Halt](#halt) - * - [Declare](#declare) - * - [Global](#global) - * - [Static](#static) - * - [If](#if) - * - [Do](#do) - * - [While](#while) - * - [For](#for) - * - [Foreach](#foreach) - * - [Switch](#switch) - * - [Goto](#goto) - * - [Try](#try) - * - [Catch](#catch) - * - [Throw](#throw) - * - [UseGroup](#usegroup) - * - [UseItem](#useitem) - * - [Block](#block) - * - [Program](#program) - * - [Namespace](#namespace) - * - [PropertyStatement](#propertystatement) - * - [Property](#property) - * - [Declaration](#declaration) - * - [Class](#class) - * - [Interface](#interface) - * - [Trait](#trait) - * - [Function](#function) - * - [Method](#method) - * - [Parameter](#parameter) - * --- - */ - -/** - * The AST builder class - * @constructor AST - * @tutorial AST - * @property {Boolean} withPositions - Should locate any node (by default false) - * @property {Boolean} withSource - Should extract the node original code (by default false) - */ - - -var AST = function AST(withPositions, withSource) { - this.withPositions = withPositions; - this.withSource = withSource; -}; -/** - * Create a position node from specified parser - * including it's lexer current state - * @param {Parser} - * @return {Position} - * @private - */ - - -AST.prototype.position = function (parser) { - return new Position(parser.lexer.yylloc.first_line, parser.lexer.yylloc.first_column, parser.lexer.yylloc.first_offset); -}; // operators in ascending order of precedence - - -AST.precedence = {}; -[["or"], ["xor"], ["and"], ["="], ["?"], ["??"], ["||"], ["&&"], ["|"], ["^"], ["&"], ["==", "!=", "===", "!==", -/* '<>', */ -"<=>"], ["<", "<=", ">", ">="], ["<<", ">>"], ["+", "-", "."], ["*", "/", "%"], ["!"], ["instanceof"], ["cast", "silent"], ["**"] // TODO: [ (array) -// TODO: clone, new -].forEach(function (list, index) { - list.forEach(function (operator) { - AST.precedence[operator] = index + 1; - }); -}); - -AST.prototype.isRightAssociative = function (operator) { - return operator === "**" || operator === "??"; -}; -/** - * Change parent node informations after swapping childs - */ - - -AST.prototype.swapLocations = function (target, first, last, parser) { - if (this.withPositions) { - target.loc.start = first.loc.start; - target.loc.end = last.loc.end; - - if (this.withSource) { - target.loc.source = parser.lexer._input.substring(target.loc.start.offset, target.loc.end.offset); - } - } -}; -/** - * Includes locations from first & last into the target - */ - - -AST.prototype.resolveLocations = function (target, first, last, parser) { - if (this.withPositions) { - if (target.loc.start.offset > first.loc.start.offset) { - target.loc.start = first.loc.start; - } - - if (target.loc.end.offset < last.loc.end.offset) { - target.loc.end = last.loc.end; - } - - if (this.withSource) { - target.loc.source = parser.lexer._input.substring(target.loc.start.offset, target.loc.end.offset); - } - } -}; -/** - * Check and fix precence, by default using right - */ - - -AST.prototype.resolvePrecedence = function (result, parser) { - var buffer, lLevel, rLevel; // handling precendence - - if (result.kind === "call") { - // including what argument into location - this.resolveLocations(result, result.what, result, parser); - } else if (result.kind === "propertylookup" || result.kind === "staticlookup" || result.kind === "offsetlookup" && result.offset) { - // including what argument into location - this.resolveLocations(result, result.what, result.offset, parser); - } else if (result.kind === "bin") { - if (result.right && !result.right.parenthesizedExpression) { - if (result.right.kind === "bin") { - lLevel = AST.precedence[result.type]; - rLevel = AST.precedence[result.right.type]; - - if (lLevel && rLevel && rLevel <= lLevel && !this.isRightAssociative(result.type)) { - // https://github.com/glayzzle/php-parser/issues/79 - // shift precedence - buffer = result.right; - result.right = result.right.left; - this.swapLocations(result, result.left, result.right, parser); - buffer.left = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.left, buffer.right, parser); - result = buffer; - } - } else if (result.right.kind === "retif") { - lLevel = AST.precedence[result.type]; - rLevel = AST.precedence["?"]; - - if (lLevel && rLevel && rLevel <= lLevel) { - buffer = result.right; - result.right = result.right.test; - this.swapLocations(result, result.left, result.right, parser); - buffer.test = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.test, buffer.falseExpr, parser); - result = buffer; - } - } - } - } else if ((result.kind === "silent" || result.kind === "cast") && result.expr && !result.expr.parenthesizedExpression) { - // https://github.com/glayzzle/php-parser/issues/172 - if (result.expr.kind === "bin") { - buffer = result.expr; - result.expr = result.expr.left; - this.swapLocations(result, result, result.expr, parser); - buffer.left = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.left, buffer.right, parser); - result = buffer; - } else if (result.expr.kind === "retif") { - buffer = result.expr; - result.expr = result.expr.test; - this.swapLocations(result, result, result.expr, parser); - buffer.test = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.test, buffer.falseExpr, parser); - result = buffer; - } - } else if (result.kind === "unary") { - // https://github.com/glayzzle/php-parser/issues/75 - if (result.what && !result.what.parenthesizedExpression) { - // unary precedence is allways lower - if (result.what.kind === "bin") { - buffer = result.what; - result.what = result.what.left; - this.swapLocations(result, result, result.what, parser); - buffer.left = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.left, buffer.right, parser); - result = buffer; - } else if (result.what.kind === "retif") { - buffer = result.what; - result.what = result.what.test; - this.swapLocations(result, result, result.what, parser); - buffer.test = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.test, buffer.falseExpr, parser); - result = buffer; - } - } - } else if (result.kind === "retif") { - // https://github.com/glayzzle/php-parser/issues/77 - if (result.falseExpr && result.falseExpr.kind === "retif" && !result.falseExpr.parenthesizedExpression) { - buffer = result.falseExpr; - result.falseExpr = buffer.test; - this.swapLocations(result, result.test, result.falseExpr, parser); - buffer.test = this.resolvePrecedence(result, parser); - this.swapLocations(buffer, buffer.test, buffer.falseExpr, parser); - result = buffer; - } - } else if (result.kind === "assign") { - // https://github.com/glayzzle/php-parser/issues/81 - if (result.right && result.right.kind === "bin" && !result.right.parenthesizedExpression) { - lLevel = AST.precedence["="]; - rLevel = AST.precedence[result.right.type]; // only shifts with and, xor, or - - if (lLevel && rLevel && rLevel < lLevel) { - buffer = result.right; - result.right = result.right.left; - buffer.left = result; - this.swapLocations(buffer, buffer.left, result.right, parser); - result = buffer; - } - } - } else if (result.kind === "expressionstatement") { - this.swapLocations(result, result.expression, result, parser); - } - - return result; -}; -/** - * Prepares an AST node - * @param {String|null} kind - Defines the node type - * (if null, the kind must be passed at the function call) - * @param {Parser} parser - The parser instance (use for extracting locations) - * @return {Function} - */ - - -AST.prototype.prepare = function (kind, docs, parser) { - var start = null; - - if (this.withPositions || this.withSource) { - start = this.position(parser); - } - - var self = this; // returns the node - - var result = function result() { - var location = null; - var args = Array.prototype.slice.call(arguments); - args.push(docs); - - if (self.withPositions || self.withSource) { - var src = null; - - if (self.withSource) { - src = parser.lexer._input.substring(start.offset, parser.prev[2]); - } // if with source, need location on swapLocations function - - - location = new Location(src, start, new Position(parser.prev[0], parser.prev[1], parser.prev[2])); // last argument is allways the location - - args.push(location); - } // handle lazy kind definitions - - - if (!kind) { - kind = args.shift(); - } // build the object - - - var node = self[kind]; - - if (typeof node !== "function") { - throw new Error('Undefined node "' + kind + '"'); - } - - var astNode = Object.create(node.prototype); - node.apply(astNode, args); - result.instance = astNode; - - if (result.trailingComments) { - // buffer of trailingComments - astNode.trailingComments = result.trailingComments; - } - - if (typeof result.postBuild === "function") { - result.postBuild(astNode); - } - - if (parser.debug) { - delete AST.stack[result.stackUid]; - } - - return self.resolvePrecedence(astNode, parser); - }; - - if (parser.debug) { - if (!AST.stack) { - AST.stack = {}; - AST.stackUid = 1; - } - - AST.stack[++AST.stackUid] = { - position: start, - stack: new Error().stack.split("\n").slice(3, 5) - }; - result.stackUid = AST.stackUid; - } - /** - * Sets a list of trailing comments - * @param {*} docs - */ - - - result.setTrailingComments = function (docs) { - if (result.instance) { - // already created - result.instance.setTrailingComments(docs); - } else { - result.trailingComments = docs; - } - }; - /** - * Release a node without using it on the AST - */ - - - result.destroy = function (target) { - if (docs) { - // release current docs stack - if (target) { - if (!target.leadingComments) { - target.leadingComments = docs; - } else { - target.leadingComments = docs.concat(target.leadingComments); - } - } else { - parser._docIndex = parser._docs.length - docs.length; - } - } - - if (parser.debug) { - delete AST.stack[result.stackUid]; - } - }; - - return result; -}; - -AST.prototype.checkNodes = function () { - var errors = []; - - for (var k in AST.stack) { - if (AST.stack.hasOwnProperty(k)) { - errors.push(AST.stack[k]); - } - } - - AST.stack = {}; - return errors; -}; // Define all AST nodes - - -[__webpack_require__(43), __webpack_require__(44), __webpack_require__(45), __webpack_require__(46), __webpack_require__(47), __webpack_require__(7), __webpack_require__(48), __webpack_require__(49), __webpack_require__(50), __webpack_require__(51), __webpack_require__(52), __webpack_require__(53), __webpack_require__(54), __webpack_require__(55), __webpack_require__(56), __webpack_require__(57), __webpack_require__(58), __webpack_require__(9), __webpack_require__(59), __webpack_require__(60), __webpack_require__(61), __webpack_require__(10), __webpack_require__(62), __webpack_require__(5), __webpack_require__(63), __webpack_require__(64), __webpack_require__(65), __webpack_require__(66), __webpack_require__(67), __webpack_require__(68), __webpack_require__(69), __webpack_require__(70), __webpack_require__(71), __webpack_require__(72), __webpack_require__(73), __webpack_require__(1), __webpack_require__(74), __webpack_require__(75), __webpack_require__(76), __webpack_require__(11), __webpack_require__(77), __webpack_require__(78), __webpack_require__(79), __webpack_require__(80), __webpack_require__(81), __webpack_require__(82), __webpack_require__(83), __webpack_require__(84), __webpack_require__(85), __webpack_require__(86), __webpack_require__(87), __webpack_require__(3), __webpack_require__(8), __webpack_require__(88), __webpack_require__(89), __webpack_require__(90), __webpack_require__(91), __webpack_require__(92), __webpack_require__(2), __webpack_require__(93), __webpack_require__(94), __webpack_require__(95), __webpack_require__(96), __webpack_require__(97), __webpack_require__(4), __webpack_require__(98), __webpack_require__(99), __webpack_require__(100), __webpack_require__(101), __webpack_require__(102), __webpack_require__(103), __webpack_require__(104), __webpack_require__(105), __webpack_require__(106), __webpack_require__(6), __webpack_require__(107), __webpack_require__(108), __webpack_require__(109), __webpack_require__(110), __webpack_require__(0), __webpack_require__(111), __webpack_require__(112), __webpack_require__(113), __webpack_require__(114), __webpack_require__(115), __webpack_require__(116), __webpack_require__(117), __webpack_require__(118), __webpack_require__(119), __webpack_require__(120), __webpack_require__(121), __webpack_require__(122), __webpack_require__(123), __webpack_require__(124), __webpack_require__(125), __webpack_require__(126), __webpack_require__(127), __webpack_require__(128), __webpack_require__(129), __webpack_require__(130), __webpack_require__(131), __webpack_require__(132)].forEach(function (ctor) { - AST.prototype[ctor.kind] = ctor; -}); -module.exports = AST; - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/** - * Defines the location of the node (with it's source contents as string) - * @constructor Location - * @property {String|null} source - * @property {Position} start - * @property {Position} end - */ - -var Location = function Location(source, start, end) { - this.source = source; - this.start = start; - this.end = end; -}; - -module.exports = Location; - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -/** - * Each Position object consists of a line number (1-indexed) and a column number (0-indexed): - * @constructor Position - * @property {Number} line - * @property {Number} column - * @property {Number} offset - */ - -var Position = function Position(line, column, offset) { - this.line = line; - this.column = column; - this.offset = offset; -}; - -module.exports = Position; - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expr = __webpack_require__(1); - -var KIND = "array"; -/** - * Defines an array structure - * @constructor Array - * @example - * // PHP code : - * [1, 'foo' => 'bar', 3] - * - * // AST structure : - * { - * "kind": "array", - * "shortForm": true - * "items": [ - * {"kind": "number", "value": "1"}, - * { - * "kind": "entry", - * "key": {"kind": "string", "value": "foo", "isDoubleQuote": false}, - * "value": {"kind": "string", "value": "bar", "isDoubleQuote": false} - * }, - * {"kind": "number", "value": "3"} - * ] - * } - * @extends {Expression} - * @property {Entry|Expr|Variable} items List of array items - * @property {boolean} shortForm Indicate if the short array syntax is used, ex `[]` instead `array()` - */ - -module.exports = Expr["extends"](KIND, function Array(shortForm, items, docs, location) { - Expr.apply(this, [KIND, docs, location]); - this.items = items; - this.shortForm = shortForm; -}); - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "arrowfunc"; -/** - * Defines an arrow function (it's like a closure) - * @constructor ArrowFunc - * @extends {Expression} - * @property {Parameter[]} arguments - * @property {Identifier} type - * @property {Expression} body - * @property {boolean} byref - * @property {boolean} nullable - * @property {boolean} isStatic - */ - -module.exports = Expression["extends"](KIND, function Closure(args, byref, body, type, nullable, isStatic, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.arguments = args; - this.byref = byref; - this.body = body; - this.type = type; - this.nullable = nullable; - this.isStatic = isStatic || false; -}); - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "assign"; -/** - * Assigns a value to the specified target - * @constructor Assign - * @extends {Expression} - * @property {Expression} left - * @property {Expression} right - * @property {String} operator - */ - -module.exports = Expression["extends"](KIND, function Assign(left, right, operator, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.left = left; - this.right = right; - this.operator = operator; -}); - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "assignref"; -/** - * Assigns a value to the specified target - * @constructor Assign - * @extends {Expression} - * @property {Expression} left - * @property {Expression} right - * @property {String} operator - */ - -module.exports = Expression["extends"](KIND, function AssignRef(left, right, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.left = left; - this.right = right; -}); - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Operation = __webpack_require__(4); - -var KIND = "bin"; -/** - * Binary operations - * @constructor Bin - * @extends {Operation} - * @property {String} type - * @property {Expression} left - * @property {Expression} right - */ - -module.exports = Operation["extends"](KIND, function Bin(type, left, right, docs, location) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.left = left; - this.right = right; -}); - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Literal = __webpack_require__(3); - -var KIND = "boolean"; -/** - * Defines a boolean value (true/false) - * @constructor Boolean - * @extends {Literal} - */ - -module.exports = Literal["extends"](KIND, function Boolean(value, raw, docs, location) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); - -/***/ }), -/* 49 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "break"; -/** - * A break statement - * @constructor Break - * @extends {Statement} - * @property {Number|Null} level - */ - -module.exports = Statement["extends"](KIND, function Break(level, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.level = level; -}); - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "byref"; -/** - * Passing by Reference - so the function can modify the variable - * @constructor ByRef - * @extends {Expression} - * @property {expr} what - */ - -module.exports = Expression["extends"](KIND, function ByRef(what, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; -}); - -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "call"; -/** - * Executes a call statement - * @constructor Call - * @extends {Expression} - * @property {Identifier|Variable|??} what - * @property {Arguments[]} arguments - */ - -module.exports = Expression["extends"](KIND, function Call(what, args, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; - this.arguments = args; -}); - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "case"; -/** - * A switch case statement - * @constructor Case - * @extends {Statement} - * @property {Expression|null} test - if null, means that the default case - * @property {Block|null} body - */ - -module.exports = Statement["extends"](KIND, function Case(test, body, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; -}); - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Operation = __webpack_require__(4); - -var KIND = "cast"; -/** - * Binary operations - * @constructor Cast - * @extends {Operation} - * @property {String} type - * @property {String} raw - * @property {Expression} expr - */ - -module.exports = Operation["extends"](KIND, function Cast(type, raw, expr, docs, location) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.raw = raw; - this.expr = expr; -}); - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "catch"; -/** - * Defines a catch statement - * @constructor Catch - * @extends {Statement} - * @property {Identifier[]} what - * @property {Variable} variable - * @property {Statement} body - * @see http://php.net/manual/en/language.exceptions.php - */ - -module.exports = Statement["extends"](KIND, function Catch(body, what, variable, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.body = body; - this.what = what; - this.variable = variable; -}); - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Declaration = __webpack_require__(5); - -var KIND = "class"; -/** - * A class definition - * @constructor Class - * @extends {Declaration} - * @property {Identifier|null} extends - * @property {Identifier[]} implements - * @property {Declaration[]} body - * @property {boolean} isAnonymous - * @property {boolean} isAbstract - * @property {boolean} isFinal - */ - -module.exports = Declaration["extends"](KIND, function Class(name, ext, impl, body, flags, docs, location) { - Declaration.apply(this, [KIND, name, docs, location]); - this.isAnonymous = name ? false : true; - this["extends"] = ext; - this["implements"] = impl; - this.body = body; - this.parseFlags(flags); -}); - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var ConstantStatement = __webpack_require__(10); - -var KIND = "classconstant"; -var IS_UNDEFINED = ""; -var IS_PUBLIC = "public"; -var IS_PROTECTED = "protected"; -var IS_PRIVATE = "private"; -/** - * Defines a class/interface/trait constant - * @constructor ClassConstant - * @extends {ConstantStatement} - * @property {string} visibility - */ - -var ClassConstant = ConstantStatement["extends"](KIND, function ClassConstant(kind, constants, flags, docs, location) { - ConstantStatement.apply(this, [kind || KIND, constants, docs, location]); - this.parseFlags(flags); -}); -/** - * Generic flags parser - * @param {Integer[]} flags - * @return {void} - */ - -ClassConstant.prototype.parseFlags = function (flags) { - if (flags[0] === -1) { - this.visibility = IS_UNDEFINED; - } else if (flags[0] === null) { - this.visibility = null; - } else if (flags[0] === 0) { - this.visibility = IS_PUBLIC; - } else if (flags[0] === 1) { - this.visibility = IS_PROTECTED; - } else if (flags[0] === 2) { - this.visibility = IS_PRIVATE; - } -}; - -module.exports = ClassConstant; - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "clone"; -/** - * Defines a clone call - * @constructor Clone - * @extends {Expression} - * @property {Expression} what - */ - -module.exports = Expression["extends"](KIND, function Clone(what, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; -}); - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "closure"; -/** - * Defines a closure - * @constructor Closure - * @extends {Expression} - * @property {Parameter[]} arguments - * @property {Variable[]} uses - * @property {Identifier} type - * @property {boolean} byref - * @property {boolean} nullable - * @property {Block|null} body - * @property {boolean} isStatic - */ - -module.exports = Expression["extends"](KIND, function Closure(args, byref, uses, type, nullable, isStatic, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.uses = uses; - this.arguments = args; - this.byref = byref; - this.type = type; - this.nullable = nullable; - this.isStatic = isStatic || false; - this.body = null; -}); - -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Comment = __webpack_require__(9); - -var KIND = "commentblock"; -/** - * A comment block (multiline) - * @constructor CommentBlock - * @extends {Comment} - */ - -module.exports = Comment["extends"](KIND, function CommentBlock(value, docs, location) { - Comment.apply(this, [KIND, value, docs, location]); -}); - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Comment = __webpack_require__(9); - -var KIND = "commentline"; -/** - * A single line comment - * @constructor CommentLine - * @extends {Comment} - */ - -module.exports = Comment["extends"](KIND, function CommentLine(value, docs, location) { - Comment.apply(this, [KIND, value, docs, location]); -}); - -/***/ }), -/* 61 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "constant"; -/** - * Defines a constant - * @constructor Constant - * @extends {Node} - * @property {string} name - * @property {Node|string|number|boolean|null} value - */ - -module.exports = Node["extends"](KIND, function Constant(name, value, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.name = name; - this.value = value; -}); - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "continue"; -/** - * A continue statement - * @constructor Continue - * @extends {Statement} - * @property {Number|Null} level - */ - -module.exports = Statement["extends"](KIND, function Continue(level, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.level = level; -}); - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Block = __webpack_require__(7); - -var KIND = "declare"; -/** - * The declare construct is used to set execution directives for a block of code - * @constructor Declare - * @extends {Block} - * @property {Array[]} directives - * @property {String} mode - * @see http://php.net/manual/en/control-structures.declare.php - */ - -var Declare = Block["extends"](KIND, function Declare(directives, body, mode, docs, location) { - Block.apply(this, [KIND, body, docs, location]); - this.directives = directives; - this.mode = mode; -}); -/** - * The node is declared as a short tag syntax : - * ```php - * bar_$baz; - * ``` - * @constant {String} TYPE_OFFSET - `offset` - */ - -Encapsed.TYPE_OFFSET = "offset"; -module.exports = Encapsed; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "encapsedpart"; -/** - * Part of `Encapsed` node - * @constructor EncapsedPart - * @extends {Expression} - * @property {Expression} expression - * @property {String} syntax - * @property {Boolean} curly - */ - -module.exports = Expression["extends"](KIND, function EncapsedPart(expression, syntax, curly, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; - this.syntax = syntax; - this.curly = curly; -}); - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "entry"; -/** - * An array entry - see [Array](#array) - * @constructor Entry - * @extends {Expression} - * @property {Node|null} key The entry key/offset - * @property {Node} value The entry value - * @property {Boolean} byRef By reference - * @property {Boolean} unpack Argument unpacking - */ - -module.exports = Expression["extends"](KIND, function Entry(key, value, byRef, unpack, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.key = key; - this.value = value; - this.byRef = byRef; - this.unpack = unpack; -}); - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "error"; -/** - * Defines an error node (used only on silentMode) - * @constructor Error - * @extends {Node} - * @property {string} message - * @property {number} line - * @property {number|string} token - * @property {string|array} expected - */ - -module.exports = Node["extends"](KIND, function Error(message, token, line, expected, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.message = message; - this.token = token; - this.line = line; - this.expected = expected; -}); - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "eval"; -/** - * Defines an eval statement - * @constructor Eval - * @extends {Expression} - * @property {Node} source - */ - -module.exports = Expression["extends"](KIND, function Eval(source, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.source = source; -}); - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "exit"; -/** - * Defines an exit / die call - * @constructor Exit - * @extends {Expression} - * @property {Node|null} expression - * @property {Boolean} useDie - */ - -module.exports = Expression["extends"](KIND, function Exit(expression, useDie, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; - this.useDie = useDie; -}); - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "expressionstatement"; -/** - * Defines an expression based statement - * @constructor ExpressionStatement - * @extends {Statement} - * @property {Expression} expression - */ - -module.exports = Statement["extends"](KIND, function ExpressionStatement(expr, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.expression = expr; -}); - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "for"; -/** - * Defines a for iterator - * @constructor For - * @extends {Statement} - * @property {Expression[]} init - * @property {Expression[]} test - * @property {Expression[]} increment - * @property {Statement} body - * @property {boolean} shortForm - * @see http://php.net/manual/en/control-structures.for.php - */ - -module.exports = Statement["extends"](KIND, function For(init, test, increment, body, shortForm, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.init = init; - this.test = test; - this.increment = increment; - this.shortForm = shortForm; - this.body = body; -}); - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "foreach"; -/** - * Defines a foreach iterator - * @constructor Foreach - * @extends {Statement} - * @property {Expression} source - * @property {Expression|null} key - * @property {Expression} value - * @property {Statement} body - * @property {boolean} shortForm - * @see http://php.net/manual/en/control-structures.foreach.php - */ - -module.exports = Statement["extends"](KIND, function Foreach(source, key, value, body, shortForm, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.source = source; - this.key = key; - this.value = value; - this.shortForm = shortForm; - this.body = body; -}); - -/***/ }), -/* 77 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "global"; -/** - * Imports a variable from the global scope - * @constructor Global - * @extends {Statement} - * @property {Variable[]} items - */ - -module.exports = Statement["extends"](KIND, function Global(items, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.items = items; -}); - -/***/ }), -/* 78 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "goto"; -/** - * Defines goto statement - * @constructor Goto - * @extends {Statement} - * @property {String} label - * @see {Label} - */ - -module.exports = Statement["extends"](KIND, function Goto(label, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.label = label; -}); - -/***/ }), -/* 79 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "halt"; -/** - * Halts the compiler execution - * @constructor Halt - * @extends {Statement} - * @property {String} after - String after the halt statement - * @see http://php.net/manual/en/function.halt-compiler.php - */ - -module.exports = Statement["extends"](KIND, function Halt(after, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.after = after; -}); - -/***/ }), -/* 80 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "identifier"; -/** - * Defines an identifier node - * @constructor Identifier - * @extends {Node} - * @property {string} name - */ - -var Identifier = Node["extends"](KIND, function Identifier(name, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.name = name; -}); -module.exports = Identifier; - -/***/ }), -/* 81 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "if"; -/** - * Defines a if statement - * @constructor If - * @extends {Statement} - * @property {Expression} test - * @property {Block} body - * @property {Block|If|null} alternate - * @property {boolean} shortForm - */ - -module.exports = Statement["extends"](KIND, function If(test, body, alternate, shortForm, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; - this.alternate = alternate; - this.shortForm = shortForm; -}); - -/***/ }), -/* 82 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "include"; -/** - * Defines system include call - * @constructor Include - * @extends {Expression} - * @property {Node} target - * @property {boolean} once - * @property {boolean} require - */ - -module.exports = Expression["extends"](KIND, function Include(once, require, target, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.once = once; - this.require = require; - this.target = target; -}); - -/***/ }), -/* 83 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Literal = __webpack_require__(3); - -var KIND = "inline"; -/** - * Defines inline html output (treated as echo output) - * @constructor Inline - * @extends {Literal} - */ - -module.exports = Literal["extends"](KIND, function Inline(value, raw, docs, location) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); - -/***/ }), -/* 84 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Declaration = __webpack_require__(5); - -var KIND = "interface"; -/** - * An interface definition - * @constructor Interface - * @extends {Declaration} - * @property {Identifier[]} extends - * @property {Declaration[]} body - */ - -module.exports = Declaration["extends"](KIND, function Interface(name, ext, body, docs, location) { - Declaration.apply(this, [KIND, name, docs, location]); - this["extends"] = ext; - this.body = body; -}); - -/***/ }), -/* 85 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "isset"; -/** - * Defines an isset call - * @constructor Isset - * @extends {Expression} - */ - -module.exports = Expression["extends"](KIND, function Isset(variables, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.variables = variables; -}); - -/***/ }), -/* 86 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "label"; -/** - * A label statement (referenced by goto) - * @constructor Label - * @extends {Statement} - * @property {String} name - */ - -module.exports = Statement["extends"](KIND, function Label(name, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; -}); - -/***/ }), -/* 87 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "list"; -/** - * Defines list assignment - * @constructor List - * @extends {Expression} - * @property {boolean} shortForm - */ - -module.exports = Expression["extends"](KIND, function List(items, shortForm, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.items = items; - this.shortForm = shortForm; -}); - -/***/ }), -/* 88 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Literal = __webpack_require__(3); - -var KIND = "magic"; -/** - * Defines magic constant - * @constructor Magic - * @extends {Literal} - */ - -module.exports = Literal["extends"](KIND, function Magic(value, raw, docs, location) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); - -/***/ }), -/* 89 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var _Function = __webpack_require__(11); - -var KIND = "method"; -/** - * Defines a class/interface/trait method - * @constructor Method - * @extends {_Function} - * @property {boolean} isAbstract - * @property {boolean} isFinal - * @property {boolean} isStatic - * @property {string} visibility - */ - -module.exports = _Function["extends"](KIND, function Method() { - _Function.apply(this, arguments); - - this.kind = KIND; -}); - -/***/ }), -/* 90 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Reference = __webpack_require__(6); - -var KIND = "name"; -/** - * Defines a class reference node - * @constructor Name - * @extends {Reference} - * @property {string} name - * @property {string} resolution - */ - -var Name = Reference["extends"](KIND, function Name(name, isRelative, docs, location) { - Reference.apply(this, [KIND, docs, location]); - - if (isRelative) { - this.resolution = Name.RELATIVE_NAME; - } else if (name.length === 1) { - this.resolution = Name.UNQUALIFIED_NAME; - } else if (!name[0]) { - this.resolution = Name.FULL_QUALIFIED_NAME; - } else { - this.resolution = Name.QUALIFIED_NAME; - } - - this.name = name.join("\\"); -}); -/** - * This is an identifier without a namespace separator, such as Foo - * @constant {String} UNQUALIFIED_NAME - */ - -Name.UNQUALIFIED_NAME = "uqn"; -/** - * This is an identifier with a namespace separator, such as Foo\Bar - * @constant {String} QUALIFIED_NAME - */ - -Name.QUALIFIED_NAME = "qn"; -/** - * This is an identifier with a namespace separator that begins with - * a namespace separator, such as \Foo\Bar. The namespace \Foo is also - * a fully qualified name. - * @constant {String} FULL_QUALIFIED_NAME - */ - -Name.FULL_QUALIFIED_NAME = "fqn"; -/** - * This is an identifier starting with namespace, such as namespace\Foo\Bar. - * @constant {String} RELATIVE_NAME - */ - -Name.RELATIVE_NAME = "rn"; -module.exports = Name; - -/***/ }), -/* 91 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Block = __webpack_require__(7); - -var KIND = "namespace"; -/** - * The main program node - * @constructor Namespace - * @extends {Block} - * @property {String} name - * @property {Boolean} withBrackets - */ - -module.exports = Block["extends"](KIND, function Namespace(name, children, withBrackets, docs, location) { - Block.apply(this, [KIND, children, docs, location]); - this.name = name; - this.withBrackets = withBrackets || false; -}); - -/***/ }), -/* 92 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "new"; -/** - * Creates a new instance of the specified class - * @constructor New - * @extends {Expression} - * @property {Identifier|Variable|Class} what - * @property {Arguments[]} arguments - */ - -module.exports = Expression["extends"](KIND, function New(what, args, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; - this.arguments = args; -}); - -/***/ }), -/* 93 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "noop"; -/** - * Ignore this node, it implies a no operation block, for example : - * [$foo, $bar, /* here a noop node * /] - * @constructor Noop - * @extends {Node} - */ - -module.exports = Node["extends"](KIND, function Noop(docs, location) { - Node.apply(this, [KIND, docs, location]); -}); - -/***/ }), -/* 94 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Literal = __webpack_require__(3); - -var KIND = "nowdoc"; -/** - * Defines a nowdoc string - * @constructor NowDoc - * @extends {Literal} - * @property {String} label - * @property {String} raw - */ - -module.exports = Literal["extends"](KIND, function Nowdoc(value, raw, label, docs, location) { - Literal.apply(this, [KIND, value, raw, docs, location]); - this.label = label; -}); - -/***/ }), -/* 95 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "nullkeyword"; -/** - * Represents the null keyword - * @constructor NullKeyword - * @extends {Node} - */ - -module.exports = Node["extends"](KIND, function NullKeyword(raw, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.raw = raw; -}); - -/***/ }), -/* 96 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Literal = __webpack_require__(3); - -var KIND = "number"; -/** - * Defines a numeric value - * @constructor Number - * @extends {Literal} - */ - -module.exports = Literal["extends"](KIND, function Number(value, raw, docs, location) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); - -/***/ }), -/* 97 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Lookup = __webpack_require__(8); - -var KIND = "offsetlookup"; -/** - * Lookup on an offset in an array - * @constructor OffsetLookup - * @extends {Lookup} - */ - -module.exports = Lookup["extends"](KIND, function OffsetLookup(what, offset, docs, location) { - Lookup.apply(this, [KIND, what, offset, docs, location]); -}); - -/***/ }), -/* 98 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Declaration = __webpack_require__(5); - -var KIND = "parameter"; -/** - * Defines a function parameter - * @constructor Parameter - * @extends {Declaration} - * @property {Identifier|null} type - * @property {Node|null} value - * @property {boolean} byref - * @property {boolean} variadic - * @property {boolean} nullable - */ - -module.exports = Declaration["extends"](KIND, function Parameter(name, type, value, isRef, isVariadic, nullable, docs, location) { - Declaration.apply(this, [KIND, name, docs, location]); - this.value = value; - this.type = type; - this.byref = isRef; - this.variadic = isVariadic; - this.nullable = nullable; -}); - -/***/ }), -/* 99 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Reference = __webpack_require__(6); - -var KIND = "parentreference"; -/** - * Defines a class reference node - * @constructor ParentReference - * @extends {Reference} - */ - -var ParentReference = Reference["extends"](KIND, function ParentReference(raw, docs, location) { - Reference.apply(this, [KIND, docs, location]); - this.raw = raw; -}); -module.exports = ParentReference; - -/***/ }), -/* 100 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Operation = __webpack_require__(4); - -var KIND = "post"; -/** - * Defines a post operation `$i++` or `$i--` - * @constructor Post - * @extends {Operation} - * @property {String} type - * @property {Variable} what - */ - -module.exports = Operation["extends"](KIND, function Post(type, what, docs, location) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.what = what; -}); - -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Operation = __webpack_require__(4); - -var KIND = "pre"; -/** - * Defines a pre operation `++$i` or `--$i` - * @constructor Pre - * @extends {Operation} - * @property {String} type - * @property {Variable} what - */ - -module.exports = Operation["extends"](KIND, function Pre(type, what, docs, location) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.what = what; -}); - -/***/ }), -/* 102 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "print"; -/** - * Outputs - * @constructor Print - * @extends {Expression} - */ - -module.exports = Expression["extends"](KIND, function Print(expression, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; -}); - -/***/ }), -/* 103 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Block = __webpack_require__(7); - -var KIND = "program"; -/** - * The main program node - * @constructor Program - * @extends {Block} - * @property {Error[]} errors - * @property {Doc[]?} comments - * @property {String[]?} tokens - */ - -module.exports = Block["extends"](KIND, function Program(children, errors, comments, tokens, docs, location) { - Block.apply(this, [KIND, children, docs, location]); - this.errors = errors; - - if (comments) { - this.comments = comments; - } - - if (tokens) { - this.tokens = tokens; - } -}); - -/***/ }), -/* 104 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "property"; -/** - * Defines a class property - * @constructor Property - * @extends {Statement} - * @property {string} name - * @property {Node|null} value - * @property {boolean} nullable - * @property {Identifier|Array|null} type - */ - -module.exports = Statement["extends"](KIND, function Property(name, value, nullable, type, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; - this.value = value; - this.nullable = nullable; - this.type = type; -}); - -/***/ }), -/* 105 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Lookup = __webpack_require__(8); - -var KIND = "propertylookup"; -/** - * Lookup to an object property - * @constructor PropertyLookup - * @extends {Lookup} - */ - -module.exports = Lookup["extends"](KIND, function PropertyLookup(what, offset, docs, location) { - Lookup.apply(this, [KIND, what, offset, docs, location]); -}); - -/***/ }), -/* 106 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "propertystatement"; -var IS_UNDEFINED = ""; -var IS_PUBLIC = "public"; -var IS_PROTECTED = "protected"; -var IS_PRIVATE = "private"; -/** - * Declares a properties into the current scope - * @constructor PropertyStatement - * @extends {Statement} - * @property {Property[]} properties - */ - -var PropertyStatement = Statement["extends"](KIND, function PropertyStatement(kind, properties, flags, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.properties = properties; - this.parseFlags(flags); -}); -/** - * Generic flags parser - * @param {Integer[]} flags - * @return {void} - */ - -PropertyStatement.prototype.parseFlags = function (flags) { - if (flags[0] === -1) { - this.visibility = IS_UNDEFINED; - } else if (flags[0] === null) { - this.visibility = null; - } else if (flags[0] === 0) { - this.visibility = IS_PUBLIC; - } else if (flags[0] === 1) { - this.visibility = IS_PROTECTED; - } else if (flags[0] === 2) { - this.visibility = IS_PRIVATE; - } - - this.isStatic = flags[1] === 1; -}; - -module.exports = PropertyStatement; - -/***/ }), -/* 107 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "retif"; -/** - * Defines a short if statement that returns a value - * @constructor RetIf - * @extends {Expression} - * @property {Expression} test - * @property {Expression} trueExpr - * @property {Expression} falseExpr - */ - -module.exports = Expression["extends"](KIND, function RetIf(test, trueExpr, falseExpr, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.test = test; - this.trueExpr = trueExpr; - this.falseExpr = falseExpr; -}); - -/***/ }), -/* 108 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "return"; -/** - * A continue statement - * @constructor Return - * @extends {Statement} - * @property {Expression|null} expr - */ - -module.exports = Statement["extends"](KIND, function Return(expr, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.expr = expr; -}); - -/***/ }), -/* 109 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Reference = __webpack_require__(6); - -var KIND = "selfreference"; -/** - * Defines a class reference node - * @constructor SelfReference - * @extends {Reference} - */ - -var SelfReference = Reference["extends"](KIND, function SelfReference(raw, docs, location) { - Reference.apply(this, [KIND, docs, location]); - this.raw = raw; -}); -module.exports = SelfReference; - -/***/ }), -/* 110 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "silent"; -/** - * Avoids to show/log warnings & notices from the inner expression - * @constructor Silent - * @extends {Expression} - * @property {Expression} expr - */ - -module.exports = Expression["extends"](KIND, function Silent(expr, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.expr = expr; -}); - -/***/ }), -/* 111 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "static"; -/** - * Declares a static variable into the current scope - * @constructor Static - * @extends {Statement} - * @property {StaticVariable[]} variables - */ - -module.exports = Statement["extends"](KIND, function Static(variables, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.variables = variables; -}); - -/***/ }), -/* 112 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "staticvariable"; -/** - * Defines a constant - * @constructor StaticVariable - * @extends {Node} - * @property {Variable} variable - * @property {Node|string|number|boolean|null} defaultValue - */ - -module.exports = Node["extends"](KIND, function StaticVariable(variable, defaultValue, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.variable = variable; - this.defaultValue = defaultValue; -}); - -/***/ }), -/* 113 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Lookup = __webpack_require__(8); - -var KIND = "staticlookup"; -/** - * Lookup to a static property - * @constructor StaticLookup - * @extends {Lookup} - */ - -module.exports = Lookup["extends"](KIND, function StaticLookup(what, offset, docs, location) { - Lookup.apply(this, [KIND, what, offset, docs, location]); -}); - -/***/ }), -/* 114 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Reference = __webpack_require__(6); - -var KIND = "staticreference"; -/** - * Defines a class reference node - * @constructor StaticReference - * @extends {Reference} - */ - -var StaticReference = Reference["extends"](KIND, function StaticReference(raw, docs, location) { - Reference.apply(this, [KIND, docs, location]); - this.raw = raw; -}); -module.exports = StaticReference; - -/***/ }), -/* 115 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Literal = __webpack_require__(3); - -var KIND = "string"; -/** - * Defines a string (simple ou double quoted) - chars are already escaped - * @constructor String - * @extends {Literal} - * @property {boolean} unicode - * @property {boolean} isDoubleQuote - * @see {Encapsed} - */ - -module.exports = Literal["extends"](KIND, function String(isDoubleQuote, value, unicode, raw, docs, location) { - Literal.apply(this, [KIND, value, raw, docs, location]); - this.unicode = unicode; - this.isDoubleQuote = isDoubleQuote; -}); - -/***/ }), -/* 116 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "switch"; -/** - * Defines a switch statement - * @constructor Switch - * @extends {Statement} - * @property {Expression} test - * @property {Block} body - * @property {boolean} shortForm - */ - -module.exports = Statement["extends"](KIND, function Switch(test, body, shortForm, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; - this.shortForm = shortForm; -}); - -/***/ }), -/* 117 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "throw"; -/** - * Defines a throw statement - * @constructor Throw - * @extends {Statement} - * @property {Expression} what - */ - -module.exports = Statement["extends"](KIND, function Throw(what, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.what = what; -}); - -/***/ }), -/* 118 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Declaration = __webpack_require__(5); - -var KIND = "trait"; -/** - * A trait definition - * @constructor Trait - * @extends {Declaration} - * @property {Declaration[]} body - */ - -module.exports = Declaration["extends"](KIND, function Trait(name, body, docs, location) { - Declaration.apply(this, [KIND, name, docs, location]); - this.body = body; -}); - -/***/ }), -/* 119 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "traitalias"; -var IS_UNDEFINED = ""; -var IS_PUBLIC = "public"; -var IS_PROTECTED = "protected"; -var IS_PRIVATE = "private"; -/** - * Defines a trait alias - * @constructor TraitAlias - * @extends {Node} - * @property {Identifier|null} trait - * @property {Identifier} method - * @property {Identifier|null} as - * @property {string|null} visibility - */ - -module.exports = Node["extends"](KIND, function TraitAlias(trait, method, as, flags, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.trait = trait; - this.method = method; - this.as = as; - this.visibility = IS_UNDEFINED; - - if (flags) { - if (flags[0] === 0) { - this.visibility = IS_PUBLIC; - } else if (flags[0] === 1) { - this.visibility = IS_PROTECTED; - } else if (flags[0] === 2) { - this.visibility = IS_PRIVATE; - } - } -}); - -/***/ }), -/* 120 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "traitprecedence"; -/** - * Defines a trait alias - * @constructor TraitPrecedence - * @extends {Node} - * @property {Identifier|null} trait - * @property {Identifier} method - * @property {Identifier[]} instead - */ - -module.exports = Node["extends"](KIND, function TraitPrecedence(trait, method, instead, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.trait = trait; - this.method = method; - this.instead = instead; -}); - -/***/ }), -/* 121 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Node = __webpack_require__(2); - -var KIND = "traituse"; -/** - * Defines a trait usage - * @constructor TraitUse - * @extends {Node} - * @property {Identifier[]} traits - * @property {Node[]|null} adaptations - */ - -module.exports = Node["extends"](KIND, function TraitUse(traits, adaptations, docs, location) { - Node.apply(this, [KIND, docs, location]); - this.traits = traits; - this.adaptations = adaptations; -}); - -/***/ }), -/* 122 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "try"; -/** - * Defines a try statement - * @constructor Try - * @extends {Statement} - * @property {Block} body - * @property {Catch[]} catches - * @property {Block} allways - */ - -module.exports = Statement["extends"](KIND, function Try(body, catches, always, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.body = body; - this.catches = catches; - this.always = always; -}); - -/***/ }), -/* 123 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Reference = __webpack_require__(6); - -var KIND = "typereference"; -/** - * Defines a class reference node - * @constructor TypeReference - * @extends {Reference} - * @property {string} name - */ - -var TypeReference = Reference["extends"](KIND, function TypeReference(name, raw, docs, location) { - Reference.apply(this, [KIND, docs, location]); - this.name = name; - this.raw = raw; -}); -TypeReference.types = ["int", "float", "string", "bool", "object", "array", "callable", "iterable", "void"]; -module.exports = TypeReference; - -/***/ }), -/* 124 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Operation = __webpack_require__(4); - -var KIND = "unary"; -/** - * Unary operations - * @constructor Unary - * @extends {Operation} - * @property {String} type - * @property {Expression} what - */ - -module.exports = Operation["extends"](KIND, function Unary(type, what, docs, location) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.what = what; -}); - -/***/ }), -/* 125 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "unset"; -/** - * Deletes references to a list of variables - * @constructor Unset - * @extends {Statement} - */ - -module.exports = Statement["extends"](KIND, function Unset(variables, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.variables = variables; -}); - -/***/ }), -/* 126 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "usegroup"; -/** - * Defines a use statement (with a list of use items) - * @constructor UseGroup - * @extends {Statement} - * @property {String|null} name - * @property {String|null} type - Possible value : function, const - * @property {UseItem[]} item - * @see {Namespace} - * @see http://php.net/manual/en/language.namespaces.importing.php - */ - -module.exports = Statement["extends"](KIND, function UseGroup(name, type, items, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; - this.type = type; - this.items = items; -}); - -/***/ }), -/* 127 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "useitem"; -/** - * Defines a use statement (from namespace) - * @constructor UseItem - * @extends {Statement} - * @property {String} name - * @property {String|null} type - Possible value : function, const - * @property {Identifier|null} alias - * @see {Namespace} - * @see http://php.net/manual/en/language.namespaces.importing.php - */ - -var UseItem = Statement["extends"](KIND, function UseItem(name, alias, type, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; - this.alias = alias; - this.type = type; -}); -/** - * Importing a constant - * @constant {String} TYPE_CONST - */ - -UseItem.TYPE_CONST = "const"; -/** - * Importing a function - * @constant {String} TYPE_FUNC - */ - -UseItem.TYPE_FUNCTION = "function"; -module.exports = UseItem; - -/***/ }), -/* 128 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "variable"; -/** - * Any expression node. Since the left-hand side of an assignment may - * be any expression in general, an expression can also be a pattern. - * @constructor Variable - * @extends {Expression} - * @example - * // PHP code : - * $foo - * // AST output - * { - * "kind": "variable", - * "name": "foo", - * "curly": false - * } - * @property {String|Node} name The variable name (can be a complex expression when the name is resolved dynamically) - * @property {boolean} curly Indicate if the name is defined between curlies, ex `${foo}` - */ - -module.exports = Expression["extends"](KIND, function Variable(name, curly, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.name = name; - this.curly = curly || false; -}); - -/***/ }), -/* 129 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "variadic"; -/** - * Introduce a list of items into the arguments of the call - * @constructor variadic - * @extends {Expression} - * @property {Array|Expression} what - * @see https://wiki.php.net/rfc/argument_unpacking - */ - -module.exports = Expression["extends"](KIND, function variadic(what, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; -}); - -/***/ }), -/* 130 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Statement = __webpack_require__(0); - -var KIND = "while"; -/** - * Defines a while statement - * @constructor While - * @extends {Statement} - * @property {Expression} test - * @property {Statement} body - * @property {boolean} shortForm - */ - -module.exports = Statement["extends"](KIND, function While(test, body, shortForm, docs, location) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; - this.shortForm = shortForm; -}); - -/***/ }), -/* 131 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "yield"; -/** - * Defines a yield generator statement - * @constructor Yield - * @extends {Expression} - * @property {Expression|Null} value - * @property {Expression|Null} key - * @see http://php.net/manual/en/language.generators.syntax.php - */ - -module.exports = Expression["extends"](KIND, function Yield(value, key, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.value = value; - this.key = key; -}); - -/***/ }), -/* 132 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * Copyright (C) 2018 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - - -var Expression = __webpack_require__(1); - -var KIND = "yieldfrom"; -/** - * Defines a yield from generator statement - * @constructor YieldFrom - * @extends {Expression} - * @property {Expression} value - * @see http://php.net/manual/en/language.generators.syntax.php - */ - -module.exports = Expression["extends"](KIND, function YieldFrom(value, docs, location) { - Expression.apply(this, [KIND, docs, location]); - this.value = value; -}); - -/***/ }) -/******/ ])["default"]; -}); \ No newline at end of file diff --git a/dist/php-parser.min.js b/dist/php-parser.min.js deleted file mode 100644 index 3b2af4431..000000000 --- a/dist/php-parser.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * - * Package: php-parser - * Parse PHP code from JS and returns its AST - * Build: 6af20f43d0d6855ac0e0 - 2020-4-24 - * Copyright (C) 2020 Glayzzle (BSD-3-Clause) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - * - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.PhpParser=e():t.PhpParser=e()}(window,function(){return(s={},n.m=i=[function(t,e,i){"use strict";var s=i(2),n="statement";t.exports=s.extends(n,function(t,e,i){s.apply(this,[t||n,e,i])})},function(t,e,i){"use strict";var s=i(2),n="expression";t.exports=s.extends(n,function(t,e,i){s.apply(this,[t||n,e,i])})},function(t,e,i){"use strict";function s(t,e,i){this.kind=t,e&&(this.leadingComments=e),i&&(this.loc=i)}s.prototype.setTrailingComments=function(t){this.trailingComments=t},s.prototype.destroy=function(t){if(!t)throw new Error("Node already initialized, you must swap with another node");return this.leadingComments&&(t.leadingComments?t.leadingComments=Array.concat(this.leadingComments,t.leadingComments):t.leadingComments=this.leadingComments),this.trailingComments&&(t.trailingComments?t.trailingComments=Array.concat(this.trailingComments,t.trailingComments):t.trailingComments=this.trailingComments),t},s.prototype.includeToken=function(t){return this.loc&&(this.loc.end&&(this.loc.end.line=t.lexer.yylloc.last_line,this.loc.end.column=t.lexer.yylloc.last_column,this.loc.end.offset=t.lexer.offset),t.ast.withSource&&(this.loc.source=t.lexer._input.substring(this.loc.start.offset,t.lexer.offset))),this},s.extends=function(t,e){return e.prototype=Object.create(this.prototype),e.extends=this.extends,(e.prototype.constructor=e).kind=t,e},t.exports=s},function(t,e,i){"use strict";var r=i(1),h="literal";t.exports=r.extends(h,function(t,e,i,s,n){r.apply(this,[t||h,s,n]),this.value=e,i&&(this.raw=i)})},function(t,e,i){"use strict";var s=i(1),n="operation";t.exports=s.extends(n,function(t,e,i){s.apply(this,[t||n,e,i])})},function(t,e,i){"use strict";var n=i(0),r="declaration",s=n.extends(r,function(t,e,i,s){n.apply(this,[t||r,i,s]),this.name=e});s.prototype.parseFlags=function(t){this.isAbstract=1===t[2],this.isFinal=2===t[2],"class"!==this.kind&&(-1===t[0]?this.visibility="":null===t[0]?this.visibility=null:0===t[0]?this.visibility="public":1===t[0]?this.visibility="protected":2===t[0]&&(this.visibility="private"),this.isStatic=1===t[1])},t.exports=s},function(t,e,i){"use strict";var s=i(2),n="reference",r=s.extends(n,function(t,e,i){s.apply(this,[t||n,e,i])});t.exports=r},function(t,e,i){"use strict";var n=i(0);t.exports=n.extends("block",function(t,e,i,s){n.apply(this,[t||"block",i,s]),this.children=e.filter(Boolean)})},function(t,e,i){"use strict";var r=i(1);t.exports=r.extends("lookup",function(t,e,i,s,n){r.apply(this,[t||"lookup",s,n]),this.what=e,this.offset=i})},function(t,e,i){"use strict";var n=i(2);t.exports=n.extends("comment",function(t,e,i,s){n.apply(this,[t,i,s]),this.value=e})},function(t,e,i){"use strict";var n=i(0),r="constantstatement";t.exports=n.extends(r,function(t,e,i,s){n.apply(this,[t||r,i,s]),this.constants=e})},function(t,e,i){"use strict";var o=i(5),a="function";t.exports=o.extends(a,function(t,e,i,s,n,r,h){o.apply(this,[a,t,r,h]),this.arguments=e,this.byref=i,this.type=s,this.nullable=n,this.body=null})},function(t,e,i){"use strict";function h(t){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var s=i(13),n=i(23),r=i(39),o=i(40);function a(t,e){for(var i=Object.keys(t),s=i.length;s--;){var n=i[s],r=t[n];null===r?delete e[n]:"function"==typeof r?e[n]=r.bind(e):Array.isArray(r)?e[n]=Array.isArray(e[n])?e[n].concat(r):r:"object"===h(r)?e[n]="object"===h(e[n])?a(r,e[n]):r:e[n]=r}return e}function _(t){if("function"==typeof this)return new this(t);if(this.tokens=r,this.lexer=new s(this),this.ast=new o,this.parser=new n(this.lexer,this.ast),t&&"object"===h(t)){if(t.parser&&(t.lexer||(t.lexer={}),t.parser.version)){if("string"==typeof t.parser.version){var e=t.parser.version.split(".");if(e=100*parseInt(e[0])+parseInt(e[1]),isNaN(e))throw new Error("Bad version number : "+t.parser.version);t.parser.version=e}else if("number"!=typeof t.parser.version)throw new Error("Expecting a number for version");if(t.parser.version<500||704=this.size,!this.all_tokens&&this.mode_eval?(this.conditionStack=["INITIAL"],this.begin("ST_IN_SCRIPTING")):(this.conditionStack=[],this.begin("INITIAL")),this.heredoc_label={label:"",length:0,indentation:0,indentation_uses_spaces:!1,finished:!1,first_encaps_node:!1,toString:function(){this.label}},this},n.prototype.input=function(){var t=this._input[this.offset];return t?(this.yytext+=t,this.offset++,"\r"===t&&"\n"===this._input[this.offset]&&(this.yytext+="\n",this.offset++),"\n"===t||"\r"===t?(this.yylloc.last_line=++this.yylineno,this.yyprevcol=this.yylloc.last_column,this.yylloc.last_column=0):this.yylloc.last_column++,t):""},n.prototype.unput=function(t){if(1===t)this.offset--,"\n"===this._input[this.offset]&&"\r"===this._input[this.offset-1]&&(this.offset--,t++),"\r"===this._input[this.offset]||"\n"===this._input[this.offset]?(this.yylloc.last_line--,this.yylineno--,this.yylloc.last_column=this.yyprevcol):this.yylloc.last_column--,this.yytext=this.yytext.substring(0,this.yytext.length-t);else if(0=this.size&&0===this.tokens.length&&(this.done=!0),this.debug){var e=t;e="number"==typeof e?this.engine.tokens.values[e]:'"'+e+'"';var i=new Error(e+"\tfrom "+this.yylloc.first_line+","+this.yylloc.first_column+"\t - to "+this.yylloc.last_line+","+this.yylloc.last_column+'\t"'+this.yytext+'"');console.error(i.stack)}return t},[i(14),i(15),i(16),i(18),i(19),i(20),i(21),i(22)].forEach(function(t){for(var e in t)n.prototype[e]=t[e]}),t.exports=n},function(t,e,i){"use strict";t.exports={T_COMMENT:function(){for(;this.offset"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT;if("%"===t&&this.aspTagMode&&">"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT}return this.tok.T_COMMENT},T_DOC_COMMENT:function(){var t=this.input(),e=this.tok.T_COMMENT;if("*"===t){if(t=this.input(),this.is_WHITESPACE()&&(e=this.tok.T_DOC_COMMENT),"/"===t)return e;this.unput(1)}for(;this.offset"===(t=this.input()))return this.tok.T_OBJECT_OPERATOR;t&&this.unput(1)}else{if(this.is_WHITESPACE())return this.tok.T_WHITESPACE;if(this.is_LABEL_START())return this.consume_LABEL(),this.popState(),this.tok.T_STRING}return this.popState(),t&&this.unput(1),!1},matchST_LOOKING_FOR_VARNAME:function(){var t=this.input();if(this.popState(),this.begin("ST_IN_SCRIPTING"),this.is_LABEL_START()){if(this.consume_LABEL(),"["===(t=this.input())||"}"===t)return this.unput(1),this.tok.T_STRING_VARNAME;this.unput(this.yytext.length)}else t&&this.unput(1);return!1},matchST_VAR_OFFSET:function(){var t=this.input();if(this.is_NUM_START())return this.consume_NUM(),this.tok.T_NUM_STRING;if("]"===t)return this.popState(),"]";if("$"===t){if(this.input(),this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_VARIABLE;throw new Error("Unexpected terminal")}if(this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_STRING;if(this.is_WHITESPACE()||"\\"===t||"'"===t||"#"===t)return this.tok.T_ENCAPSED_AND_WHITESPACE;if("["===t||"{"===t||"}"===t||'"'===t||"`"===t||this.is_TOKEN())return t;throw new Error("Unexpected terminal")}}},function(t,e,i){"use strict";t.exports={matchST_IN_SCRIPTING:function(){var t=this.input();switch(t){case" ":case"\t":case"\n":case"\r":case"\r\n":return this.T_WHITESPACE();case"#":return this.T_COMMENT();case"/":return"/"===this._input[this.offset]?this.T_COMMENT():"*"===this._input[this.offset]?(this.input(),this.T_DOC_COMMENT()):this.consume_TOKEN();case"'":return this.T_CONSTANT_ENCAPSED_STRING();case'"':return this.ST_DOUBLE_QUOTES();case"`":return this.begin("ST_BACKQUOTE"),"`";case"?":if(this.aspTagMode||!this.tryMatch(">"))return this.consume_TOKEN();this.input();var e=this._input[this.offset];return"\n"!==e&&"\r"!==e||this.input(),1"===this._input[this.offset]?(this.input(),"\n"!==(t=this._input[this.offset])&&"\r"!==t||this.input(),this.aspTagMode=!1,1this.offset-e+2?(this.appendToken(i,this.offset-e+2),this.unput(this.offset-e+2),this.tok.T_ENCAPSED_AND_WHITESPACE):i}}else if("{"===t){if("$"===(t=this.input()))return this.begin("ST_IN_SCRIPTING"),2"===this.input())return this.input(),this.is_LABEL_START()&&this.begin("ST_LOOKING_FOR_PROPERTY"),this.unput(3),this.tok.T_VARIABLE;this.unput(2)}else t&&this.unput(1);return this.tok.T_VARIABLE},matchST_BACKQUOTE:function(){var t=this.input();if("$"===t){if("{"===(t=this.input()))return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START())return this.consume_VARIABLE()}else if("{"===t){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if("`"===t)return this.popState(),"`";for(;this.offsetthis.offset-e+2?(this.appendToken(i,this.offset-e+2),this.unput(this.offset-e+2),this.tok.T_ENCAPSED_AND_WHITESPACE):i}continue}if("{"===t){if("$"===(t=this.input()))return this.begin("ST_IN_SCRIPTING"),2this.offset-e+2?(this.appendToken(i,this.offset-e+2),this.unput(this.offset-e+2),this.tok.T_ENCAPSED_AND_WHITESPACE):i}t&&this.unput(1)}else if("{"===t){if("$"===(t=this.input()))return this.begin("ST_IN_SCRIPTING"),2"===t?(this.begin("ST_LOOKING_FOR_PROPERTY").input(),this.tok.T_OBJECT_OPERATOR):"-"===t?(this.input(),this.tok.T_DEC):"="===t?(this.input(),this.tok.T_MINUS_EQUAL):"-"},"\\":function(){return this.tok.T_NS_SEPARATOR},"/":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_DIV_EQUAL):"/"},":":function(){return":"===this._input[this.offset]?(this.input(),this.tok.T_DOUBLE_COLON):":"},"(":function(){var t=this.offset;if(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),this.is_LABEL_START()){var e=this.yytext.length;this.consume_LABEL();var i=this.yytext.substring(e-1).toLowerCase(),s=this.castKeywords[i];if("number"==typeof s&&(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),")"===this._input[this.offset-1]))return s}return this.unput(this.offset-t),"("},"=":function(){var t=this._input[this.offset];return">"===t?(this.input(),this.tok.T_DOUBLE_ARROW):"="===t?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_IDENTICAL):(this.input(),this.tok.T_IS_EQUAL):"="},"+":function(){var t=this._input[this.offset];return"+"===t?(this.input(),this.tok.T_INC):"="===t?(this.input(),this.tok.T_PLUS_EQUAL):"+"},"!":function(){return"="===this._input[this.offset]?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_NOT_IDENTICAL):(this.input(),this.tok.T_IS_NOT_EQUAL):"!"},"?":function(){return 700<=this.version&&"?"===this._input[this.offset]?704<=this.version&&"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_COALESCE_EQUAL):(this.input(),this.tok.T_COALESCE):"?"},"<":function(){var t=this._input[this.offset];return"<"===t?"="===(t=this._input[this.offset+1])?(this.consume(2),this.tok.T_SL_EQUAL):"<"===t&&this.is_HEREDOC()?this.tok.T_START_HEREDOC:(this.input(),this.tok.T_SL):"="===t?(this.input(),700<=this.version&&">"===this._input[this.offset]?(this.input(),this.tok.T_SPACESHIP):this.tok.T_IS_SMALLER_OR_EQUAL):">"===t?(this.input(),this.tok.T_IS_NOT_EQUAL):"<"},">":function(){var t=this._input[this.offset];return"="===t?(this.input(),this.tok.T_IS_GREATER_OR_EQUAL):">"===t?"="===(t=this._input[this.offset+1])?(this.consume(2),this.tok.T_SR_EQUAL):(this.input(),this.tok.T_SR):">"},"*":function(){var t=this._input[this.offset];return"="===t?(this.input(),this.tok.T_MUL_EQUAL):"*"===t?(this.input(),"="===this._input[this.offset]?(this.input(),this.tok.T_POW_EQUAL):this.tok.T_POW):"*"},".":function(){var t=this._input[this.offset];return"="===t?(this.input(),this.tok.T_CONCAT_EQUAL):"."===t&&"."===this._input[this.offset+1]?(this.consume(2),this.tok.T_ELLIPSIS):"."},"%":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_MOD_EQUAL):"%"},"&":function(){var t=this._input[this.offset];return"="===t?(this.input(),this.tok.T_AND_EQUAL):"&"===t?(this.input(),this.tok.T_BOOLEAN_AND):"&"},"|":function(){var t=this._input[this.offset];return"="===t?(this.input(),this.tok.T_OR_EQUAL):"|"===t?(this.input(),this.tok.T_BOOLEAN_OR):"|"},"^":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_XOR_EQUAL):"^"}}}},function(t,e,i){"use strict";t.exports={is_NUM:function(){var t=this._input.charCodeAt(this.offset-1);return 47?@".indexOf(t)},is_WHITESPACE:function(){var t=this._input[this.offset-1];return" "===t||"\t"===t||"\n"===t||"\r"===t},is_TABSPACE:function(){var t=this._input[this.offset-1];return" "===t||"\t"===t},consume_TABSPACE:function(){for(;this.offsetthis._docIndex&&s.push(this.node("noop")()),this.prev=[this.lexer.yylloc.last_line,this.lexer.yylloc.last_column,this.lexer.offset];var n=i(s,this._errors,this._docs,this._tokens);if(this.debug){var r=this.ast.checkNodes();if(0e);i++);i>this._docIndex&&(this._lastNode.setTrailingComments(this._docs.slice(this._docIndex,i)),this._docIndex=i)}else this.token===this.EOF&&(t.setTrailingComments(this._docs.slice(this._docIndex)),this._docIndex=this._docs.length);this._lastNode=t}.bind(this),i}return this.ast.prepare(t,null,this)},s.prototype.expectEndOfStatement=function(t){if(";"===this.token)t&&";"===this.lexer.yytext&&t.includeToken(this);else if(this.token!==this.tok.T_INLINE_HTML&&this.token!==this.EOF)return this.error(";"),!1;return this.next(),!0};var h=["parser.next","parser.node","parser.showlog"];s.prototype.showlog=function(){for(var t,e=(new Error).stack.split("\n"),i=2;i"+this.lexer.yytext+"< @--\x3e"+t),this},s.prototype.expect=function(t){if(Array.isArray(t)){if(-1===t.indexOf(this.token))return this.error(t),!1}else if(this.token!=t)return this.error(t),!1;return!0},s.prototype.text=function(){return this.lexer.yytext},s.prototype.next=function(){if(";"===this.token&&";"!==this.lexer.yytext||(this.prev=[this.lexer.yylloc.last_line,this.lexer.yylloc.last_column,this.lexer.offset]),this.lex(),this.debug&&this.showlog(),this.extractDoc)for(;this.token===this.tok.T_COMMENT||this.token===this.tok.T_DOC_COMMENT;)this.token===this.tok.T_COMMENT?this._docs.push(this.read_comment()):this._docs.push(this.read_doc_comment());return this},s.prototype.lex=function(){if(this.extractTokens)do{if(this.token=this.lexer.lex()||this.EOF,this.token===this.EOF)return this;var t=this.lexer.yytext;if(t=this.lexer.engine.tokens.values.hasOwnProperty(this.token)?[this.lexer.engine.tokens.values[this.token],t,this.lexer.yylloc.first_line,this.lexer.yylloc.first_offset,this.lexer.offset]:[null,t,this.lexer.yylloc.first_line,this.lexer.yylloc.first_offset,this.lexer.offset],this._tokens.push(t),this.token===this.tok.T_CLOSE_TAG)return this.token=";",this;if(this.token===this.tok.T_OPEN_TAG_WITH_ECHO)return this.token=this.tok.T_ECHO,this}while(this.token===this.tok.T_WHITESPACE||!this.extractDoc&&(this.token===this.tok.T_COMMENT||this.token===this.tok.T_DOC_COMMENT)||this.token===this.tok.T_OPEN_TAG);else this.token=this.lexer.lex()||this.EOF;return this},s.prototype.is=function(t){return Array.isArray(t)?-1!==t.indexOf(this.token):this.entries[t].has(this.token)},[i(24),i(25),i(26),i(27),i(28),i(29),i(30),i(31),i(32),i(33),i(34),i(35),i(36),i(37),i(38)].forEach(function(t){for(var e in t){if(s.prototype.hasOwnProperty(e))throw new Error("Function "+e+" is already defined - collision");s.prototype[e]=t[e]}}),t.exports=s},function(t,e,i){"use strict";t.exports={read_array:function(){var t=null,e=!1,i=this.node("array");t=this.token===this.tok.T_ARRAY?(this.next().expect("("),")"):(e=!0,"]");var s=[];return this.next().token!==t&&(s=this.read_array_pair_list(e)),this.expect(t),this.next(),i(e,s)},read_array_pair_list:function(t){var e=this;return this.read_list(function(){return e.read_array_pair(t)},",",!0)},read_array_pair:function(t){if(!(!t&&")"===this.token||t&&"]"===this.token)){if(","===this.token)return this.node("noop")();var e=this.node("entry"),i=null,s=null,n=!1,r=!1;if("&"===this.token)this.next(),n=!0,s=this.read_variable(!0,!1);else if(this.token===this.tok.T_ELLIPSIS&&704<=this.version)this.next(),"&"===this.token&&this.error(),r=!0,s=this.read_expr();else{var h=this.read_expr();s=this.token===this.tok.T_DOUBLE_ARROW?(this.next(),i=h,"&"===this.token?(this.next(),n=!0,this.read_variable(!0,!1)):this.read_expr()):h}return e(i,s,n,r)}}}},function(t,e,i){"use strict";function h(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var i=[],s=!0,n=!1,r=void 0;try{for(var h,o=t[Symbol.iterator]();!(s=(h=o.next()).done)&&(i.push(h.value),!e||i.length!==e);s=!0);}catch(t){n=!0,r=t}finally{try{s||null==o.return||o.return()}finally{if(n)throw r}}return i}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return s(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);"Object"===i&&t.constructor&&(i=t.constructor.name);if("Map"===i||"Set"===i)return Array.from(i);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return s(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,s=new Array(e);i>",t,this.next().read_expr());if(this.token===this.tok.T_BOOLEAN_OR)return e("bin","||",t,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_OR)return e("bin","or",t,this.next().read_expr());if(this.token===this.tok.T_BOOLEAN_AND)return e("bin","&&",t,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_AND)return e("bin","and",t,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_XOR)return e("bin","xor",t,this.next().read_expr());if(this.token===this.tok.T_IS_IDENTICAL)return e("bin","===",t,this.next().read_expr());if(this.token===this.tok.T_IS_NOT_IDENTICAL)return e("bin","!==",t,this.next().read_expr());if(this.token===this.tok.T_IS_EQUAL)return e("bin","==",t,this.next().read_expr());if(this.token===this.tok.T_IS_NOT_EQUAL)return e("bin","!=",t,this.next().read_expr());if("<"===this.token)return e("bin","<",t,this.next().read_expr());if(">"===this.token)return e("bin",">",t,this.next().read_expr());if(this.token===this.tok.T_IS_SMALLER_OR_EQUAL)return e("bin","<=",t,this.next().read_expr());if(this.token===this.tok.T_IS_GREATER_OR_EQUAL)return e("bin",">=",t,this.next().read_expr());if(this.token===this.tok.T_SPACESHIP)return e("bin","<=>",t,this.next().read_expr());if(this.token===this.tok.T_INSTANCEOF&&(t=e("bin","instanceof",t,this.next().read_class_name_reference()),";"!==this.token&&this.token!==this.tok.T_INLINE_HTML&&this.token!==this.EOF&&(t=this.read_expr(t))),this.token===this.tok.T_COALESCE)return e("bin","??",t,this.next().read_expr());if("?"!==this.token)return e.destroy(t),t;var i=null;return":"!==this.next().token&&(i=this.read_expr()),this.expect(":")&&this.next(),e("retif",t,i,this.read_expr())},read_expr_cast:function(t){return this.node("cast")(t,this.text(),this.next().read_expr())},read_isset_variable:function(){return this.read_expr()},read_isset_variables:function(){return this.read_function_list(this.read_isset_variable,",")},read_internal_functions_in_yacc:function(){var t=null;switch(this.token){case this.tok.T_ISSET:t=this.node("isset"),this.next().expect("(")&&this.next();var e=this.read_isset_variables();this.expect(")")&&this.next(),t=t(e);break;case this.tok.T_EMPTY:t=this.node("empty"),this.next().expect("(")&&this.next();var i=this.read_expr();this.expect(")")&&this.next(),t=t(i);break;case this.tok.T_INCLUDE:t=this.node("include")(!1,!1,this.next().read_expr());break;case this.tok.T_INCLUDE_ONCE:t=this.node("include")(!0,!1,this.next().read_expr());break;case this.tok.T_EVAL:t=this.node("eval"),this.next().expect("(")&&this.next();var s=this.read_expr();this.expect(")")&&this.next(),t=t(s);break;case this.tok.T_REQUIRE:t=this.node("include")(!1,!0,this.next().read_expr());break;case this.tok.T_REQUIRE_ONCE:t=this.node("include")(!0,!0,this.next().read_expr())}return t},read_optional_expr:function(t){return this.token!==t?this.read_expr():null},read_exit_expr:function(){var t=null;return"("===this.token&&(this.next(),t=this.read_optional_expr(")"),this.expect(")")&&this.next()),t},read_expr_item:function(){var t,e;if("+"===this.token)return this.node("unary")("+",this.next().read_expr());if("-"===this.token)return this.node("unary")("-",this.next().read_expr());if("!"===this.token)return this.node("unary")("!",this.next().read_expr());if("~"===this.token)return this.node("unary")("~",this.next().read_expr());if("("===this.token)return(e=this.next().read_expr()).parenthesizedExpression=!0,this.expect(")")&&this.next(),this.handleDereferencable(e);if("`"===this.token)return this.read_encapsed_string("`");if(this.token===this.tok.T_LIST){var i=null,s=this.innerList;t=this.node("list"),s||(i=this.node("assign")),this.next().expect("(")&&this.next(),this.innerList||(this.innerList=!0);var n=this.read_array_pair_list(!1);this.expect(")")&&this.next();for(var r=!1,h=0;h>=");case this.tok.T_COALESCE_EQUAL:return u&&this.error("VARIABLE"),t("assign",e,this.next().read_expr(),"??=");case this.tok.T_INC:return u&&this.error("VARIABLE"),this.next(),t("post","+",e);case this.tok.T_DEC:return u&&this.error("VARIABLE"),this.next(),t("post","-",e);default:t.destroy(e)}}else{if(this.is("SCALAR")){if(t=this.node(),"array"===(e=this.read_scalar()).kind&&e.shortForm&&"="===this.token){var l=this.node("list")(e.items,!0);return e.loc&&(l.loc=e.loc),t("assign",l,this.next().read_expr(),"=")}return t.destroy(e),this.handleDereferencable(e)}this.error("EXPR"),this.next()}return e},read_assignref:function(t,e){return this.next(),t("assignref",e,this.token===this.tok.T_NEW?(700<=this.version&&this.error(),this.read_new_expr()):this.read_variable(!1,!1))},read_inline_function:function(t){if(this.token===this.tok.T_FUNCTION)return this.read_function(!0,t);704<=!this.version&&this.raiseError("Arrow Functions are not allowed");var e=this.node("arrowfunc");this.expect(this.tok.T_FN)&&this.next();var i=this.is_reference();this.expect("(")&&this.next();var s=this.read_parameter_list();this.expect(")")&&this.next();var n=!1,r=null;return":"===this.token&&("?"===this.next().token&&(n=!0,this.next()),r=this.read_type()),this.expect(this.tok.T_DOUBLE_ARROW)&&this.next(),e(s,i,this.read_expr(),r,n,!!t)},read_new_expr:function(){var t=this.node("new");this.expect(this.tok.T_NEW)&&this.next();var e=[];if(this.token===this.tok.T_CLASS){var i=this.node("class");"("===this.next().token&&(e=this.read_argument_list());var s=this.read_extends_from(),n=this.read_implements_list(),r=null;return this.expect("{")&&(r=this.next().read_class_body()),t(i(null,s,n,r,[0,0,0]),e)}var h=this.read_new_class_name();return"("===this.token&&(e=this.read_argument_list()),t(h,e)},read_new_class_name:function(){if(this.token===this.tok.T_NS_SEPARATOR||this.token===this.tok.T_STRING||this.token===this.tok.T_NAMESPACE){var t=this.read_namespace_name(!0);return this.token===this.tok.T_DOUBLE_COLON&&(t=this.read_static_getter(t)),t}if(this.is("VARIABLE"))return this.read_variable(!0,!1);this.expect([this.tok.T_STRING,"VARIABLE"])},handleDereferencable:function(t){for(;this.token!==this.EOF;)if(this.token===this.tok.T_OBJECT_OPERATOR||this.token===this.tok.T_DOUBLE_COLON)t=this.recursive_variable_chain_scan(t,!1,!1,!0);else if(this.token===this.tok.T_CURLY_OPEN||"["===this.token)t=this.read_dereferencable(t);else{if("("!==this.token)return t;t=this.node("call")(t,this.read_argument_list())}return t}}},function(t,e,i){"use strict";t.exports={is_reference:function(){return"&"==this.token&&(this.next(),!0)},is_variadic:function(){return this.token===this.tok.T_ELLIPSIS&&(this.next(),!0)},read_function:function(t,e){var i=this.read_function_declaration(t?1:e?2:0,e&&1===e[1]);return e&&1==e[2]?(i.parseFlags(e),this.expect(";")&&this.next()):(this.expect("{")&&(i.body=this.read_code_block(!1),i.loc&&i.body.loc&&(i.loc.end=i.body.loc.end)),!t&&e&&i.parseFlags(e)),i},read_function_declaration:function(t,e){var i="function";1===t?i="closure":2===t&&(i="method");var s=this.node(i);this.expect(this.tok.T_FUNCTION)&&this.next();var n=this.is_reference(),r=!1,h=[],o=null,a=!1;if(1!==t){var _=this.node("identifier");2===t?700<=this.version?this.token===this.tok.T_STRING||this.is("IDENTIFIER")?(r=this.text(),this.next()):this.version<704&&this.error("IDENTIFIER"):this.token===this.tok.T_STRING?(r=this.text(),this.next()):this.error("IDENTIFIER"):700<=this.version?this.token===this.tok.T_STRING?(r=this.text(),this.next()):704<=this.version?this.expect("(")||this.next():(this.error(this.tok.T_STRING),this.next()):(this.expect(this.tok.T_STRING)&&(r=this.text()),this.next()),r=_(r)}this.expect("(")&&this.next();var c=this.read_parameter_list();return this.expect(")")&&this.next(),1===t&&(h=this.read_lexical_vars()),":"===this.token&&("?"===this.next().token&&(a=!0,this.next()),o=this.read_type()),1===t?s(c,n,h,o,a,e):s(r,c,n,o,a)},read_lexical_vars:function(){var t=[];return this.token===this.tok.T_USE&&(this.next(),this.expect("(")&&this.next(),t=this.read_lexical_var_list(),this.expect(")")&&this.next()),t},read_lexical_var_list:function(){return this.read_list(this.read_lexical_var,",")},read_lexical_var:function(){if("&"===this.token)return this.read_byref(this.read_lexical_var.bind(this));var t=this.node("variable");this.expect(this.tok.T_VARIABLE);var e=this.text().substring(1);return this.next(),t(e,!1)},read_parameter_list:function(){var t=[];if(")"!=this.token)for(;this.token!=this.EOF;){if(t.push(this.read_parameter()),","!=this.token){if(")"==this.token)break;this.error([",",")"]);break}this.next()}return t},read_parameter:function(){var t,e=this.node("parameter"),i=null,s=null,n=!1;"?"===this.token&&(this.next(),n=!0),t=this.read_type(),n&&!t&&this.raiseError("Expecting a type definition combined with nullable operator");var r=this.is_reference(),h=this.is_variadic();if(this.expect(this.tok.T_VARIABLE)){i=this.node("identifier");var o=this.text().substring(1);this.next(),i=i(o)}return"="==this.token&&(s=this.next().read_expr()),e(i,t,s,r,h,n)},read_argument_list:function(){var t=[];return this.expect("(")&&this.next(),")"!==this.token&&(t=this.read_non_empty_argument_list()),this.expect(")")&&this.next(),t},read_non_empty_argument_list:function(){var e=!1;return this.read_function_list(function(){var t=this.read_argument();return t&&(e&&this.raiseError("Unexpected argument after a variadic argument"),"variadic"===t.kind&&(e=!0)),t}.bind(this),",")},read_argument:function(){return this.token===this.tok.T_ELLIPSIS?this.node("variadic")(this.next().read_expr()):this.read_expr()},read_type:function(){var t=this.node();if(this.token===this.tok.T_ARRAY||this.token===this.tok.T_CALLABLE){var e=this.text();return this.next(),t("typereference",e.toLowerCase(),e)}if(this.token!==this.tok.T_STRING)return this.token===this.tok.T_NAMESPACE||this.token===this.tok.T_NS_SEPARATOR?(t.destroy(),this.read_namespace_name()):(t.destroy(),null);var i=this.text(),s=[this.token,this.lexer.getState()];return this.next(),this.token!==this.tok.T_NS_SEPARATOR&&-1this._docIndex&&t.push(this.node("noop")()),i(e.name,t,!0)):"("===this.token?(e.resolution=this.ast.reference.RELATIVE_NAME,e.name=e.name.substring(1),i.destroy(),this.node("call")(e,this.read_argument_list())):(this.error(["{",";"]),this.currentNamespace=e,t=this.read_top_statements(),this.expect(this.EOF),i(e,t,!1))},read_namespace_name:function(t){var e=this.node(),i=!1;this.token===this.tok.T_NAMESPACE&&(this.next().expect(this.tok.T_NS_SEPARATOR)&&this.next(),i=!0);var s=this.read_list(this.tok.T_STRING,this.tok.T_NS_SEPARATOR,!0);if(!i&&1===s.length&&(t||"("!==this.token)){if("parent"===s[0].toLowerCase())return e("parentreference",s[0]);if("self"===s[0].toLowerCase())return e("selfreference",s[0])}return e("name",s,i)},read_use_statement:function(){var t=this.node("usegroup"),e=[],i=null;this.expect(this.tok.T_USE)&&this.next();var s=this.read_use_type();return e.push(this.read_use_declaration(!1)),","===this.token?e=e.concat(this.next().read_use_declarations(!1)):"{"===this.token&&(i=e[0].name,e=this.next().read_use_declarations(null===s),this.expect("}")&&this.next()),t=t(i,s,e),this.expect(";")&&this.next(),t},read_class_name_reference:function(){return this.read_variable(!0,!1)},read_use_declaration:function(t){var e=this.node("useitem"),i=null;t&&(i=this.read_use_type());var s=this.read_namespace_name(),n=this.read_use_alias();return e(s.name,n,i)},read_use_declarations:function(t){for(var e=[this.read_use_declaration(t)];","===this.token;){if(this.next(),t){if(this.token!==this.tok.T_FUNCTION&&this.token!==this.tok.T_CONST&&this.token!==this.tok.T_STRING)break}else if(this.token!==this.tok.T_STRING&&this.token!==this.tok.T_NS_SEPARATOR)break;e.push(this.read_use_declaration(t))}return e},read_use_alias:function(){var t=null;if(this.token===this.tok.T_AS&&this.next().expect(this.tok.T_STRING)){var e=this.node("identifier"),i=this.text();this.next(),t=e(i)}return t},read_use_type:function(){return this.token===this.tok.T_FUNCTION?(this.next(),this.ast.useitem.TYPE_FUNCTION):this.token===this.tok.T_CONST?(this.next(),this.ast.useitem.TYPE_CONST):null}}},function(t,e,i){"use strict";var s={"\\":"\\",$:"$",n:"\n",r:"\r",t:"\t",f:String.fromCharCode(12),v:String.fromCharCode(11),e:String.fromCharCode(27)};t.exports={resolve_special_chars:function(t,e){return e?t.replace(/\\"/,'"').replace(/\\([\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}|u{([0-9a-fA-F]+)})/g,function(t,e,i){return s[e]?s[e]:"x"===e[0]||"X"===e[0]?String.fromCodePoint(parseInt(e.substr(1),16)):"u"===e[0]?String.fromCodePoint(parseInt(i,16)):String.fromCodePoint(parseInt(e,8))}):t.replace(/\\\\/g,"\\").replace(/\\'/g,"'")},remove_heredoc_leading_whitespace_chars:function(t,e,i,s){if(0===e)return t;this.check_heredoc_indentation_level(t,e,i,s);var n=i?" ":"\t",r=new RegExp("\\n".concat(n,"{").concat(e,"}"),"g"),h=new RegExp("^".concat(n,"{").concat(e,"}"));return s&&(t=t.replace(h,"")),t.replace(r,"\n")},check_heredoc_indentation_level:function(t,e,i,s){var n=t.length,r=0,h=0,o=!0,a=i?" ":"\t",_=!1;if(!s){if(-1===(r=t.indexOf("\n")))return;r++}for(;rthis._docIndex&&N.push(this.node("noop")()),this.expect(this.tok.T_ENDDECLARE)&&this.next(),this.expectEndOfStatement(),A=this.ast.declare.MODE_SHORT}else if("{"===this.token){for(this.next();this.token!=this.EOF&&"}"!==this.token;)N.push(this.read_top_statement());0===N.length&&this.extractDoc&&this._docs.length>this._docIndex&&N.push(this.node("noop")()),this.expect("}")&&this.next(),A=this.ast.declare.MODE_BLOCK}else this.expect(";")&&this.next(),A=this.ast.declare.MODE_NONE;return y(S,N,A);case this.tok.T_TRY:return this.read_try();case this.tok.T_THROW:var C=this.node("throw"),v=this.next().read_expr();return this.expectEndOfStatement(),C(v);case";":return this.next(),null;case this.tok.T_STRING:var L=this.node(),I=[this.token,this.lexer.getState()],O=this.text(),R=this.node("identifier");if(":"===this.next().token)return R=R(O),this.next(),L("label",R);R.destroy(),L.destroy(),this.lexer.tokens.push(I);var m=this.node("expressionstatement"),b=this.next().read_expr();return this.expectEndOfStatement(b),m(b);case this.tok.T_GOTO:var g=this.node("goto"),D=null;if(this.next().expect(this.tok.T_STRING)){D=this.node("identifier");var U=this.text();this.next(),D=D(U),this.expectEndOfStatement()}return g(D);default:var P=this.node("expressionstatement"),B=this.read_expr();return this.expectEndOfStatement(B),P(B)}},read_code_block:function(t){var e=this.node("block");this.expect("{")&&this.next();var i=t?this.read_top_statements():this.read_inner_statements();return 0===i.length&&this.extractDoc&&this._docs.length>this._docIndex&&i.push(this.node("noop")()),this.expect("}")&&this.next(),e(null,i)}}},function(t,e,i){"use strict";t.exports={read_switch:function(){var t=this.node("switch");this.expect(this.tok.T_SWITCH)&&this.next(),this.expect("(")&&this.next();var e=this.read_expr();this.expect(")")&&this.next();var i=":"===this.token;return t(e,this.read_switch_case_list(),i)},read_switch_case_list:function(){var t=null,e=this.node("block"),i=[];for("{"===this.token?t="}":":"===this.token?t=this.tok.T_ENDSWITCH:this.expect(["{",":"]),this.next(),";"===this.token&&this.next();this.token!==this.EOF&&this.token!==t;)i.push(this.read_case_list(t));return 0===i.length&&this.extractDoc&&this._docs.length>this._docIndex&&i.push(this.node("noop")()),this.expect(t)&&this.next(),t===this.tok.T_ENDSWITCH&&this.expectEndOfStatement(),e(null,i)},read_case_list:function(t){var e=this.node("case"),i=null;this.token===this.tok.T_CASE?i=this.next().read_expr():this.token===this.tok.T_DEFAULT?this.next():this.expect([this.tok.T_CASE,this.tok.T_DEFAULT]),this.expect([":",";"])&&this.next();for(var s=this.node("block"),n=[];this.token!==this.EOF&&this.token!==t&&this.token!==this.tok.T_CASE&&this.token!==this.tok.T_DEFAULT;)n.push(this.read_inner_statement());return e(i,s(null,n))}}},function(t,e,i){"use strict";t.exports={read_try:function(){this.expect(this.tok.T_TRY);for(var t=this.node("try"),e=null,i=[],s=this.next().read_statement();this.token===this.tok.T_CATCH;){var n=this.node("catch");this.next().expect("(")&&this.next();var r=this.read_list(this.read_namespace_name,"|",!1),h=this.read_variable(!0,!1);this.expect(")"),i.push(n(this.next().read_statement(),r,h))}return this.token===this.tok.T_FINALLY&&(e=this.next().read_statement()),t(s,i,e)}}},function(t,e,i){"use strict";t.exports={read_short_form:function(t){var e=this.node("block"),i=[];for(this.expect(":")&&this.next();this.token!=this.EOF&&this.token!==t;)i.push(this.read_inner_statement());return 0===i.length&&this.extractDoc&&this._docs.length>this._docIndex&&i.push(this.node("noop")()),this.expect(t)&&this.next(),this.expectEndOfStatement(),e(null,i)},read_function_list:function(t,e){var i=[];do{if(this.token==e&&703<=this.version&&0"],["<","<=",">",">="],["<<",">>"],["+","-","."],["*","/","%"],["!"],["instanceof"],["cast","silent"],["**"]].forEach(function(t,e){t.forEach(function(t){u.precedence[t]=e+1})}),u.prototype.isRightAssociative=function(t){return"**"===t||"??"===t},u.prototype.swapLocations=function(t,e,i,s){this.withPositions&&(t.loc.start=e.loc.start,t.loc.end=i.loc.end,this.withSource&&(t.loc.source=s.lexer._input.substring(t.loc.start.offset,t.loc.end.offset)))},u.prototype.resolveLocations=function(t,e,i,s){this.withPositions&&(t.loc.start.offset>e.loc.start.offset&&(t.loc.start=e.loc.start),t.loc.end.offsetProperties: - allways + always @@ -800,4 +800,4 @@
Parameters:
- \ No newline at end of file + diff --git a/docs/ast.js.html b/docs/ast.js.html index 2b7304332..b207724c2 100644 --- a/docs/ast.js.html +++ b/docs/ast.js.html @@ -379,7 +379,7 @@

} else if (result.kind === "unary") { // https://github.com/glayzzle/php-parser/issues/75 if (result.what && !result.what.parenthesizedExpression) { - // unary precedence is allways lower + // unary precedence is always lower if (result.what.kind === "bin") { buffer = result.what; result.what = result.what.left; @@ -478,7 +478,7 @@

} else { location = new Location(src, null, null); } - // last argument is allways the location + // last argument is always the location args.push(location); } // handle lazy kind definitions diff --git a/docs/ast_try.js.html b/docs/ast_try.js.html index d8332e804..42537f483 100644 --- a/docs/ast_try.js.html +++ b/docs/ast_try.js.html @@ -120,7 +120,7 @@

* @extends {Statement} * @property {Block} body * @property {Catch[]} catches - * @property {Block} allways + * @property {Block} always */ module.exports = Statement.extends(KIND, function Try( body, diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..898d304ee --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,38 @@ +import js from "@eslint/js"; +import jest from "eslint-plugin-jest"; +import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; +import globals from "globals"; + +export default [ + { + ignores: ["dist", "docs", "example", "tutorials"], + }, + js.configs.recommended, + { + files: ["test/**"], + ...jest.configs["flat/recommended"], + rules: { + ...jest.configs["flat/recommended"].rules, + "no-console": "off", + }, + languageOptions: { + globals: jest.environments.globals.globals, + }, + }, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + }, + sourceType: "commonjs", + }, + + rules: { + "prefer-const": "error", + "no-var": "error", + curly: ["error", "multi-line"], + }, + }, + eslintPluginPrettierRecommended, +]; diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index b14669b6e..000000000 --- a/index.d.ts +++ /dev/null @@ -1,365 +0,0 @@ -/*! - * Copyright (C) 2017 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -declare module "php-parser" { - /** - * Token items - */ - const enum TokenEnum { - T_HALT_COMPILER = 101, - T_USE = 102, - T_ENCAPSED_AND_WHITESPACE = 103, - T_OBJECT_OPERATOR = 104, - T_STRING = 105, - T_DOLLAR_OPEN_CURLY_BRACES = 106, - T_STRING_VARNAME = 107, - T_CURLY_OPEN = 108, - T_NUM_STRING = 109, - T_ISSET = 110, - T_EMPTY = 111, - T_INCLUDE = 112, - T_INCLUDE_ONCE = 113, - T_EVAL = 114, - T_REQUIRE = 115, - T_REQUIRE_ONCE = 116, - T_NAMESPACE = 117, - T_NS_SEPARATOR = 118, - T_AS = 119, - T_IF = 120, - T_ENDIF = 121, - T_WHILE = 122, - T_DO = 123, - T_FOR = 124, - T_SWITCH = 125, - T_BREAK = 126, - T_CONTINUE = 127, - T_RETURN = 128, - T_GLOBAL = 129, - T_STATIC = 130, - T_ECHO = 131, - T_INLINE_HTML = 132, - T_UNSET = 133, - T_FOREACH = 134, - T_DECLARE = 135, - T_TRY = 136, - T_THROW = 137, - T_GOTO = 138, - T_FINALLY = 139, - T_CATCH = 140, - T_ENDDECLARE = 141, - T_LIST = 142, - T_CLONE = 143, - T_PLUS_EQUAL = 144, - T_MINUS_EQUAL = 145, - T_MUL_EQUAL = 146, - T_DIV_EQUAL = 147, - T_CONCAT_EQUAL = 148, - T_MOD_EQUAL = 149, - T_AND_EQUAL = 150, - T_OR_EQUAL = 151, - T_XOR_EQUAL = 152, - T_SL_EQUAL = 153, - T_SR_EQUAL = 154, - T_INC = 155, - T_DEC = 156, - T_BOOLEAN_OR = 157, - T_BOOLEAN_AND = 158, - T_LOGICAL_OR = 159, - T_LOGICAL_AND = 160, - T_LOGICAL_XOR = 161, - T_SL = 162, - T_SR = 163, - T_IS_IDENTICAL = 164, - T_IS_NOT_IDENTICAL = 165, - T_IS_EQUAL = 166, - T_IS_NOT_EQUAL = 167, - T_IS_SMALLER_OR_EQUAL = 168, - T_IS_GREATER_OR_EQUAL = 169, - T_INSTANCEOF = 170, - T_INT_CAST = 171, - T_DOUBLE_CAST = 172, - T_STRING_CAST = 173, - T_ARRAY_CAST = 174, - T_OBJECT_CAST = 175, - T_BOOL_CAST = 176, - T_UNSET_CAST = 177, - T_EXIT = 178, - T_PRINT = 179, - T_YIELD = 180, - T_YIELD_FROM = 181, - T_FUNCTION = 182, - T_DOUBLE_ARROW = 183, - T_DOUBLE_COLON = 184, - T_ARRAY = 185, - T_CALLABLE = 186, - T_CLASS = 187, - T_ABSTRACT = 188, - T_TRAIT = 189, - T_FINAL = 190, - T_EXTENDS = 191, - T_INTERFACE = 192, - T_IMPLEMENTS = 193, - T_VAR = 194, - T_PUBLIC = 195, - T_PROTECTED = 196, - T_PRIVATE = 197, - T_CONST = 198, - T_NEW = 199, - T_INSTEADOF = 200, - T_ELSEIF = 201, - T_ELSE = 202, - T_ENDSWITCH = 203, - T_CASE = 204, - T_DEFAULT = 205, - T_ENDFOR = 206, - T_ENDFOREACH = 207, - T_ENDWHILE = 208, - T_CONSTANT_ENCAPSED_STRING = 209, - T_LNUMBER = 210, - T_DNUMBER = 211, - T_LINE = 212, - T_FILE = 213, - T_DIR = 214, - T_TRAIT_C = 215, - T_METHOD_C = 216, - T_FUNC_C = 217, - T_NS_C = 218, - T_START_HEREDOC = 219, - T_END_HEREDOC = 220, - T_CLASS_C = 221, - T_VARIABLE = 222, - T_OPEN_TAG = 223, - T_OPEN_TAG_WITH_ECHO = 224, - T_CLOSE_TAG = 225, - T_WHITESPACE = 226, - T_COMMENT = 227, - T_DOC_COMMENT = 228, - T_ELLIPSIS = 229, - T_COALESCE = 230, - T_POW = 231, - T_POW_EQUAL = 232, - T_SPACESHIP = 233, - T_COALESCE_EQUAL = 234 - } - - /** - * The tokens dictionnary - */ - interface TokenDefinition { - /** List of token names as texts */ - values: String[], - /** Define tokens */ - names: TokenEnum[] - } - - /** - * The token structure - */ - interface Token extends Array { - // token name - 0: String; - // the token value - 1: TokenEnum; - // the current line - 2: Number - } - - /** - * Each Position object consists of a line number (1-indexed) and a column number (0-indexed): - */ - interface Position { - line: Number; - column: Number; - offset: Number; - } - - /** - * Defines the location of the node (with it's source contents as string) - */ - interface Location { - source: string; - start: Position; - end: Position; - } - - /** - * - */ - interface Node { - kind: String; - loc: Location; - } - - /** - * Error node - */ - interface ParserError extends Node { - message: String; - token: Token; - line: Number; - expected: any; - } - - /** - * A block statement, i.e., a sequence of statements surrounded by braces. - */ - interface Block extends Node { - children: Node[]; - } - - /** - * The main root node - */ - interface Program extends Block { - errors: ParserError[]; - } - - interface Parser { - lexer: Lexer; - ast: AST; - token: TokenEnum; - prev: TokenEnum; - debug: Boolean; - extractDoc: Boolean; - suppressErrors: Boolean; - getTokenName(token:TokenEnum): String; - parse(code: String, filename: String): Program; - raiseError(message: String, msgExpect: String, expect: any, token: TokenEnum): ParserError; - error(expect: String): ParserError; - node(kind:String): Node; - expectEndOfStatement(): Boolean; - showlog(): Parser; - expect(token:TokenEnum): Boolean; - expect(tokens:TokenEnum[]): Boolean; - text(): String; - next(): Parser; - ignoreComments(): Parser; - nextWithComments(): Parser; - is(type: String): Boolean; - // @todo other parsing functions ... - } - - interface KeywordsDictionnary { - [index: string]: TokenEnum - } - - interface yylloc { - first_offset: Number; - first_line: Number; - first_column: Number; - last_line: Number; - last_column: Number; - } - - interface LexerState { - yytext: String; - offset: Number; - yylineno: Number; - yyprevcol: Number; - yylloc: yylloc; - } - - interface Lexer { - debug: Boolean; - all_tokens: Boolean; - comment_tokens: Boolean; - mode_eval: Boolean; - asp_tags: Boolean; - short_tags: Boolean; - keywords: KeywordsDictionnary; - castKeywords: KeywordsDictionnary; - setInput(input:String): Lexer; - input(size:Number): String; - unput(size:Number): Lexer; - tryMatch(match:String): Boolean; - tryMatchCaseless(match:String): Boolean; - ahead(size:Number): String; - consume(size:Number): Lexer; - getState(): LexerState; - setState(state:LexerState): Lexer; - appendToken(value:TokenEnum, ahead:Number): Lexer; - lex(): TokenEnum; - begin(state:String): Lexer; - popState(): String; - next(): TokenEnum; - // @todo other lexer functions ... - } - - - interface AST { - /** - * - */ - withPositions: Boolean; - /** - * Option, if true extracts original source code attached to the node (by default false) - */ - withSource: Boolean; - /** - * Constructor - */ - constructor(withPositions:Boolean, withSource:Boolean): AST; - constructor(withPositions:Boolean): AST; - constructor(): AST; - /** - * Create a position node from specified parser - * including it's lexer current state - */ - position(parser:Parser): Position; - /** - * Prepares an AST node - */ - prepare(kind:String, parser:Parser): Function; - } - - /** - * List of options / extensions - */ - interface Options { - ast?: { - withPositions?: Boolean; - withSource?: Boolean; - }; - lexer?: { - debug?: Boolean; - all_tokens?: Boolean; - comment_tokens?: Boolean; - mode_eval?: Boolean; - asp_tags?: Boolean; - short_tags?: Boolean; - }; - parser?: { - debug?: Boolean; - extractDoc?: Boolean; - suppressErrors?: Boolean; - }; - } - - /** - * Initialise a new parser instance with the specified options - */ - export default class Engine { - // ----- STATIC HELPERS - static create(options?: Options) : Engine; - static parseEval(buffer: String, options: Options) : Program; - static parseEval(buffer: String) : Program; - static parseCode(buffer: String, filename: String, options: Options) : Program; - static parseCode(buffer: String, options: Options) : Program; - static parseCode(buffer: String) : Program; - static tokenGetAll(buffer: String, options: Options) : Token[]; - static tokenGetAll(buffer: String) : Token[]; - // ----- INSTANCE FUNCTIONS - ast: AST; - lexer: Lexer; - parser: Parser; - tokens: TokenDefinition; - constructor(options?: Options); - parseEval(buffer: String) : Program; - parseCode(buffer: String, filename: String) : Program; - parseCode(buffer: String) : Program; - tokenGetAll(buffer: String) : Token[]; - } -} diff --git a/jest.config.js b/jest.config.js index ceaececbf..e8c233467 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,6 +5,14 @@ const ENABLE_COVERAGE = !!process.env.CI || !!process.env.COVERAGE; module.exports = { collectCoverage: ENABLE_COVERAGE, coverageDirectory: "coverage/", + coverageThreshold: { + global: { + statements: 96.4, + branches: 90.1, + functions: 99.4, + lines: 96.9, + }, + }, projects: [ { displayName: "test", diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4037aa3ed..000000000 --- a/package-lock.json +++ /dev/null @@ -1,12372 +0,0 @@ -{ - "name": "php-parser", - "version": "3.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha1-BuKrGb21NThVWaq7W6WXKUgoAPg=", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/compat-data": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz", - "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==", - "dev": true, - "requires": { - "browserslist": "^4.11.1", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "@babel/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true - }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", - "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", - "dev": true, - "requires": { - "@babel/types": "^7.9.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", - "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", - "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz", - "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.9.6", - "browserslist": "^4.11.1", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", - "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", - "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/types": "^7.8.3", - "lodash": "^4.17.13" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", - "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", - "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", - "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", - "dev": true, - "requires": { - "lodash": "^4.17.13" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", - "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-wrap-function": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-replace-supers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", - "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true - }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.3.tgz", - "integrity": "sha512-E6SpIDJZ0cZAKoCNk+qSDd0ChfTnpiJN9FfNf3RZ20dzwA2vL2oq5IX1XTVT+4vDmRlta2nGk5HGMMskJAR+4A==", - "dev": true - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", - "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", - "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helpers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", - "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true - }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ=", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", - "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", - "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", - "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", - "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.9.5" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", - "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", - "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.8", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz", - "integrity": "sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz", - "integrity": "sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", - "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", - "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", - "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", - "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", - "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", - "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "lodash": "^4.17.13" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", - "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-split-export-declaration": "^7.8.3", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", - "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", - "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", - "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", - "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", - "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", - "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", - "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", - "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", - "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", - "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", - "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", - "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", - "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", - "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", - "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", - "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", - "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", - "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", - "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", - "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", - "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", - "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-regex": "^7.8.3" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", - "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", - "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", - "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/preset-env": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz", - "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.9.6", - "@babel/helper-compilation-targets": "^7.9.6", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.5", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.9.5", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.6", - "@babel/plugin-transform-modules-commonjs": "^7.9.6", - "@babel/plugin-transform-modules-systemjs": "^7.9.6", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.9.5", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.6", - "browserslist": "^4.11.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, - "@babel/traverse": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", - "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", - "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true - }, - "@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", - "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/reporters": "^25.5.1", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^25.5.0", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-resolve-dependencies": "^25.5.4", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "jest-watcher": "^25.5.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "realpath-native": "^2.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - } - }, - "@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - } - }, - "@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, - "requires": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - } - }, - "@jest/reporters": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", - "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^25.5.1", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "node-notifier": "^6.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^3.1.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", - "dev": true, - "requires": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@sinonjs/commons": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz", - "integrity": "sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@types/babel__core": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", - "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", - "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", - "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", - "dev": true - }, - "@types/node": { - "version": "13.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", - "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz", - "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@typescript-eslint/experimental-utils": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.33.0.tgz", - "integrity": "sha512-qzPM2AuxtMrRq78LwyZa8Qn6gcY8obkIrBs1ehqmQADwkYzTE1Pb4y2W+U3rE/iFkSWcWHG2LS6MJfj6SmHApg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.33.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - } - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.33.0.tgz", - "integrity": "sha512-d8rY6/yUxb0+mEwTShCQF2zYQdLlqihukNfG9IUlLYz5y1CH6G/9XYbrxQLq3Z14RNvkCC6oe+OcFlyUpwUbkg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", - "dev": true - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "ajv": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz", - "integrity": "sha1-SSetuD5/SOWjK0Vyl0THHsOcnHs=", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha1-S4Mee1MUFafMUYzUBOc/YZPGNJ0=", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=", - "dev": true - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=", - "dev": true - }, - "babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, - "requires": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", - "dev": true, - "requires": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz", - "integrity": "sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha1-+361abcq16RYEvk/2UMKPkELPdM=", - "dev": true - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha1-AylVJ9WL081Kp1Nj81sujZe+L0I=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001048", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", - "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "catharsis": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", - "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ=", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "coveralls": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", - "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - }, - "dependencies": { - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-jest-runner": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/create-jest-runner/-/create-jest-runner-0.5.3.tgz", - "integrity": "sha512-a9VY2doMBmzRollJB3Ft3/Y5fBceSWJ4gdyVsg4/d7nP1S4715VG939s2VnITDj79YBmRgKhjGjNRv1c+Kre1g==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "jest-worker": "^24.0.0", - "throat": "^4.1.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.424", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.424.tgz", - "integrity": "sha512-h8apsMr1RK3OusH8iwxlJ7TZkpgWfg2HvTXZ3o1w9R/SeRKX0hEGMQmRyTWijZAloHfmfwTLaPurVqKWdFC5dw==", - "dev": true - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-plugin-jest": { - "version": "23.13.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.13.1.tgz", - "integrity": "sha512-TRLJH6M6EDvGocD98a7yVThrAOCK9WJfo9phuUb0MJptcrOYZeCKzC9aOzZCD93sxXCsiJVZywaTHdI/mAi0FQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^2.5.0" - } - }, - "eslint-plugin-prettier": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", - "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha1-WGbbKal4Jtvkvzr9JAcOrZ6kOic=", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "gulp-css-base64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/gulp-css-base64/-/gulp-css-base64-1.3.4.tgz", - "integrity": "sha1-r8pF6DQBBF9HLGe3dtGxUU4RSJ8=", - "dev": true, - "requires": { - "async": "^1.5.0", - "buffers": "^0.1.1", - "chalk": "^1.1.1", - "gulp-util": "^3.0.3", - "mime": "^1.3.4", - "request": "^2.67.0", - "through2": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", - "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^6.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", - "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", - "dev": true - }, - "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha1-HVoNIPsScHx1imVfa7xDhrWTDWg=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz", - "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", - "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", - "dev": true, - "requires": { - "@jest/core": "^25.5.4", - "import-local": "^3.0.2", - "jest-cli": "^25.5.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "jest-cli": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", - "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", - "dev": true, - "requires": { - "@jest/core": "^25.5.4", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^25.5.4", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", - "throat": "^5.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", - "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", - "dev": true, - "requires": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" - } - }, - "jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", - "dev": true, - "requires": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true - }, - "jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - } - } - }, - "jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", - "dev": true, - "requires": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - } - }, - "jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true - }, - "jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" - } - }, - "jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - } - } - }, - "jest-runner-eslint": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/jest-runner-eslint/-/jest-runner-eslint-0.8.0.tgz", - "integrity": "sha512-pCa974VqYRZ5TRmeIwEngyeiuMktc9lCucJcTL+uvxpcDj+o8QCjmiGoRQCHEPx3w9I0/3GSbkUetA3OhDqiLw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cosmiconfig": "^5.0.0", - "create-jest-runner": "^0.5.3", - "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "requires": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "js2xmlparser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", - "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", - "dev": true, - "requires": { - "xmlcreate": "^2.0.3" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdoc": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.4.tgz", - "integrity": "sha512-3G9d37VHv7MFdheviDCjUfQoIjdv4TC5zTTf5G9VODLtOnVS6La1eoYBDlbWfsRT3/Xo+j2MIqki2EV12BZfwA==", - "dev": true, - "requires": { - "@babel/parser": "^7.9.4", - "bluebird": "^3.7.2", - "catharsis": "^0.8.11", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^0.8.2", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.10.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true - } - } - }, - "jsdoc-template": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsdoc-template/-/jsdoc-template-1.2.0.tgz", - "integrity": "sha1-WtDIXtUJpd6bUVN4NcF2LZDnVWQ=", - "dev": true, - "requires": { - "gulp-css-base64": "^1.3.4" - } - }, - "jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "markdown-it-anchor": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.2.7.tgz", - "integrity": "sha512-REFmIaSS6szaD1bye80DMbp7ePwsPNvLTR5HunsUcZ0SG0rWJQ+Pz24R4UlTKtjKBPhxo0v0tOBDYjZQQknW8Q==", - "dev": true - }, - "marked": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", - "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha1-GiqrFtqesWe0nG5N8tnGjWPY4q0=", - "dev": true - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha1-/ms1WhkJJqt2mMmgVWoRGZshmb0=", - "dev": true, - "requires": { - "mime-db": "~1.38.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", - "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.1.1", - "semver": "^6.3.0", - "shellwords": "^0.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "optional": true - } - } - }, - "node-releases": { - "version": "1.1.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", - "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", - "dev": true - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", - "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4", - "private": "^0.1.8" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=", - "dev": true - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, - "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", - "dev": true, - "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", - "dev": true - }, - "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha1-TSl5I8WnKkI2DeKrUtrfquwAAY4=", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "terser": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.11.tgz", - "integrity": "sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=", - "dev": true - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "uglifyjs-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", - "source-map": "^0.6.1", - "uglify-js": "^3.6.0", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, - "cacache": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", - "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true - }, - "uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", - "dev": true, - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - } - }, - "webpack-sources": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.1.tgz", - "integrity": "sha512-XSz38193PTo/1csJabKaV4b53uRVotlMgqJXm3s3eje0Bu6gQTxYDqpD38CmQfDBA+gN+QqaGjasuC8I/7eW3Q==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", - "dev": true - }, - "v8-to-istanbul": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz", - "integrity": "sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "watchpack": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", - "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", - "dev": true, - "requires": { - "chokidar": "^2.1.8", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", - "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xmlcreate": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", - "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=", - "dev": true - }, - "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.7" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - } - } - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/package.json b/package.json index 3d47179e7..d2ac370e6 100644 --- a/package.json +++ b/package.json @@ -1,77 +1,87 @@ -{ - "name": "php-parser", - "version": "3.0.1", - "description": "Parse PHP code from JS and returns its AST", - "main": "src/index.js", - "browser": "dist/php-parser.js", - "files": [ - "src", - "dist", - "index.d.ts", - "LICENSE" - ], - "scripts": { - "fix": "eslint . --fix", - "test": "jest", - "husky": "npm run test", - "prebuild": "npm run test", - "build": "webpack --config webpack.config.js", - "-postbuild": "npm run build-docs", - "build-docs": "jsdoc -c .jsdoc.json", - "publish-docs": "git subtree push --prefix docs origin gh-pages" - }, - "husky": { - "hooks": { - "pre-commit": "npm run husky" - } - }, - "repository": { - "type": "git", - "url": "https://github.com/glayzzle/php-parser" - }, - "bugs": { - "url": "https://github.com/glayzzle/php-parser/issues" - }, - "homepage": "https://glayzzle.com/", - "keywords": [ - "php", - "php5", - "php7", - "parser", - "lexer", - "tokenizer", - "ast" - ], - "author": "Ioan CHIRIAC", - "contributors": [ - { - "name": "Filippo Conti", - "email": "filippo@codekraft.it", - "url": "https://b4dnewz.github.io/" - }, - { - "name": "Christian Zosel", - "email": "christian@zosel.ch", - "url": "https://twitter.com/chrzosel" - } - ], - "license": "BSD-3-Clause", - "devDependencies": { - "@babel/core": "^7.3.4", - "@babel/preset-env": "^7.3.4", - "babel-loader": "^8.0.5", - "coveralls": "^3.0.3", - "eslint": "^5.15.0", - "eslint-plugin-jest": "^23.2.0", - "eslint-plugin-prettier": "^3.0.1", - "husky": "^4.0.2", - "jest": "^25.2.0", - "jest-runner-eslint": "^0.8.0", - "jsdoc": "^3.5.5", - "jsdoc-template": "^1.2.0", - "prettier": "^2.0.2", - "uglifyjs-webpack-plugin": "^2.1.2", - "webpack": "^4.29.6", - "webpack-cli": "^3.2.3" - } -} +{ + "name": "php-parser", + "version": "3.2.3", + "description": "Parse PHP code from JS and returns its AST", + "main": "src/index.js", + "browser": "dist/php-parser.js", + "files": [ + "src", + "dist", + "types.d.ts", + "LICENSE" + ], + "types": "types.d.ts", + "scripts": { + "fix": "eslint . --fix", + "test": "jest", + "prepublishOnly": "yarpm run build", + "prebuild": "yarpm run test", + "build": "webpack --config webpack.config.js", + "-postbuild": "yarpm run build-docs", + "build-docs": "jsdoc -c .jsdoc.json", + "build-types": "jsdoc -t node_modules/tsd-jsdoc/dist -r src -d . && prettier -w types.d.ts", + "publish-docs": "git subtree push --prefix docs origin gh-pages", + "benchmark": "node test/benchmark.js", + "prepare": "husky" + }, + "repository": { + "type": "git", + "url": "https://github.com/glayzzle/php-parser" + }, + "bugs": { + "url": "https://github.com/glayzzle/php-parser/issues" + }, + "homepage": "https://glayzzle.com/", + "keywords": [ + "php", + "php5", + "php7", + "php8", + "parser", + "lexer", + "tokenizer", + "ast" + ], + "author": "Ioan CHIRIAC", + "contributors": [ + { + "name": "Filippo Conti", + "email": "filippo@codekraft.it", + "url": "https://b4dnewz.github.io/" + }, + { + "name": "Christian Zosel", + "email": "christian@zosel.ch", + "url": "https://twitter.com/chrzosel" + } + ], + "license": "BSD-3-Clause", + "devDependencies": { + "@babel/core": "^7.26.0", + "@babel/preset-env": "^7.26.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.14.0", + "@types/node": "^22.9.0", + "babel-loader": "^9.2.1", + "benchmark": "^2.1.4", + "coveralls": "^3.0.3", + "eslint": "^9.14.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-jest": "^28.9.0", + "eslint-plugin-prettier": "^5.2.1", + "globals": "^15.12.0", + "husky": "^9.1.6", + "jest": "^29.7.0", + "jest-runner-eslint": "^2.2.1", + "jsdoc": "^3.6.11", + "jsdoc-template": "^1.2.0", + "lodash.template": ">=4.5.0", + "prettier": "^3.3.3", + "tsd-jsdoc": "^2.5.0", + "typescript": "^5.6.3", + "webpack": "5.96.0", + "webpack-cli": "^5.1.4", + "yarpm": "^1.2.0" + }, + "dependencies": {} +} diff --git a/src/ast.js b/src/ast.js index bff1c2959..d11b556b5 100644 --- a/src/ast.js +++ b/src/ast.js @@ -119,6 +119,7 @@ const Position = require("./ast/position"); /** * The AST builder class * @constructor AST + * @memberOf module:php-parser * @tutorial AST * @property {Boolean} withPositions - Should locate any node (by default false) * @property {Boolean} withSource - Should extract the node original code (by default false) @@ -128,21 +129,6 @@ const AST = function (withPositions, withSource) { this.withSource = withSource; }; -/** - * Create a position node from specified parser - * including it's lexer current state - * @param {Parser} - * @return {Position} - * @private - */ -AST.prototype.position = function (parser) { - return new Position( - parser.lexer.yylloc.first_line, - parser.lexer.yylloc.first_column, - parser.lexer.yylloc.first_offset - ); -}; - // operators in ascending order of precedence AST.precedence = {}; [ @@ -174,12 +160,22 @@ AST.precedence = {}; }); }); +/** + * @private + * @function AST#isRightAssociative + * @memberOf module:php-parser + * @param operator + * @return {boolean} + */ AST.prototype.isRightAssociative = function (operator) { return operator === "**" || operator === "??"; }; /** * Change parent node informations after swapping childs + * @private + * @function AST#swapLocations + * @memberOf module:php-parser */ AST.prototype.swapLocations = function (target, first, last, parser) { if (this.withPositions) { @@ -188,7 +184,7 @@ AST.prototype.swapLocations = function (target, first, last, parser) { if (this.withSource) { target.loc.source = parser.lexer._input.substring( target.loc.start.offset, - target.loc.end.offset + target.loc.end.offset, ); } } @@ -196,19 +192,23 @@ AST.prototype.swapLocations = function (target, first, last, parser) { /** * Includes locations from first & last into the target + * @private + * @function AST#resolveLocations + * @memberOf module:php-parser */ AST.prototype.resolveLocations = function (target, first, last, parser) { if (this.withPositions) { if (target.loc.start.offset > first.loc.start.offset) { target.loc.start = first.loc.start; } + /* istanbul ignore next */ if (target.loc.end.offset < last.loc.end.offset) { target.loc.end = last.loc.end; } if (this.withSource) { target.loc.source = parser.lexer._input.substring( target.loc.start.offset, - target.loc.end.offset + target.loc.end.offset, ); } } @@ -216,6 +216,9 @@ AST.prototype.resolveLocations = function (target, first, last, parser) { /** * Check and fix precence, by default using right + * @private + * @function AST#resolvePrecedence + * @memberOf module:php-parser */ AST.prototype.resolvePrecedence = function (result, parser) { let buffer, lLevel, rLevel; @@ -288,7 +291,7 @@ AST.prototype.resolvePrecedence = function (result, parser) { } else if (result.kind === "unary") { // https://github.com/glayzzle/php-parser/issues/75 if (result.what && !result.what.parenthesizedExpression) { - // unary precedence is allways lower + // unary precedence is always lower if (result.what.kind === "bin") { buffer = result.what; result.what = result.what.left; @@ -345,15 +348,18 @@ AST.prototype.resolvePrecedence = function (result, parser) { /** * Prepares an AST node + * @private + * @function AST#prepare + * @memberOf module:php-parser * @param {String|null} kind - Defines the node type - * (if null, the kind must be passed at the function call) + * @param {*} docs - (if null, the kind must be passed at the function call) * @param {Parser} parser - The parser instance (use for extracting locations) * @return {Function} */ AST.prototype.prepare = function (kind, docs, parser) { let start = null; if (this.withPositions || this.withSource) { - start = this.position(parser); + start = parser.position(); } const self = this; // returns the node @@ -370,9 +376,9 @@ AST.prototype.prepare = function (kind, docs, parser) { location = new Location( src, start, - new Position(parser.prev[0], parser.prev[1], parser.prev[2]) + new Position(parser.prev[0], parser.prev[1], parser.prev[2]), ); - // last argument is allways the location + // last argument is always the location args.push(location); } // handle lazy kind definitions @@ -387,6 +393,7 @@ AST.prototype.prepare = function (kind, docs, parser) { const astNode = Object.create(node.prototype); node.apply(astNode, args); result.instance = astNode; + /* istanbul ignore next */ if (result.trailingComments) { // buffer of trailingComments astNode.trailingComments = result.trailingComments; @@ -395,24 +402,25 @@ AST.prototype.prepare = function (kind, docs, parser) { result.postBuild(astNode); } if (parser.debug) { - delete AST.stack[result.stackUid]; + delete self.stack[result.stackUid]; } return self.resolvePrecedence(astNode, parser); }; if (parser.debug) { - if (!AST.stack) { - AST.stack = {}; - AST.stackUid = 1; + if (!this.stack) { + this.stack = {}; + this.stackUid = 1; } - AST.stack[++AST.stackUid] = { + this.stack[++this.stackUid] = { position: start, stack: new Error().stack.split("\n").slice(3, 5), }; - result.stackUid = AST.stackUid; + result.stackUid = this.stackUid; } /** * Sets a list of trailing comments + * @private * @param {*} docs */ result.setTrailingComments = function (docs) { @@ -426,6 +434,8 @@ AST.prototype.prepare = function (kind, docs, parser) { /** * Release a node without using it on the AST + * @private + * @param {*} target */ result.destroy = function (target) { if (docs) { @@ -441,7 +451,7 @@ AST.prototype.prepare = function (kind, docs, parser) { } } if (parser.debug) { - delete AST.stack[result.stackUid]; + delete self.stack[result.stackUid]; } }; return result; @@ -449,12 +459,13 @@ AST.prototype.prepare = function (kind, docs, parser) { AST.prototype.checkNodes = function () { const errors = []; - for (const k in AST.stack) { - if (AST.stack.hasOwnProperty(k)) { - errors.push(AST.stack[k]); + for (const k in this.stack) { + if (Object.prototype.hasOwnProperty.call(this.stack, k)) { + this.stack[k].key = k; + errors.push(this.stack[k]); } } - AST.stack = {}; + this.stack = {}; return errors; }; @@ -464,6 +475,8 @@ AST.prototype.checkNodes = function () { require("./ast/arrowfunc"), require("./ast/assign"), require("./ast/assignref"), + require("./ast/attribute"), + require("./ast/attrgroup"), require("./ast/bin"), require("./ast/block"), require("./ast/boolean"), @@ -492,6 +505,8 @@ AST.prototype.checkNodes = function () { require("./ast/encapsed"), require("./ast/encapsedpart"), require("./ast/entry"), + require("./ast/enum"), + require("./ast/enumcase"), require("./ast/error"), require("./ast/eval"), require("./ast/exit"), @@ -508,20 +523,25 @@ AST.prototype.checkNodes = function () { require("./ast/include"), require("./ast/inline"), require("./ast/interface"), + require("./ast/intersectiontype"), require("./ast/isset"), require("./ast/label"), require("./ast/list"), require("./ast/literal"), require("./ast/lookup"), require("./ast/magic"), + require("./ast/match"), + require("./ast/matcharm"), require("./ast/method"), require("./ast/name"), require("./ast/namespace"), + require("./ast/namedargument"), require("./ast/new"), require("./ast/node"), require("./ast/noop"), require("./ast/nowdoc"), require("./ast/nullkeyword"), + require("./ast/nullsafepropertylookup"), require("./ast/number"), require("./ast/offsetlookup"), require("./ast/operation"), @@ -554,11 +574,13 @@ AST.prototype.checkNodes = function () { require("./ast/try"), require("./ast/typereference"), require("./ast/unary"), + require("./ast/uniontype"), require("./ast/unset"), require("./ast/usegroup"), require("./ast/useitem"), require("./ast/variable"), require("./ast/variadic"), + require("./ast/variadicplaceholder"), require("./ast/while"), require("./ast/yield"), require("./ast/yieldfrom"), diff --git a/src/ast/array.js b/src/ast/array.js index f458d3b73..ce518aa79 100644 --- a/src/ast/array.js +++ b/src/ast/array.js @@ -11,6 +11,7 @@ const KIND = "array"; /** * Defines an array structure * @constructor Array + * @memberOf module:php-parser * @example * // PHP code : * [1, 'foo' => 'bar', 3] @@ -30,16 +31,14 @@ const KIND = "array"; * ] * } * @extends {Expression} - * @property {Entry|Expr|Variable} items List of array items + * @property {Array} items List of array items * @property {boolean} shortForm Indicate if the short array syntax is used, ex `[]` instead `array()` */ -module.exports = Expr.extends(KIND, function Array( - shortForm, - items, - docs, - location -) { - Expr.apply(this, [KIND, docs, location]); - this.items = items; - this.shortForm = shortForm; -}); +module.exports = Expr.extends( + KIND, + function Array(shortForm, items, docs, location) { + Expr.apply(this, [KIND, docs, location]); + this.items = items; + this.shortForm = shortForm; + }, +); diff --git a/src/ast/arrowfunc.js b/src/ast/arrowfunc.js index edaa78f24..695b6ef6a 100644 --- a/src/ast/arrowfunc.js +++ b/src/ast/arrowfunc.js @@ -11,6 +11,7 @@ const KIND = "arrowfunc"; /** * Defines an arrow function (it's like a closure) * @constructor ArrowFunc + * @memberOf module:php-parser * @extends {Expression} * @property {Parameter[]} arguments * @property {Identifier} type @@ -19,21 +20,24 @@ const KIND = "arrowfunc"; * @property {boolean} nullable * @property {boolean} isStatic */ -module.exports = Expression.extends(KIND, function Closure( - args, - byref, - body, - type, - nullable, - isStatic, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.arguments = args; - this.byref = byref; - this.body = body; - this.type = type; - this.nullable = nullable; - this.isStatic = isStatic || false; -}); +module.exports = Expression.extends( + KIND, + function Closure( + args, + byref, + body, + type, + nullable, + isStatic, + docs, + location, + ) { + Expression.apply(this, [KIND, docs, location]); + this.arguments = args; + this.byref = byref; + this.body = body; + this.type = type; + this.nullable = nullable; + this.isStatic = isStatic || false; + }, +); diff --git a/src/ast/assign.js b/src/ast/assign.js index 0d8050398..4cf6a6857 100644 --- a/src/ast/assign.js +++ b/src/ast/assign.js @@ -11,20 +11,18 @@ const KIND = "assign"; /** * Assigns a value to the specified target * @constructor Assign + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} left * @property {Expression} right * @property {String} operator */ -module.exports = Expression.extends(KIND, function Assign( - left, - right, - operator, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.left = left; - this.right = right; - this.operator = operator; -}); +module.exports = Expression.extends( + KIND, + function Assign(left, right, operator, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.left = left; + this.right = right; + this.operator = operator; + }, +); diff --git a/src/ast/assignref.js b/src/ast/assignref.js index 185250fce..668bd058a 100644 --- a/src/ast/assignref.js +++ b/src/ast/assignref.js @@ -10,19 +10,18 @@ const KIND = "assignref"; /** * Assigns a value to the specified target - * @constructor Assign + * @constructor AssignRef + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} left * @property {Expression} right * @property {String} operator */ -module.exports = Expression.extends(KIND, function AssignRef( - left, - right, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.left = left; - this.right = right; -}); +module.exports = Expression.extends( + KIND, + function AssignRef(left, right, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.left = left; + this.right = right; + }, +); diff --git a/src/ast/attrgroup.js b/src/ast/attrgroup.js new file mode 100644 index 000000000..6ce01f061 --- /dev/null +++ b/src/ast/attrgroup.js @@ -0,0 +1,21 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Node = require("./node"); +const KIND = "attrgroup"; + +/** + * Attribute group + * @memberOf module:php-parser + * @constructor AttrGroup + * @extends {Node} + * @property {Attribute[]} attrs + */ +module.exports = Node.extends(KIND, function AttrGroup(attrs, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.attrs = attrs || []; +}); diff --git a/src/ast/attribute.js b/src/ast/attribute.js new file mode 100644 index 000000000..f617bb6d1 --- /dev/null +++ b/src/ast/attribute.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Node = require("./node"); +const KIND = "attribute"; + +/** + * Attribute Value + * @memberOf module:php-parser + * @constructor Attribute + * @extends {Node} + * @property {String} name + * @property {Parameter[]} args + */ +module.exports = Node.extends( + KIND, + function Attribute(name, args, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.name = name; + this.args = args; + }, +); diff --git a/src/ast/bin.js b/src/ast/bin.js index 9c3724ef3..6221f4843 100644 --- a/src/ast/bin.js +++ b/src/ast/bin.js @@ -10,20 +10,18 @@ const KIND = "bin"; /** * Binary operations * @constructor Bin + * @memberOf module:php-parser * @extends {Operation} * @property {String} type * @property {Expression} left * @property {Expression} right */ -module.exports = Operation.extends(KIND, function Bin( - type, - left, - right, - docs, - location -) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.left = left; - this.right = right; -}); +module.exports = Operation.extends( + KIND, + function Bin(type, left, right, docs, location) { + Operation.apply(this, [KIND, docs, location]); + this.type = type; + this.left = left; + this.right = right; + }, +); diff --git a/src/ast/block.js b/src/ast/block.js index 4df2baff6..1a51712f9 100644 --- a/src/ast/block.js +++ b/src/ast/block.js @@ -11,15 +11,14 @@ const KIND = "block"; /** * A block statement, i.e., a sequence of statements surrounded by braces. * @constructor Block + * @memberOf module:php-parser * @extends {Statement} * @property {Node[]} children */ -module.exports = Statement.extends(KIND, function Block( - kind, - children, - docs, - location -) { - Statement.apply(this, [kind || KIND, docs, location]); - this.children = children.filter(Boolean); -}); +module.exports = Statement.extends( + KIND, + function Block(kind, children, docs, location) { + Statement.apply(this, [kind || KIND, docs, location]); + this.children = children.filter(Boolean); + }, +); diff --git a/src/ast/boolean.js b/src/ast/boolean.js index 7fd6e359f..9480d662d 100644 --- a/src/ast/boolean.js +++ b/src/ast/boolean.js @@ -11,13 +11,13 @@ const KIND = "boolean"; /** * Defines a boolean value (true/false) * @constructor Boolean + * @memberOf module:php-parser * @extends {Literal} + * @property {boolean} value */ -module.exports = Literal.extends(KIND, function Boolean( - value, - raw, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); +module.exports = Literal.extends( + KIND, + function Boolean(value, raw, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + }, +); diff --git a/src/ast/break.js b/src/ast/break.js index 79e073153..2e98e2515 100644 --- a/src/ast/break.js +++ b/src/ast/break.js @@ -11,6 +11,7 @@ const KIND = "break"; /** * A break statement * @constructor Break + * @memberOf module:php-parser * @extends {Statement} * @property {Number|Null} level */ diff --git a/src/ast/byref.js b/src/ast/byref.js index 312997733..89cfb98c2 100644 --- a/src/ast/byref.js +++ b/src/ast/byref.js @@ -11,8 +11,9 @@ const KIND = "byref"; /** * Passing by Reference - so the function can modify the variable * @constructor ByRef + * @memberOf module:php-parser * @extends {Expression} - * @property {expr} what + * @property {ExpressionStatement} what */ module.exports = Expression.extends(KIND, function ByRef(what, docs, location) { Expression.apply(this, [KIND, docs, location]); diff --git a/src/ast/call.js b/src/ast/call.js index 5d41f14c0..51daf3485 100644 --- a/src/ast/call.js +++ b/src/ast/call.js @@ -11,17 +11,16 @@ const KIND = "call"; /** * Executes a call statement * @constructor Call + * @memberOf module:php-parser * @extends {Expression} - * @property {Identifier|Variable|??} what - * @property {Arguments[]} arguments + * @property {Identifier|Variable} what + * @property {Expression[]} arguments */ -module.exports = Expression.extends(KIND, function Call( - what, - args, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; - this.arguments = args; -}); +module.exports = Expression.extends( + KIND, + function Call(what, args, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.what = what; + this.arguments = args; + }, +); diff --git a/src/ast/case.js b/src/ast/case.js index 47cb18a1e..8e25b0537 100644 --- a/src/ast/case.js +++ b/src/ast/case.js @@ -11,17 +11,16 @@ const KIND = "case"; /** * A switch case statement * @constructor Case + * @memberOf module:php-parser * @extends {Statement} * @property {Expression|null} test - if null, means that the default case * @property {Block|null} body */ -module.exports = Statement.extends(KIND, function Case( - test, - body, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; -}); +module.exports = Statement.extends( + KIND, + function Case(test, body, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.test = test; + this.body = body; + }, +); diff --git a/src/ast/cast.js b/src/ast/cast.js index c34701e5f..8dadffa0a 100644 --- a/src/ast/cast.js +++ b/src/ast/cast.js @@ -11,20 +11,18 @@ const KIND = "cast"; /** * Binary operations * @constructor Cast + * @memberOf module:php-parser * @extends {Operation} * @property {String} type * @property {String} raw * @property {Expression} expr */ -module.exports = Operation.extends(KIND, function Cast( - type, - raw, - expr, - docs, - location -) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.raw = raw; - this.expr = expr; -}); +module.exports = Operation.extends( + KIND, + function Cast(type, raw, expr, docs, location) { + Operation.apply(this, [KIND, docs, location]); + this.type = type; + this.raw = raw; + this.expr = expr; + }, +); diff --git a/src/ast/catch.js b/src/ast/catch.js index 7640a84a5..4560ffb97 100644 --- a/src/ast/catch.js +++ b/src/ast/catch.js @@ -11,21 +11,19 @@ const KIND = "catch"; /** * Defines a catch statement * @constructor Catch + * @memberOf module:php-parser * @extends {Statement} - * @property {Identifier[]} what + * @property {Name[]} what * @property {Variable} variable - * @property {Statement} body + * @property {Block} body * @see http://php.net/manual/en/language.exceptions.php */ -module.exports = Statement.extends(KIND, function Catch( - body, - what, - variable, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.body = body; - this.what = what; - this.variable = variable; -}); +module.exports = Statement.extends( + KIND, + function Catch(body, what, variable, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.body = body; + this.what = what; + this.variable = variable; + }, +); diff --git a/src/ast/class.js b/src/ast/class.js index ecc94d9d5..cfa620c2c 100644 --- a/src/ast/class.js +++ b/src/ast/class.js @@ -11,27 +11,26 @@ const KIND = "class"; /** * A class definition * @constructor Class + * @memberOf module:php-parser * @extends {Declaration} * @property {Identifier|null} extends - * @property {Identifier[]} implements + * @property {Identifier[]|null} implements * @property {Declaration[]} body * @property {boolean} isAnonymous * @property {boolean} isAbstract * @property {boolean} isFinal + * @property {boolean} isReadonly + * @property {AttrGroup[]} attrGroups */ -module.exports = Declaration.extends(KIND, function Class( - name, - ext, - impl, - body, - flags, - docs, - location -) { - Declaration.apply(this, [KIND, name, docs, location]); - this.isAnonymous = name ? false : true; - this.extends = ext; - this.implements = impl; - this.body = body; - this.parseFlags(flags); -}); +module.exports = Declaration.extends( + KIND, + function Class(name, ext, impl, body, flags, docs, location) { + Declaration.apply(this, [KIND, name, docs, location]); + this.isAnonymous = name ? false : true; + this.extends = ext; + this.implements = impl; + this.body = body; + this.attrGroups = []; + this.parseFlags(flags); + }, +); diff --git a/src/ast/classconstant.js b/src/ast/classconstant.js index 2cba246fa..bea667188 100644 --- a/src/ast/classconstant.js +++ b/src/ast/classconstant.js @@ -16,29 +16,47 @@ const IS_PRIVATE = "private"; /** * Defines a class/interface/trait constant * @constructor ClassConstant + * @memberOf module:php-parser * @extends {ConstantStatement} * @property {string} visibility + * @property {boolean} final + * @property {boolean} nullable + * @property {TypeReference|IntersectionType|UnionType|null} type + * @property {AttrGroup[]} attrGroups */ -const ClassConstant = ConstantStatement.extends(KIND, function ClassConstant( - kind, - constants, - flags, - docs, - location -) { - ConstantStatement.apply(this, [kind || KIND, constants, docs, location]); - this.parseFlags(flags); -}); +const ClassConstant = ConstantStatement.extends( + KIND, + function ClassConstant( + kind, + constants, + flags, + nullable, + type, + attrGroups, + docs, + location, + ) { + ConstantStatement.apply(this, [kind || KIND, constants, docs, location]); + this.parseFlags(flags); + this.nullable = nullable; + this.type = type; + this.attrGroups = attrGroups; + }, +); /** * Generic flags parser - * @param {Integer[]} flags + * @function + * @name ClassConstant#parseFlags + * @memberOf module:php-parser + * @param {Array} flags * @return {void} */ ClassConstant.prototype.parseFlags = function (flags) { if (flags[0] === -1) { this.visibility = IS_UNDEFINED; } else if (flags[0] === null) { + /* istanbul ignore next */ this.visibility = null; } else if (flags[0] === 0) { this.visibility = IS_PUBLIC; @@ -47,6 +65,7 @@ ClassConstant.prototype.parseFlags = function (flags) { } else if (flags[0] === 2) { this.visibility = IS_PRIVATE; } + this.final = flags[2] === 2; }; module.exports = ClassConstant; diff --git a/src/ast/clone.js b/src/ast/clone.js index f2ee4f9b7..54ff3e37b 100644 --- a/src/ast/clone.js +++ b/src/ast/clone.js @@ -11,6 +11,7 @@ const KIND = "clone"; /** * Defines a clone call * @constructor Clone + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} what */ diff --git a/src/ast/closure.js b/src/ast/closure.js index a1f975df5..059f47e12 100644 --- a/src/ast/closure.js +++ b/src/ast/closure.js @@ -11,31 +11,37 @@ const KIND = "closure"; /** * Defines a closure * @constructor Closure + * @memberOf module:php-parser * @extends {Expression} * @property {Parameter[]} arguments * @property {Variable[]} uses * @property {Identifier} type - * @property {boolean} byref + * @property {Boolean} byref * @property {boolean} nullable * @property {Block|null} body * @property {boolean} isStatic + * @property {AttrGroup[]} attrGroups */ -module.exports = Expression.extends(KIND, function Closure( - args, - byref, - uses, - type, - nullable, - isStatic, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.uses = uses; - this.arguments = args; - this.byref = byref; - this.type = type; - this.nullable = nullable; - this.isStatic = isStatic || false; - this.body = null; -}); +module.exports = Expression.extends( + KIND, + function Closure( + args, + byref, + uses, + type, + nullable, + isStatic, + docs, + location, + ) { + Expression.apply(this, [KIND, docs, location]); + this.uses = uses; + this.arguments = args; + this.byref = byref; + this.type = type; + this.nullable = nullable; + this.isStatic = isStatic || false; + this.body = null; + this.attrGroups = []; + }, +); diff --git a/src/ast/comment.js b/src/ast/comment.js index e725a4d8c..71f99fe0d 100644 --- a/src/ast/comment.js +++ b/src/ast/comment.js @@ -10,15 +10,14 @@ const Node = require("./node"); /** * Abstract documentation node (ComentLine or CommentBlock) * @constructor Comment + * @memberOf module:php-parser * @extends {Node} * @property {String} value */ -module.exports = Node.extends("comment", function Comment( - kind, - value, - docs, - location -) { - Node.apply(this, [kind, docs, location]); - this.value = value; -}); +module.exports = Node.extends( + "comment", + function Comment(kind, value, docs, location) { + Node.apply(this, [kind, docs, location]); + this.value = value; + }, +); diff --git a/src/ast/commentblock.js b/src/ast/commentblock.js index 1f58ecac7..9b94b8326 100644 --- a/src/ast/commentblock.js +++ b/src/ast/commentblock.js @@ -11,12 +11,12 @@ const KIND = "commentblock"; /** * A comment block (multiline) * @constructor CommentBlock + * @memberOf module:php-parser * @extends {Comment} */ -module.exports = Comment.extends(KIND, function CommentBlock( - value, - docs, - location -) { - Comment.apply(this, [KIND, value, docs, location]); -}); +module.exports = Comment.extends( + KIND, + function CommentBlock(value, docs, location) { + Comment.apply(this, [KIND, value, docs, location]); + }, +); diff --git a/src/ast/commentline.js b/src/ast/commentline.js index 65b0357f4..d92d6f2d1 100644 --- a/src/ast/commentline.js +++ b/src/ast/commentline.js @@ -11,12 +11,12 @@ const KIND = "commentline"; /** * A single line comment * @constructor CommentLine + * @memberOf module:php-parser * @extends {Comment} */ -module.exports = Comment.extends(KIND, function CommentLine( - value, - docs, - location -) { - Comment.apply(this, [KIND, value, docs, location]); -}); +module.exports = Comment.extends( + KIND, + function CommentLine(value, docs, location) { + Comment.apply(this, [KIND, value, docs, location]); + }, +); diff --git a/src/ast/constant.js b/src/ast/constant.js index 750f434d9..698a7b14e 100644 --- a/src/ast/constant.js +++ b/src/ast/constant.js @@ -11,17 +11,16 @@ const KIND = "constant"; /** * Defines a constant * @constructor Constant + * @memberOf module:php-parser * @extends {Node} * @property {string} name * @property {Node|string|number|boolean|null} value */ -module.exports = Node.extends(KIND, function Constant( - name, - value, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.name = name; - this.value = value; -}); +module.exports = Node.extends( + KIND, + function Constant(name, value, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.name = name; + this.value = value; + }, +); diff --git a/src/ast/constantstatement.js b/src/ast/constantstatement.js index 5c79e23d0..eac6ca245 100644 --- a/src/ast/constantstatement.js +++ b/src/ast/constantstatement.js @@ -11,15 +11,14 @@ const KIND = "constantstatement"; /** * Declares a constants into the current scope * @constructor ConstantStatement + * @memberOf module:php-parser * @extends {Statement} * @property {Constant[]} constants */ -module.exports = Statement.extends(KIND, function ConstantStatement( - kind, - constants, - docs, - location -) { - Statement.apply(this, [kind || KIND, docs, location]); - this.constants = constants; -}); +module.exports = Statement.extends( + KIND, + function ConstantStatement(kind, constants, docs, location) { + Statement.apply(this, [kind || KIND, docs, location]); + this.constants = constants; + }, +); diff --git a/src/ast/continue.js b/src/ast/continue.js index 5794282a6..8344bc1b4 100644 --- a/src/ast/continue.js +++ b/src/ast/continue.js @@ -11,14 +11,14 @@ const KIND = "continue"; /** * A continue statement * @constructor Continue + * @memberOf module:php-parser * @extends {Statement} - * @property {Number|Null} level + * @property {number|null} level */ -module.exports = Statement.extends(KIND, function Continue( - level, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.level = level; -}); +module.exports = Statement.extends( + KIND, + function Continue(level, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.level = level; + }, +); diff --git a/src/ast/declaration.js b/src/ast/declaration.js index 6f1bc1f98..33ffbf5e0 100644 --- a/src/ast/declaration.js +++ b/src/ast/declaration.js @@ -16,31 +16,35 @@ const IS_PRIVATE = "private"; /** * A declaration statement (function, class, interface...) * @constructor Declaration + * @memberOf module:php-parser * @extends {Statement} * @property {Identifier|string} name */ -const Declaration = Statement.extends(KIND, function Declaration( - kind, - name, - docs, - location -) { - Statement.apply(this, [kind || KIND, docs, location]); - this.name = name; -}); +const Declaration = Statement.extends( + KIND, + function Declaration(kind, name, docs, location) { + Statement.apply(this, [kind || KIND, docs, location]); + this.name = name; + }, +); /** * Generic flags parser - * @param {Integer[]} flags + * @function + * @name Declaration#parseFlags + * @memberOf module:php-parser + * @param {Array} flags * @return {void} */ Declaration.prototype.parseFlags = function (flags) { this.isAbstract = flags[2] === 1; this.isFinal = flags[2] === 2; + this.isReadonly = flags[3] === 1; if (this.kind !== "class") { if (flags[0] === -1) { this.visibility = IS_UNDEFINED; } else if (flags[0] === null) { + /* istanbul ignore next */ this.visibility = null; } else if (flags[0] === 0) { this.visibility = IS_PUBLIC; diff --git a/src/ast/declare.js b/src/ast/declare.js index 2dbaea8ca..dab989f21 100644 --- a/src/ast/declare.js +++ b/src/ast/declare.js @@ -11,22 +11,20 @@ const KIND = "declare"; /** * The declare construct is used to set execution directives for a block of code * @constructor Declare + * @memberOf module:php-parser * @extends {Block} - * @property {Array[]} directives - * @property {String} mode + * @property {DeclareDirective[]} directives + * @property {string} mode * @see http://php.net/manual/en/control-structures.declare.php */ -const Declare = Block.extends(KIND, function Declare( - directives, - body, - mode, - docs, - location -) { - Block.apply(this, [KIND, body, docs, location]); - this.directives = directives; - this.mode = mode; -}); +const Declare = Block.extends( + KIND, + function Declare(directives, body, mode, docs, location) { + Block.apply(this, [KIND, body, docs, location]); + this.directives = directives; + this.mode = mode; + }, +); /** * The node is declared as a short tag syntax : @@ -36,7 +34,8 @@ const Declare = Block.extends(KIND, function Declare( * // some statements * enddeclare; * ``` - * @constant {String} MODE_SHORT + * @constant {String} Declare#MODE_SHORT + * @memberOf module:php-parser */ Declare.MODE_SHORT = "short"; @@ -48,7 +47,8 @@ Declare.MODE_SHORT = "short"; * // some statements * } * ``` - * @constant {String} MODE_BLOCK + * @constant {String} Declare#MODE_BLOCK + * @memberOf module:php-parser */ Declare.MODE_BLOCK = "block"; @@ -63,7 +63,8 @@ Declare.MODE_BLOCK = "block"; * declare(ticks=2); * // some statements * ``` - * @constant {String} MODE_NONE + * @constant {String} Declare#MODE_NONE + * @memberOf module:php-parser */ Declare.MODE_NONE = "none"; diff --git a/src/ast/declaredirective.js b/src/ast/declaredirective.js index 719fbf50c..ed65937d0 100644 --- a/src/ast/declaredirective.js +++ b/src/ast/declaredirective.js @@ -11,17 +11,16 @@ const KIND = "declaredirective"; /** * Defines a constant * @constructor DeclareDirective + * @memberOf module:php-parser * @extends {Node} - * @property {Identifier} name + * @property {Identifier} key * @property {Node|string|number|boolean|null} value */ -module.exports = Node.extends(KIND, function DeclareDirective( - key, - value, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.key = key; - this.value = value; -}); +module.exports = Node.extends( + KIND, + function DeclareDirective(key, value, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.key = key; + this.value = value; + }, +); diff --git a/src/ast/do.js b/src/ast/do.js index 80a1cff00..801790893 100644 --- a/src/ast/do.js +++ b/src/ast/do.js @@ -11,17 +11,16 @@ const KIND = "do"; /** * Defines a do/while statement * @constructor Do + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} test - * @property {Statement} body + * @property {Block | null} body */ -module.exports = Statement.extends(KIND, function Do( - test, - body, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; -}); +module.exports = Statement.extends( + KIND, + function Do(test, body, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.test = test; + this.body = body; + }, +); diff --git a/src/ast/echo.js b/src/ast/echo.js index 65af28ab2..5bf5765bb 100644 --- a/src/ast/echo.js +++ b/src/ast/echo.js @@ -11,16 +11,16 @@ const KIND = "echo"; /** * Defines system based call * @constructor Echo + * @memberOf module:php-parser * @property {boolean} shortForm + * @property {Expression[]} expressions * @extends {Statement} */ -module.exports = Statement.extends(KIND, function Echo( - expressions, - shortForm, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.shortForm = shortForm; - this.expressions = expressions; -}); +module.exports = Statement.extends( + KIND, + function Echo(expressions, shortForm, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.shortForm = shortForm; + this.expressions = expressions; + }, +); diff --git a/src/ast/empty.js b/src/ast/empty.js index 142c0ed07..d2c5809b7 100644 --- a/src/ast/empty.js +++ b/src/ast/empty.js @@ -11,13 +11,13 @@ const KIND = "empty"; /** * Defines an empty check call * @constructor Empty + * @memberOf module:php-parser * @extends {Expression} */ -module.exports = Expression.extends(KIND, function Empty( - expression, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; -}); +module.exports = Expression.extends( + KIND, + function Empty(expression, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.expression = expression; + }, +); diff --git a/src/ast/encapsed.js b/src/ast/encapsed.js index d78c0afa2..ac34a4365 100644 --- a/src/ast/encapsed.js +++ b/src/ast/encapsed.js @@ -11,20 +11,19 @@ const KIND = "encapsed"; /** * Defines an encapsed string (contains expressions) * @constructor Encapsed + * @memberOf module:php-parser * @extends {Literal} * @property {String} type - Defines the type of encapsed string (shell, heredoc, string) * @property {String|Null} label - The heredoc label, defined only when the type is heredoc + * @property {EncapsedPart[]} value */ -const Encapsed = Literal.extends(KIND, function Encapsed( - value, - raw, - type, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); - this.type = type; -}); +const Encapsed = Literal.extends( + KIND, + function Encapsed(value, raw, type, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + this.type = type; + }, +); /** * The node is a double quote string : @@ -32,7 +31,8 @@ const Encapsed = Literal.extends(KIND, function Encapsed( * bar_$baz; * ``` - * @constant {String} TYPE_OFFSET - `offset` + * @constant {String} Encapsed#TYPE_OFFSET - `offset` + * @memberOf module:php-parser */ Encapsed.TYPE_OFFSET = "offset"; diff --git a/src/ast/encapsedpart.js b/src/ast/encapsedpart.js index 3aedbae4a..cb5d836b1 100644 --- a/src/ast/encapsedpart.js +++ b/src/ast/encapsedpart.js @@ -11,20 +11,18 @@ const KIND = "encapsedpart"; /** * Part of `Encapsed` node * @constructor EncapsedPart + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} expression * @property {String} syntax * @property {Boolean} curly */ -module.exports = Expression.extends(KIND, function EncapsedPart( - expression, - syntax, - curly, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; - this.syntax = syntax; - this.curly = curly; -}); +module.exports = Expression.extends( + KIND, + function EncapsedPart(expression, syntax, curly, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.expression = expression; + this.syntax = syntax; + this.curly = curly; + }, +); diff --git a/src/ast/entry.js b/src/ast/entry.js index d3f48c138..4300e2366 100644 --- a/src/ast/entry.js +++ b/src/ast/entry.js @@ -10,6 +10,7 @@ const KIND = "entry"; /** * An array entry - see [Array](#array) + * @memberOf module:php-parser * @constructor Entry * @extends {Expression} * @property {Node|null} key The entry key/offset @@ -17,17 +18,13 @@ const KIND = "entry"; * @property {Boolean} byRef By reference * @property {Boolean} unpack Argument unpacking */ -module.exports = Expression.extends(KIND, function Entry( - key, - value, - byRef, - unpack, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.key = key; - this.value = value; - this.byRef = byRef; - this.unpack = unpack; -}); +module.exports = Expression.extends( + KIND, + function Entry(key, value, byRef, unpack, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.key = key; + this.value = value; + this.byRef = byRef; + this.unpack = unpack; + }, +); diff --git a/src/ast/enum.js b/src/ast/enum.js new file mode 100644 index 000000000..eee63b58d --- /dev/null +++ b/src/ast/enum.js @@ -0,0 +1,30 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Declaration = require("./declaration"); +const KIND = "enum"; + +/** + * A enum definition + * @constructor Enum + * @memberOf module:php-parser + * @extends {Declaration} + * @property {Identifier|null} valueType + * @property {Identifier[]} implements + * @property {Declaration[]} body + * @property {AttrGroup[]} attrGroups + */ +module.exports = Declaration.extends( + KIND, + function Enum(name, valueType, impl, body, docs, location) { + Declaration.apply(this, [KIND, name, docs, location]); + this.valueType = valueType; + this.implements = impl; + this.body = body; + this.attrGroups = []; + }, +); diff --git a/src/ast/enumcase.js b/src/ast/enumcase.js new file mode 100644 index 000000000..a182d25a7 --- /dev/null +++ b/src/ast/enumcase.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Node = require("./node"); +const KIND = "enumcase"; + +/** + * Declares a cases into the current scope + * @constructor EnumCase + * @memberOf module:php-parser + * @extends {Node} + * @property {string} name + * @property {string|number|null} value + */ +module.exports = Node.extends( + KIND, + function EnumCase(name, value, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.name = name; + this.value = value; + }, +); diff --git a/src/ast/error.js b/src/ast/error.js index a8f6b7e52..a715469c4 100644 --- a/src/ast/error.js +++ b/src/ast/error.js @@ -11,23 +11,20 @@ const KIND = "error"; /** * Defines an error node (used only on silentMode) * @constructor Error + * @memberOf module:php-parser * @extends {Node} * @property {string} message * @property {number} line * @property {number|string} token * @property {string|array} expected */ -module.exports = Node.extends(KIND, function Error( - message, - token, - line, - expected, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.message = message; - this.token = token; - this.line = line; - this.expected = expected; -}); +module.exports = Node.extends( + KIND, + function Error(message, token, line, expected, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.message = message; + this.token = token; + this.line = line; + this.expected = expected; + }, +); diff --git a/src/ast/eval.js b/src/ast/eval.js index 2d81dc6c2..950414823 100644 --- a/src/ast/eval.js +++ b/src/ast/eval.js @@ -11,14 +11,14 @@ const KIND = "eval"; /** * Defines an eval statement * @constructor Eval + * @memberOf module:php-parser * @extends {Expression} * @property {Node} source */ -module.exports = Expression.extends(KIND, function Eval( - source, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.source = source; -}); +module.exports = Expression.extends( + KIND, + function Eval(source, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.source = source; + }, +); diff --git a/src/ast/exit.js b/src/ast/exit.js index 19b31c37c..3d895dd6e 100644 --- a/src/ast/exit.js +++ b/src/ast/exit.js @@ -11,17 +11,16 @@ const KIND = "exit"; /** * Defines an exit / die call * @constructor Exit + * @memberOf module:php-parser * @extends {Expression} * @property {Node|null} expression - * @property {Boolean} useDie + * @property {boolean} useDie */ -module.exports = Expression.extends(KIND, function Exit( - expression, - useDie, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; - this.useDie = useDie; -}); +module.exports = Expression.extends( + KIND, + function Exit(expression, useDie, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.expression = expression; + this.useDie = useDie; + }, +); diff --git a/src/ast/expression.js b/src/ast/expression.js index 3b4d39d8e..c64f16a6c 100644 --- a/src/ast/expression.js +++ b/src/ast/expression.js @@ -12,6 +12,7 @@ const KIND = "expression"; * Any expression node. Since the left-hand side of an assignment may * be any expression in general, an expression can also be a pattern. * @constructor Expression + * @memberOf module:php-parser * @extends {Node} */ module.exports = Node.extends(KIND, function Expression(kind, docs, location) { diff --git a/src/ast/expressionstatement.js b/src/ast/expressionstatement.js index f8d2fca40..77f40d51c 100644 --- a/src/ast/expressionstatement.js +++ b/src/ast/expressionstatement.js @@ -11,14 +11,14 @@ const KIND = "expressionstatement"; /** * Defines an expression based statement * @constructor ExpressionStatement + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} expression */ -module.exports = Statement.extends(KIND, function ExpressionStatement( - expr, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.expression = expr; -}); +module.exports = Statement.extends( + KIND, + function ExpressionStatement(expr, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.expression = expr; + }, +); diff --git a/src/ast/for.js b/src/ast/for.js index 773743b86..37ad87004 100644 --- a/src/ast/for.js +++ b/src/ast/for.js @@ -11,27 +11,23 @@ const KIND = "for"; /** * Defines a for iterator * @constructor For + * @memberOf module:php-parser * @extends {Statement} * @property {Expression[]} init * @property {Expression[]} test * @property {Expression[]} increment - * @property {Statement} body + * @property {Block | null} body * @property {boolean} shortForm * @see http://php.net/manual/en/control-structures.for.php */ -module.exports = Statement.extends(KIND, function For( - init, - test, - increment, - body, - shortForm, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.init = init; - this.test = test; - this.increment = increment; - this.shortForm = shortForm; - this.body = body; -}); +module.exports = Statement.extends( + KIND, + function For(init, test, increment, body, shortForm, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.init = init; + this.test = test; + this.increment = increment; + this.shortForm = shortForm; + this.body = body; + }, +); diff --git a/src/ast/foreach.js b/src/ast/foreach.js index e2143fb4c..dbb70e0e5 100644 --- a/src/ast/foreach.js +++ b/src/ast/foreach.js @@ -11,27 +11,23 @@ const KIND = "foreach"; /** * Defines a foreach iterator * @constructor Foreach + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} source * @property {Expression|null} key * @property {Expression} value - * @property {Statement} body + * @property {Block | null} body * @property {boolean} shortForm * @see http://php.net/manual/en/control-structures.foreach.php */ -module.exports = Statement.extends(KIND, function Foreach( - source, - key, - value, - body, - shortForm, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.source = source; - this.key = key; - this.value = value; - this.shortForm = shortForm; - this.body = body; -}); +module.exports = Statement.extends( + KIND, + function Foreach(source, key, value, body, shortForm, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.source = source; + this.key = key; + this.value = value; + this.shortForm = shortForm; + this.body = body; + }, +); diff --git a/src/ast/function.js b/src/ast/function.js index abbbdd4e9..796903ab1 100644 --- a/src/ast/function.js +++ b/src/ast/function.js @@ -11,26 +11,24 @@ const KIND = "function"; /** * Defines a classic function * @constructor Function + * @memberOf module:php-parser * @extends {Declaration} * @property {Parameter[]} arguments * @property {Identifier} type * @property {boolean} byref * @property {boolean} nullable * @property {Block|null} body + * @property {AttrGroup[]} attrGroups */ -module.exports = Declaration.extends(KIND, function _Function( - name, - args, - byref, - type, - nullable, - docs, - location -) { - Declaration.apply(this, [KIND, name, docs, location]); - this.arguments = args; - this.byref = byref; - this.type = type; - this.nullable = nullable; - this.body = null; -}); +module.exports = Declaration.extends( + KIND, + function _Function(name, args, byref, type, nullable, docs, location) { + Declaration.apply(this, [KIND, name, docs, location]); + this.arguments = args; + this.byref = byref; + this.type = type; + this.nullable = nullable; + this.body = null; + this.attrGroups = []; + }, +); diff --git a/src/ast/global.js b/src/ast/global.js index f9cc9c064..ba9692f53 100644 --- a/src/ast/global.js +++ b/src/ast/global.js @@ -11,14 +11,14 @@ const KIND = "global"; /** * Imports a variable from the global scope * @constructor Global + * @memberOf module:php-parser * @extends {Statement} * @property {Variable[]} items */ -module.exports = Statement.extends(KIND, function Global( - items, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.items = items; -}); +module.exports = Statement.extends( + KIND, + function Global(items, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.items = items; + }, +); diff --git a/src/ast/goto.js b/src/ast/goto.js index e80f70174..4e00653eb 100644 --- a/src/ast/goto.js +++ b/src/ast/goto.js @@ -11,8 +11,9 @@ const KIND = "goto"; /** * Defines goto statement * @constructor Goto + * @memberOf module:php-parser * @extends {Statement} - * @property {String} label + * @property {string} label * @see {Label} */ module.exports = Statement.extends(KIND, function Goto(label, docs, location) { diff --git a/src/ast/halt.js b/src/ast/halt.js index eaa0dd2a9..acad687dc 100644 --- a/src/ast/halt.js +++ b/src/ast/halt.js @@ -11,6 +11,7 @@ const KIND = "halt"; /** * Halts the compiler execution * @constructor Halt + * @memberOf module:php-parser * @extends {Statement} * @property {String} after - String after the halt statement * @see http://php.net/manual/en/function.halt-compiler.php diff --git a/src/ast/identifier.js b/src/ast/identifier.js index 9b7c25419..557c8f557 100644 --- a/src/ast/identifier.js +++ b/src/ast/identifier.js @@ -11,16 +11,16 @@ const KIND = "identifier"; /** * Defines an identifier node * @constructor Identifier + * @memberOf module:php-parser * @extends {Node} * @property {string} name */ -const Identifier = Node.extends(KIND, function Identifier( - name, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.name = name; -}); +const Identifier = Node.extends( + KIND, + function Identifier(name, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.name = name; + }, +); module.exports = Identifier; diff --git a/src/ast/if.js b/src/ast/if.js index 780e41554..c04b61246 100644 --- a/src/ast/if.js +++ b/src/ast/if.js @@ -11,23 +11,20 @@ const KIND = "if"; /** * Defines a if statement * @constructor If + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} test * @property {Block} body * @property {Block|If|null} alternate * @property {boolean} shortForm */ -module.exports = Statement.extends(KIND, function If( - test, - body, - alternate, - shortForm, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; - this.alternate = alternate; - this.shortForm = shortForm; -}); +module.exports = Statement.extends( + KIND, + function If(test, body, alternate, shortForm, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.test = test; + this.body = body; + this.alternate = alternate; + this.shortForm = shortForm; + }, +); diff --git a/src/ast/include.js b/src/ast/include.js index 10e19ee00..a6312cda1 100644 --- a/src/ast/include.js +++ b/src/ast/include.js @@ -11,20 +11,18 @@ const KIND = "include"; /** * Defines system include call * @constructor Include + * @memberOf module:php-parser * @extends {Expression} * @property {Node} target * @property {boolean} once * @property {boolean} require */ -module.exports = Expression.extends(KIND, function Include( - once, - require, - target, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.once = once; - this.require = require; - this.target = target; -}); +module.exports = Expression.extends( + KIND, + function Include(once, require, target, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.once = once; + this.require = require; + this.target = target; + }, +); diff --git a/src/ast/inline.js b/src/ast/inline.js index 2aa857520..822ab0698 100644 --- a/src/ast/inline.js +++ b/src/ast/inline.js @@ -11,13 +11,13 @@ const KIND = "inline"; /** * Defines inline html output (treated as echo output) * @constructor Inline + * @memberOf module:php-parser * @extends {Literal} + * @property {string} value */ -module.exports = Literal.extends(KIND, function Inline( - value, - raw, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); +module.exports = Literal.extends( + KIND, + function Inline(value, raw, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + }, +); diff --git a/src/ast/interface.js b/src/ast/interface.js index b86eddea7..fcdd3f833 100644 --- a/src/ast/interface.js +++ b/src/ast/interface.js @@ -11,18 +11,18 @@ const KIND = "interface"; /** * An interface definition * @constructor Interface + * @memberOf module:php-parser * @extends {Declaration} * @property {Identifier[]} extends * @property {Declaration[]} body + * @property {AttrGroup[]} attrGroups */ -module.exports = Declaration.extends(KIND, function Interface( - name, - ext, - body, - docs, - location -) { - Declaration.apply(this, [KIND, name, docs, location]); - this.extends = ext; - this.body = body; -}); +module.exports = Declaration.extends( + KIND, + function Interface(name, ext, body, attrGroups, docs, location) { + Declaration.apply(this, [KIND, name, docs, location]); + this.extends = ext; + this.body = body; + this.attrGroups = attrGroups; + }, +); diff --git a/src/ast/intersectiontype.js b/src/ast/intersectiontype.js new file mode 100644 index 000000000..0a316d950 --- /dev/null +++ b/src/ast/intersectiontype.js @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Declaration = require("./declaration"); +const KIND = "intersectiontype"; + +/** + * A union of types + * @memberOf module:php-parser + * @constructor IntersectionType + * @extends {Declaration} + * @property {TypeReference[]} types + */ +module.exports = Declaration.extends( + KIND, + function IntersectionType(types, docs, location) { + Declaration.apply(this, [KIND, null, docs, location]); + this.types = types; + }, +); diff --git a/src/ast/isset.js b/src/ast/isset.js index d66d62d13..9ea1e2a5d 100644 --- a/src/ast/isset.js +++ b/src/ast/isset.js @@ -11,13 +11,13 @@ const KIND = "isset"; /** * Defines an isset call * @constructor Isset + * @memberOf module:php-parser * @extends {Expression} */ -module.exports = Expression.extends(KIND, function Isset( - variables, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.variables = variables; -}); +module.exports = Expression.extends( + KIND, + function Isset(variables, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.variables = variables; + }, +); diff --git a/src/ast/label.js b/src/ast/label.js index 6acc239c0..c1e630413 100644 --- a/src/ast/label.js +++ b/src/ast/label.js @@ -11,6 +11,7 @@ const KIND = "label"; /** * A label statement (referenced by goto) * @constructor Label + * @memberOf module:php-parser * @extends {Statement} * @property {String} name */ diff --git a/src/ast/list.js b/src/ast/list.js index 20d93fb1f..efe7ef5c4 100644 --- a/src/ast/list.js +++ b/src/ast/list.js @@ -11,16 +11,16 @@ const KIND = "list"; /** * Defines list assignment * @constructor List + * @memberOf module:php-parser * @extends {Expression} * @property {boolean} shortForm + * @property {Entry[]} items */ -module.exports = Expression.extends(KIND, function List( - items, - shortForm, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.items = items; - this.shortForm = shortForm; -}); +module.exports = Expression.extends( + KIND, + function List(items, shortForm, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.items = items; + this.shortForm = shortForm; + }, +); diff --git a/src/ast/literal.js b/src/ast/literal.js index 67156f546..fcb849e06 100644 --- a/src/ast/literal.js +++ b/src/ast/literal.js @@ -11,20 +11,18 @@ const KIND = "literal"; /** * Defines an array structure * @constructor Literal + * @memberOf module:php-parser * @extends {Expression} * @property {string} raw - * @property {Node|string|number|boolean|null} value + * @property {EncapsedPart[]|Node|string|number|boolean|null} value */ -module.exports = Expression.extends(KIND, function Literal( - kind, - value, - raw, - docs, - location -) { - Expression.apply(this, [kind || KIND, docs, location]); - this.value = value; - if (raw) { - this.raw = raw; - } -}); +module.exports = Expression.extends( + KIND, + function Literal(kind, value, raw, docs, location) { + Expression.apply(this, [kind || KIND, docs, location]); + this.value = value; + if (raw) { + this.raw = raw; + } + }, +); diff --git a/src/ast/location.js b/src/ast/location.js index 4015c23fe..65a975e89 100644 --- a/src/ast/location.js +++ b/src/ast/location.js @@ -8,7 +8,8 @@ /** * Defines the location of the node (with it's source contents as string) * @constructor Location - * @property {String|null} source + * @memberOf module:php-parser + * @property {string|null} source * @property {Position} start * @property {Position} end */ diff --git a/src/ast/lookup.js b/src/ast/lookup.js index d91e036b6..e0bf88a59 100644 --- a/src/ast/lookup.js +++ b/src/ast/lookup.js @@ -11,18 +11,16 @@ const KIND = "lookup"; /** * Lookup on an offset in the specified object * @constructor Lookup + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} what * @property {Expression} offset */ -module.exports = Expr.extends(KIND, function Lookup( - kind, - what, - offset, - docs, - location -) { - Expr.apply(this, [kind || KIND, docs, location]); - this.what = what; - this.offset = offset; -}); +module.exports = Expr.extends( + KIND, + function Lookup(kind, what, offset, docs, location) { + Expr.apply(this, [kind || KIND, docs, location]); + this.what = what; + this.offset = offset; + }, +); diff --git a/src/ast/magic.js b/src/ast/magic.js index 74259e942..2ff5511cd 100644 --- a/src/ast/magic.js +++ b/src/ast/magic.js @@ -11,13 +11,12 @@ const KIND = "magic"; /** * Defines magic constant * @constructor Magic + * @memberOf module:php-parser * @extends {Literal} */ -module.exports = Literal.extends(KIND, function Magic( - value, - raw, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); +module.exports = Literal.extends( + KIND, + function Magic(value, raw, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + }, +); diff --git a/src/ast/match.js b/src/ast/match.js new file mode 100644 index 000000000..ab76fe85a --- /dev/null +++ b/src/ast/match.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Expression = require("./expression"); +const KIND = "match"; + +/** + * Defines a match expression + * @memberOf module:php-parser + * @constructor Match + * @extends {Expression} + * @property {Expression} cond Condition expression to match against + * @property {MatchArm[]} arms Arms for comparison + */ +module.exports = Expression.extends( + KIND, + function Match(cond, arms, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.cond = cond; + this.arms = arms; + }, +); diff --git a/src/ast/matcharm.js b/src/ast/matcharm.js new file mode 100644 index 000000000..b8aea6a2d --- /dev/null +++ b/src/ast/matcharm.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Expression = require("./expression"); +const KIND = "matcharm"; + +/** + * An array entry - see [Array](#array) + * @memberOf module:php-parser + * @constructor MatchArm + * @extends {Expression} + * @property {Expression[]|null} conds The match condition expression list - null indicates default arm + * @property {Expression} body The return value expression + */ +module.exports = Expression.extends( + KIND, + function MatchArm(conds, body, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.conds = conds; + this.body = body; + }, +); diff --git a/src/ast/method.js b/src/ast/method.js index e5127ce8a..727db188a 100644 --- a/src/ast/method.js +++ b/src/ast/method.js @@ -5,19 +5,20 @@ */ "use strict"; -const _Function = require("./function"); +const Function_ = require("./function"); const KIND = "method"; /** * Defines a class/interface/trait method * @constructor Method - * @extends {_Function} + * @memberOf module:php-parser + * @extends {Function} * @property {boolean} isAbstract * @property {boolean} isFinal * @property {boolean} isStatic * @property {string} visibility */ -module.exports = _Function.extends(KIND, function Method() { - _Function.apply(this, arguments); +module.exports = Function_.extends(KIND, function Method() { + Function_.apply(this, arguments); this.kind = KIND; }); diff --git a/src/ast/name.js b/src/ast/name.js index 874b4dd87..ae7ffcb21 100644 --- a/src/ast/name.js +++ b/src/ast/name.js @@ -11,49 +11,44 @@ const KIND = "name"; /** * Defines a class reference node * @constructor Name + * @memberOf module:php-parser * @extends {Reference} * @property {string} name * @property {string} resolution */ -const Name = Reference.extends(KIND, function Name( - name, - isRelative, - docs, - location -) { - Reference.apply(this, [KIND, docs, location]); - if (isRelative) { - this.resolution = Name.RELATIVE_NAME; - } else if (name.length === 1) { - this.resolution = Name.UNQUALIFIED_NAME; - } else if (!name[0]) { - this.resolution = Name.FULL_QUALIFIED_NAME; - } else { - this.resolution = Name.QUALIFIED_NAME; - } - this.name = name.join("\\"); -}); +const Name = Reference.extends( + KIND, + function Name(name, resolution, docs, location) { + Reference.apply(this, [KIND, docs, location]); + this.name = name.replace(/\\$/, ""); + this.resolution = resolution; + }, +); /** * This is an identifier without a namespace separator, such as Foo - * @constant {String} UNQUALIFIED_NAME + * @constant {String} Name#UNQUALIFIED_NAME + * @memberOf module:php-parser */ Name.UNQUALIFIED_NAME = "uqn"; /** * This is an identifier with a namespace separator, such as Foo\Bar - * @constant {String} QUALIFIED_NAME + * @constant {String} Name#QUALIFIED_NAME + * @memberOf module:php-parser */ Name.QUALIFIED_NAME = "qn"; /** * This is an identifier with a namespace separator that begins with * a namespace separator, such as \Foo\Bar. The namespace \Foo is also * a fully qualified name. - * @constant {String} FULL_QUALIFIED_NAME + * @constant {String} Name#FULL_QUALIFIED_NAME + * @memberOf module:php-parser */ Name.FULL_QUALIFIED_NAME = "fqn"; /** * This is an identifier starting with namespace, such as namespace\Foo\Bar. - * @constant {String} RELATIVE_NAME + * @constant {String} Name#RELATIVE_NAME + * @memberOf module:php-parser */ Name.RELATIVE_NAME = "rn"; diff --git a/src/ast/namedargument.js b/src/ast/namedargument.js new file mode 100644 index 000000000..63e35b2d0 --- /dev/null +++ b/src/ast/namedargument.js @@ -0,0 +1,27 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Expression = require("./expression"); +const KIND = "namedargument"; + +/** + * Named arguments. + * @memberOf module:php-parser + * @constructor namedargument + * @extends {Expression} + * @property {String} name + * @property {Expression} value + * @see https://www.php.net/manual/en/functions.arguments.php#functions.named-arguments + */ +module.exports = Expression.extends( + KIND, + function namedargument(name, value, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.name = name; + this.value = value; + }, +); diff --git a/src/ast/namespace.js b/src/ast/namespace.js index ea9f52e58..60b72086c 100644 --- a/src/ast/namespace.js +++ b/src/ast/namespace.js @@ -11,18 +11,16 @@ const KIND = "namespace"; /** * The main program node * @constructor Namespace + * @memberOf module:php-parser * @extends {Block} - * @property {String} name - * @property {Boolean} withBrackets + * @property {string} name + * @property {boolean} withBrackets */ -module.exports = Block.extends(KIND, function Namespace( - name, - children, - withBrackets, - docs, - location -) { - Block.apply(this, [KIND, children, docs, location]); - this.name = name; - this.withBrackets = withBrackets || false; -}); +module.exports = Block.extends( + KIND, + function Namespace(name, children, withBrackets, docs, location) { + Block.apply(this, [KIND, children, docs, location]); + this.name = name; + this.withBrackets = withBrackets || false; + }, +); diff --git a/src/ast/new.js b/src/ast/new.js index 79b23fee6..554a21aa3 100644 --- a/src/ast/new.js +++ b/src/ast/new.js @@ -11,17 +11,16 @@ const KIND = "new"; /** * Creates a new instance of the specified class * @constructor New + * @memberOf module:php-parser * @extends {Expression} * @property {Identifier|Variable|Class} what - * @property {Arguments[]} arguments + * @property {Variable[]} arguments */ -module.exports = Expression.extends(KIND, function New( - what, - args, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; - this.arguments = args; -}); +module.exports = Expression.extends( + KIND, + function New(what, args, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.what = what; + this.arguments = args; + }, +); diff --git a/src/ast/node.js b/src/ast/node.js index a77fe61e7..111ae757d 100644 --- a/src/ast/node.js +++ b/src/ast/node.js @@ -8,10 +8,11 @@ /** * A generic AST node * @constructor Node + * @memberOf module:php-parser * @property {Location|null} loc - * @property {Comment[]} leadingComments - * @property {Comment[]?} trailingComments - * @property {String} kind + * @property {CommentBlock[]|Comment[]|null} leadingComments + * @property {CommentBlock[]|Comment[]|null} trailingComments + * @property {string} kind */ const Node = function Node(kind, docs, location) { this.kind = kind; @@ -25,6 +26,8 @@ const Node = function Node(kind, docs, location) { /** * Attach comments to current node + * @function Node#setTrailingComments + * @memberOf module:php-parser * @param {*} docs */ Node.prototype.setTrailingComments = function (docs) { @@ -33,18 +36,21 @@ Node.prototype.setTrailingComments = function (docs) { /** * Destroying an unused node + * @function Node#destroy + * @memberOf module:php-parser */ Node.prototype.destroy = function (node) { if (!node) { + /* istanbul ignore next */ throw new Error( - "Node already initialized, you must swap with another node" + "Node already initialized, you must swap with another node", ); } if (this.leadingComments) { if (node.leadingComments) { node.leadingComments = Array.concat( this.leadingComments, - node.leadingComments + node.leadingComments, ); } else { node.leadingComments = this.leadingComments; @@ -54,7 +60,7 @@ Node.prototype.destroy = function (node) { if (node.trailingComments) { node.trailingComments = Array.concat( this.trailingComments, - node.trailingComments + node.trailingComments, ); } else { node.trailingComments = this.trailingComments; @@ -65,6 +71,8 @@ Node.prototype.destroy = function (node) { /** * Includes current token position of the parser + * @function Node#includeToken + * @memberOf module:php-parser * @param {*} parser */ Node.prototype.includeToken = function (parser) { @@ -77,7 +85,7 @@ Node.prototype.includeToken = function (parser) { if (parser.ast.withSource) { this.loc.source = parser.lexer._input.substring( this.loc.start.offset, - parser.lexer.offset + parser.lexer.offset, ); } } @@ -86,7 +94,9 @@ Node.prototype.includeToken = function (parser) { /** * Helper for extending the Node class - * @param {String} type + * @function Node.extends + * @memberOf module:php-parser + * @param {string} type * @param {Function} constructor * @return {Function} */ diff --git a/src/ast/noop.js b/src/ast/noop.js index 0b512b936..f9d9e1ef0 100644 --- a/src/ast/noop.js +++ b/src/ast/noop.js @@ -12,6 +12,7 @@ const KIND = "noop"; * Ignore this node, it implies a no operation block, for example : * [$foo, $bar, /* here a noop node * /] * @constructor Noop + * @memberOf module:php-parser * @extends {Node} */ module.exports = Node.extends(KIND, function Noop(docs, location) { diff --git a/src/ast/nowdoc.js b/src/ast/nowdoc.js index 47951b00a..726a3f954 100644 --- a/src/ast/nowdoc.js +++ b/src/ast/nowdoc.js @@ -11,17 +11,16 @@ const KIND = "nowdoc"; /** * Defines a nowdoc string * @constructor NowDoc + * @memberOf module:php-parser * @extends {Literal} - * @property {String} label - * @property {String} raw + * @property {string} label + * @property {string} raw + * @property {string} value */ -module.exports = Literal.extends(KIND, function Nowdoc( - value, - raw, - label, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); - this.label = label; -}); +module.exports = Literal.extends( + KIND, + function Nowdoc(value, raw, label, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + this.label = label; + }, +); diff --git a/src/ast/nullkeyword.js b/src/ast/nullkeyword.js index 5640a179d..cc6bf5f4d 100644 --- a/src/ast/nullkeyword.js +++ b/src/ast/nullkeyword.js @@ -11,6 +11,7 @@ const KIND = "nullkeyword"; /** * Represents the null keyword * @constructor NullKeyword + * @memberOf module:php-parser * @extends {Node} */ module.exports = Node.extends(KIND, function NullKeyword(raw, docs, location) { diff --git a/src/ast/nullsafepropertylookup.js b/src/ast/nullsafepropertylookup.js new file mode 100644 index 000000000..16003ec51 --- /dev/null +++ b/src/ast/nullsafepropertylookup.js @@ -0,0 +1,22 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Lookup = require("./lookup"); +const KIND = "nullsafepropertylookup"; + +/** + * Lookup to an object property + * @memberOf module:php-parser + * @constructor NullSafePropertyLookup + * @extends {Lookup} + */ +module.exports = Lookup.extends( + KIND, + function NullSafePropertyLookup(what, offset, docs, location) { + Lookup.apply(this, [KIND, what, offset, docs, location]); + }, +); diff --git a/src/ast/number.js b/src/ast/number.js index ffd18211d..0c1f9d4ee 100644 --- a/src/ast/number.js +++ b/src/ast/number.js @@ -11,13 +11,13 @@ const KIND = "number"; /** * Defines a numeric value * @constructor Number + * @memberOf module:php-parser * @extends {Literal} + * @property {number} value */ -module.exports = Literal.extends(KIND, function Number( - value, - raw, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); -}); +module.exports = Literal.extends( + KIND, + function Number(value, raw, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + }, +); diff --git a/src/ast/offsetlookup.js b/src/ast/offsetlookup.js index 6a842e066..a9318855c 100644 --- a/src/ast/offsetlookup.js +++ b/src/ast/offsetlookup.js @@ -11,13 +11,12 @@ const KIND = "offsetlookup"; /** * Lookup on an offset in an array * @constructor OffsetLookup + * @memberOf module:php-parser * @extends {Lookup} */ -module.exports = Lookup.extends(KIND, function OffsetLookup( - what, - offset, - docs, - location -) { - Lookup.apply(this, [KIND, what, offset, docs, location]); -}); +module.exports = Lookup.extends( + KIND, + function OffsetLookup(what, offset, docs, location) { + Lookup.apply(this, [KIND, what, offset, docs, location]); + }, +); diff --git a/src/ast/operation.js b/src/ast/operation.js index 852fbd848..6e3eda9ea 100644 --- a/src/ast/operation.js +++ b/src/ast/operation.js @@ -11,6 +11,7 @@ const KIND = "operation"; /** * Defines binary operations * @constructor Operation + * @memberOf module:php-parser * @extends {Expression} */ module.exports = Expr.extends(KIND, function Operation(kind, docs, location) { diff --git a/src/ast/parameter.js b/src/ast/parameter.js index 6a1fe9270..7e417d528 100644 --- a/src/ast/parameter.js +++ b/src/ast/parameter.js @@ -8,30 +8,54 @@ const Declaration = require("./declaration"); const KIND = "parameter"; +/** + * @memberOf module:php-parser + * @typedef {1} MODIFIER_PUBLIC + **/ +/** + * @memberOf module:php-parser + * @typedef {2} MODIFIER_PROTECTED + **/ +/** + * @memberOf module:php-parser + * @typedef {4} MODIFIER_PRIVATE + **/ /** * Defines a function parameter * @constructor Parameter + * @memberOf module:php-parser * @extends {Declaration} * @property {Identifier|null} type * @property {Node|null} value * @property {boolean} byref * @property {boolean} variadic + * @property {boolean} readonly * @property {boolean} nullable + * @property {AttrGroup[]} attrGroups + * @property {MODIFIER_PUBLIC|MODIFIER_PROTECTED|MODIFIER_PRIVATE} flags */ -module.exports = Declaration.extends(KIND, function Parameter( - name, - type, - value, - isRef, - isVariadic, - nullable, - docs, - location -) { - Declaration.apply(this, [KIND, name, docs, location]); - this.value = value; - this.type = type; - this.byref = isRef; - this.variadic = isVariadic; - this.nullable = nullable; -}); +module.exports = Declaration.extends( + KIND, + function Parameter( + name, + type, + value, + isRef, + isVariadic, + readonly, + nullable, + flags, + docs, + location, + ) { + Declaration.apply(this, [KIND, name, docs, location]); + this.value = value; + this.type = type; + this.byref = isRef; + this.variadic = isVariadic; + this.readonly = readonly; + this.nullable = nullable; + this.flags = flags || 0; + this.attrGroups = []; + }, +); diff --git a/src/ast/parentreference.js b/src/ast/parentreference.js index 357b4fefa..0ba489aa0 100644 --- a/src/ast/parentreference.js +++ b/src/ast/parentreference.js @@ -11,14 +11,14 @@ const KIND = "parentreference"; /** * Defines a class reference node * @constructor ParentReference + * @memberOf module:php-parser * @extends {Reference} */ -const ParentReference = Reference.extends(KIND, function ParentReference( - raw, - docs, - location -) { - Reference.apply(this, [KIND, docs, location]); - this.raw = raw; -}); +const ParentReference = Reference.extends( + KIND, + function ParentReference(raw, docs, location) { + Reference.apply(this, [KIND, docs, location]); + this.raw = raw; + }, +); module.exports = ParentReference; diff --git a/src/ast/position.js b/src/ast/position.js index b802df37e..6e4f123c4 100644 --- a/src/ast/position.js +++ b/src/ast/position.js @@ -8,9 +8,10 @@ /** * Each Position object consists of a line number (1-indexed) and a column number (0-indexed): * @constructor Position - * @property {Number} line - * @property {Number} column - * @property {Number} offset + * @memberOf module:php-parser + * @property {number} line + * @property {number} column + * @property {number} offset */ const Position = function (line, column, offset) { this.line = line; diff --git a/src/ast/post.js b/src/ast/post.js index 70aa72f3b..56b48b937 100644 --- a/src/ast/post.js +++ b/src/ast/post.js @@ -11,17 +11,16 @@ const KIND = "post"; /** * Defines a post operation `$i++` or `$i--` * @constructor Post + * @memberOf module:php-parser * @extends {Operation} * @property {String} type * @property {Variable} what */ -module.exports = Operation.extends(KIND, function Post( - type, - what, - docs, - location -) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.what = what; -}); +module.exports = Operation.extends( + KIND, + function Post(type, what, docs, location) { + Operation.apply(this, [KIND, docs, location]); + this.type = type; + this.what = what; + }, +); diff --git a/src/ast/pre.js b/src/ast/pre.js index 7ef0efe5f..58b84a710 100644 --- a/src/ast/pre.js +++ b/src/ast/pre.js @@ -11,17 +11,16 @@ const KIND = "pre"; /** * Defines a pre operation `++$i` or `--$i` * @constructor Pre + * @memberOf module:php-parser * @extends {Operation} * @property {String} type * @property {Variable} what */ -module.exports = Operation.extends(KIND, function Pre( - type, - what, - docs, - location -) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.what = what; -}); +module.exports = Operation.extends( + KIND, + function Pre(type, what, docs, location) { + Operation.apply(this, [KIND, docs, location]); + this.type = type; + this.what = what; + }, +); diff --git a/src/ast/print.js b/src/ast/print.js index e329cefee..3455263c9 100644 --- a/src/ast/print.js +++ b/src/ast/print.js @@ -11,13 +11,13 @@ const KIND = "print"; /** * Outputs * @constructor Print + * @memberOf module:php-parser * @extends {Expression} */ -module.exports = Expression.extends(KIND, function Print( - expression, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.expression = expression; -}); +module.exports = Expression.extends( + KIND, + function Print(expression, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.expression = expression; + }, +); diff --git a/src/ast/program.js b/src/ast/program.js index 3d921a162..5ea3d764f 100644 --- a/src/ast/program.js +++ b/src/ast/program.js @@ -11,25 +11,22 @@ const KIND = "program"; /** * The main program node * @constructor Program + * @memberOf module:php-parser * @extends {Block} * @property {Error[]} errors - * @property {Doc[]?} comments - * @property {String[]?} tokens + * @property {Comment[]|null} comments + * @property {String[]|null} tokens */ -module.exports = Block.extends(KIND, function Program( - children, - errors, - comments, - tokens, - docs, - location -) { - Block.apply(this, [KIND, children, docs, location]); - this.errors = errors; - if (comments) { - this.comments = comments; - } - if (tokens) { - this.tokens = tokens; - } -}); +module.exports = Block.extends( + KIND, + function Program(children, errors, comments, tokens, docs, location) { + Block.apply(this, [KIND, children, docs, location]); + this.errors = errors; + if (comments) { + this.comments = comments; + } + if (tokens) { + this.tokens = tokens; + } + }, +); diff --git a/src/ast/property.js b/src/ast/property.js index 073ff4369..ad01986ce 100644 --- a/src/ast/property.js +++ b/src/ast/property.js @@ -11,23 +11,33 @@ const KIND = "property"; /** * Defines a class property * @constructor Property + * @memberOf module:php-parser * @extends {Statement} * @property {string} name * @property {Node|null} value + * @property {boolean} readonly * @property {boolean} nullable * @property {Identifier|Array|null} type + * @property {AttrGroup[]} attrGroups */ -module.exports = Statement.extends(KIND, function Property( - name, - value, - nullable, - type, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; - this.value = value; - this.nullable = nullable; - this.type = type; -}); +module.exports = Statement.extends( + KIND, + function Property( + name, + value, + readonly, + nullable, + type, + attrGroups, + docs, + location, + ) { + Statement.apply(this, [KIND, docs, location]); + this.name = name; + this.value = value; + this.readonly = readonly; + this.nullable = nullable; + this.type = type; + this.attrGroups = attrGroups; + }, +); diff --git a/src/ast/propertylookup.js b/src/ast/propertylookup.js index 21a966dec..ef2b14a80 100644 --- a/src/ast/propertylookup.js +++ b/src/ast/propertylookup.js @@ -10,14 +10,13 @@ const KIND = "propertylookup"; /** * Lookup to an object property + * @memberOf module:php-parser * @constructor PropertyLookup * @extends {Lookup} */ -module.exports = Lookup.extends(KIND, function PropertyLookup( - what, - offset, - docs, - location -) { - Lookup.apply(this, [KIND, what, offset, docs, location]); -}); +module.exports = Lookup.extends( + KIND, + function PropertyLookup(what, offset, docs, location) { + Lookup.apply(this, [KIND, what, offset, docs, location]); + }, +); diff --git a/src/ast/propertystatement.js b/src/ast/propertystatement.js index c7fc0cb70..271c8e6a8 100644 --- a/src/ast/propertystatement.js +++ b/src/ast/propertystatement.js @@ -16,24 +16,26 @@ const IS_PRIVATE = "private"; /** * Declares a properties into the current scope * @constructor PropertyStatement + * @memberOf module:php-parser * @extends {Statement} * @property {Property[]} properties + * @property {string|null} visibility + * @property {boolean} isStatic */ -const PropertyStatement = Statement.extends(KIND, function PropertyStatement( - kind, - properties, - flags, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.properties = properties; - this.parseFlags(flags); -}); +const PropertyStatement = Statement.extends( + KIND, + function PropertyStatement(kind, properties, flags, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.properties = properties; + this.parseFlags(flags); + }, +); /** * Generic flags parser - * @param {Integer[]} flags + * @function PropertyStatement#parseFlags + * @memberOf module:php-parser + * @param {Array} flags * @return {void} */ PropertyStatement.prototype.parseFlags = function (flags) { diff --git a/src/ast/reference.js b/src/ast/reference.js index bd86b3837..e000937ad 100644 --- a/src/ast/reference.js +++ b/src/ast/reference.js @@ -11,6 +11,7 @@ const KIND = "reference"; /** * Defines a reference node * @constructor Reference + * @memberOf module:php-parser * @extends {Node} */ const Reference = Node.extends(KIND, function Reference(kind, docs, location) { diff --git a/src/ast/retif.js b/src/ast/retif.js index bc874d30d..70a044f60 100644 --- a/src/ast/retif.js +++ b/src/ast/retif.js @@ -11,20 +11,18 @@ const KIND = "retif"; /** * Defines a short if statement that returns a value * @constructor RetIf + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} test * @property {Expression} trueExpr * @property {Expression} falseExpr */ -module.exports = Expression.extends(KIND, function RetIf( - test, - trueExpr, - falseExpr, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.test = test; - this.trueExpr = trueExpr; - this.falseExpr = falseExpr; -}); +module.exports = Expression.extends( + KIND, + function RetIf(test, trueExpr, falseExpr, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.test = test; + this.trueExpr = trueExpr; + this.falseExpr = falseExpr; + }, +); diff --git a/src/ast/return.js b/src/ast/return.js index b320eaf49..c7c049baa 100644 --- a/src/ast/return.js +++ b/src/ast/return.js @@ -11,6 +11,7 @@ const KIND = "return"; /** * A continue statement * @constructor Return + * @memberOf module:php-parser * @extends {Statement} * @property {Expression|null} expr */ diff --git a/src/ast/selfreference.js b/src/ast/selfreference.js index 51ff0a3ea..0259e9752 100644 --- a/src/ast/selfreference.js +++ b/src/ast/selfreference.js @@ -11,14 +11,14 @@ const KIND = "selfreference"; /** * Defines a class reference node * @constructor SelfReference + * @memberOf module:php-parser * @extends {Reference} */ -const SelfReference = Reference.extends(KIND, function SelfReference( - raw, - docs, - location -) { - Reference.apply(this, [KIND, docs, location]); - this.raw = raw; -}); +const SelfReference = Reference.extends( + KIND, + function SelfReference(raw, docs, location) { + Reference.apply(this, [KIND, docs, location]); + this.raw = raw; + }, +); module.exports = SelfReference; diff --git a/src/ast/silent.js b/src/ast/silent.js index 91b15ef7e..8bf60defc 100644 --- a/src/ast/silent.js +++ b/src/ast/silent.js @@ -11,14 +11,14 @@ const KIND = "silent"; /** * Avoids to show/log warnings & notices from the inner expression * @constructor Silent + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} expr */ -module.exports = Expression.extends(KIND, function Silent( - expr, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.expr = expr; -}); +module.exports = Expression.extends( + KIND, + function Silent(expr, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.expr = expr; + }, +); diff --git a/src/ast/statement.js b/src/ast/statement.js index c4c578fc7..6f25bd8ee 100644 --- a/src/ast/statement.js +++ b/src/ast/statement.js @@ -11,6 +11,7 @@ const KIND = "statement"; /** * Any statement. * @constructor Statement + * @memberOf module:php-parser * @extends {Node} */ module.exports = Node.extends(KIND, function Statement(kind, docs, location) { diff --git a/src/ast/static.js b/src/ast/static.js index 7c456b2a0..33f00145a 100644 --- a/src/ast/static.js +++ b/src/ast/static.js @@ -11,14 +11,14 @@ const KIND = "static"; /** * Declares a static variable into the current scope * @constructor Static + * @memberOf module:php-parser * @extends {Statement} * @property {StaticVariable[]} variables */ -module.exports = Statement.extends(KIND, function Static( - variables, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.variables = variables; -}); +module.exports = Statement.extends( + KIND, + function Static(variables, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.variables = variables; + }, +); diff --git a/src/ast/staticlookup.js b/src/ast/staticlookup.js index cf9407d9f..5bbd2d594 100644 --- a/src/ast/staticlookup.js +++ b/src/ast/staticlookup.js @@ -11,13 +11,12 @@ const KIND = "staticlookup"; /** * Lookup to a static property * @constructor StaticLookup + * @memberOf module:php-parser * @extends {Lookup} */ -module.exports = Lookup.extends(KIND, function StaticLookup( - what, - offset, - docs, - location -) { - Lookup.apply(this, [KIND, what, offset, docs, location]); -}); +module.exports = Lookup.extends( + KIND, + function StaticLookup(what, offset, docs, location) { + Lookup.apply(this, [KIND, what, offset, docs, location]); + }, +); diff --git a/src/ast/staticreference.js b/src/ast/staticreference.js index 310c4d838..c3b0755f2 100644 --- a/src/ast/staticreference.js +++ b/src/ast/staticreference.js @@ -11,14 +11,14 @@ const KIND = "staticreference"; /** * Defines a class reference node * @constructor StaticReference + * @memberOf module:php-parser * @extends {Reference} */ -const StaticReference = Reference.extends(KIND, function StaticReference( - raw, - docs, - location -) { - Reference.apply(this, [KIND, docs, location]); - this.raw = raw; -}); +const StaticReference = Reference.extends( + KIND, + function StaticReference(raw, docs, location) { + Reference.apply(this, [KIND, docs, location]); + this.raw = raw; + }, +); module.exports = StaticReference; diff --git a/src/ast/staticvariable.js b/src/ast/staticvariable.js index 6fc4b9ace..2388c4f24 100644 --- a/src/ast/staticvariable.js +++ b/src/ast/staticvariable.js @@ -11,17 +11,16 @@ const KIND = "staticvariable"; /** * Defines a constant * @constructor StaticVariable + * @memberOf module:php-parser * @extends {Node} * @property {Variable} variable * @property {Node|string|number|boolean|null} defaultValue */ -module.exports = Node.extends(KIND, function StaticVariable( - variable, - defaultValue, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.variable = variable; - this.defaultValue = defaultValue; -}); +module.exports = Node.extends( + KIND, + function StaticVariable(variable, defaultValue, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.variable = variable; + this.defaultValue = defaultValue; + }, +); diff --git a/src/ast/string.js b/src/ast/string.js index dc739041a..c2c7423a1 100644 --- a/src/ast/string.js +++ b/src/ast/string.js @@ -9,22 +9,20 @@ const Literal = require("./literal"); const KIND = "string"; /** - * Defines a string (simple ou double quoted) - chars are already escaped + * Defines a string (simple or double quoted) - chars are already escaped * @constructor String + * @memberOf module:php-parser * @extends {Literal} * @property {boolean} unicode * @property {boolean} isDoubleQuote * @see {Encapsed} + * @property {string} value */ -module.exports = Literal.extends(KIND, function String( - isDoubleQuote, - value, - unicode, - raw, - docs, - location -) { - Literal.apply(this, [KIND, value, raw, docs, location]); - this.unicode = unicode; - this.isDoubleQuote = isDoubleQuote; -}); +module.exports = Literal.extends( + KIND, + function String(isDoubleQuote, value, unicode, raw, docs, location) { + Literal.apply(this, [KIND, value, raw, docs, location]); + this.unicode = unicode; + this.isDoubleQuote = isDoubleQuote; + }, +); diff --git a/src/ast/switch.js b/src/ast/switch.js index dc39a5376..6f48d2142 100644 --- a/src/ast/switch.js +++ b/src/ast/switch.js @@ -11,20 +11,18 @@ const KIND = "switch"; /** * Defines a switch statement * @constructor Switch + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} test * @property {Block} body * @property {boolean} shortForm */ -module.exports = Statement.extends(KIND, function Switch( - test, - body, - shortForm, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; - this.shortForm = shortForm; -}); +module.exports = Statement.extends( + KIND, + function Switch(test, body, shortForm, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.test = test; + this.body = body; + this.shortForm = shortForm; + }, +); diff --git a/src/ast/throw.js b/src/ast/throw.js index cb617df0d..36c51f88e 100644 --- a/src/ast/throw.js +++ b/src/ast/throw.js @@ -11,6 +11,7 @@ const KIND = "throw"; /** * Defines a throw statement * @constructor Throw + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} what */ diff --git a/src/ast/trait.js b/src/ast/trait.js index 3d0763b52..62151e911 100644 --- a/src/ast/trait.js +++ b/src/ast/trait.js @@ -11,15 +11,14 @@ const KIND = "trait"; /** * A trait definition * @constructor Trait + * @memberOf module:php-parser * @extends {Declaration} * @property {Declaration[]} body */ -module.exports = Declaration.extends(KIND, function Trait( - name, - body, - docs, - location -) { - Declaration.apply(this, [KIND, name, docs, location]); - this.body = body; -}); +module.exports = Declaration.extends( + KIND, + function Trait(name, body, docs, location) { + Declaration.apply(this, [KIND, name, docs, location]); + this.body = body; + }, +); diff --git a/src/ast/traitalias.js b/src/ast/traitalias.js index 32214375e..d6a9ecdf0 100644 --- a/src/ast/traitalias.js +++ b/src/ast/traitalias.js @@ -16,32 +16,29 @@ const IS_PRIVATE = "private"; /** * Defines a trait alias * @constructor TraitAlias + * @memberOf module:php-parser * @extends {Node} * @property {Identifier|null} trait * @property {Identifier} method * @property {Identifier|null} as * @property {string|null} visibility */ -module.exports = Node.extends(KIND, function TraitAlias( - trait, - method, - as, - flags, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.trait = trait; - this.method = method; - this.as = as; - this.visibility = IS_UNDEFINED; - if (flags) { - if (flags[0] === 0) { - this.visibility = IS_PUBLIC; - } else if (flags[0] === 1) { - this.visibility = IS_PROTECTED; - } else if (flags[0] === 2) { - this.visibility = IS_PRIVATE; +module.exports = Node.extends( + KIND, + function TraitAlias(trait, method, as, flags, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.trait = trait; + this.method = method; + this.as = as; + this.visibility = IS_UNDEFINED; + if (flags) { + if (flags[0] === 0) { + this.visibility = IS_PUBLIC; + } else if (flags[0] === 1) { + this.visibility = IS_PROTECTED; + } else if (flags[0] === 2) { + this.visibility = IS_PRIVATE; + } } - } -}); + }, +); diff --git a/src/ast/traitprecedence.js b/src/ast/traitprecedence.js index 945511a31..99ad43940 100644 --- a/src/ast/traitprecedence.js +++ b/src/ast/traitprecedence.js @@ -11,20 +11,18 @@ const KIND = "traitprecedence"; /** * Defines a trait alias * @constructor TraitPrecedence + * @memberOf module:php-parser * @extends {Node} * @property {Identifier|null} trait * @property {Identifier} method * @property {Identifier[]} instead */ -module.exports = Node.extends(KIND, function TraitPrecedence( - trait, - method, - instead, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.trait = trait; - this.method = method; - this.instead = instead; -}); +module.exports = Node.extends( + KIND, + function TraitPrecedence(trait, method, instead, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.trait = trait; + this.method = method; + this.instead = instead; + }, +); diff --git a/src/ast/traituse.js b/src/ast/traituse.js index 14fe02978..fc163dc57 100644 --- a/src/ast/traituse.js +++ b/src/ast/traituse.js @@ -11,17 +11,16 @@ const KIND = "traituse"; /** * Defines a trait usage * @constructor TraitUse + * @memberOf module:php-parser * @extends {Node} * @property {Identifier[]} traits * @property {Node[]|null} adaptations */ -module.exports = Node.extends(KIND, function TraitUse( - traits, - adaptations, - docs, - location -) { - Node.apply(this, [KIND, docs, location]); - this.traits = traits; - this.adaptations = adaptations; -}); +module.exports = Node.extends( + KIND, + function TraitUse(traits, adaptations, docs, location) { + Node.apply(this, [KIND, docs, location]); + this.traits = traits; + this.adaptations = adaptations; + }, +); diff --git a/src/ast/try.js b/src/ast/try.js index c3de1f311..9a97f0728 100644 --- a/src/ast/try.js +++ b/src/ast/try.js @@ -11,20 +11,18 @@ const KIND = "try"; /** * Defines a try statement * @constructor Try + * @memberOf module:php-parser * @extends {Statement} * @property {Block} body * @property {Catch[]} catches - * @property {Block} allways + * @property {Block} always */ -module.exports = Statement.extends(KIND, function Try( - body, - catches, - always, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.body = body; - this.catches = catches; - this.always = always; -}); +module.exports = Statement.extends( + KIND, + function Try(body, catches, always, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.body = body; + this.catches = catches; + this.always = always; + }, +); diff --git a/src/ast/typereference.js b/src/ast/typereference.js index 350c5c5a5..944f74665 100644 --- a/src/ast/typereference.js +++ b/src/ast/typereference.js @@ -11,19 +11,18 @@ const KIND = "typereference"; /** * Defines a class reference node * @constructor TypeReference + * @memberOf module:php-parser * @extends {Reference} * @property {string} name */ -const TypeReference = Reference.extends(KIND, function TypeReference( - name, - raw, - docs, - location -) { - Reference.apply(this, [KIND, docs, location]); - this.name = name; - this.raw = raw; -}); +const TypeReference = Reference.extends( + KIND, + function TypeReference(name, raw, docs, location) { + Reference.apply(this, [KIND, docs, location]); + this.name = name; + this.raw = raw; + }, +); TypeReference.types = [ "int", @@ -35,6 +34,7 @@ TypeReference.types = [ "callable", "iterable", "void", + "static", ]; module.exports = TypeReference; diff --git a/src/ast/unary.js b/src/ast/unary.js index cfcbd2aee..7d086c0a0 100644 --- a/src/ast/unary.js +++ b/src/ast/unary.js @@ -11,17 +11,16 @@ const KIND = "unary"; /** * Unary operations * @constructor Unary + * @memberOf module:php-parser * @extends {Operation} - * @property {String} type + * @property {string} type * @property {Expression} what */ -module.exports = Operation.extends(KIND, function Unary( - type, - what, - docs, - location -) { - Operation.apply(this, [KIND, docs, location]); - this.type = type; - this.what = what; -}); +module.exports = Operation.extends( + KIND, + function Unary(type, what, docs, location) { + Operation.apply(this, [KIND, docs, location]); + this.type = type; + this.what = what; + }, +); diff --git a/src/ast/uniontype.js b/src/ast/uniontype.js new file mode 100644 index 000000000..e4d2bc318 --- /dev/null +++ b/src/ast/uniontype.js @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Declaration = require("./declaration"); +const KIND = "uniontype"; + +/** + * A union of types + * @memberOf module:php-parser + * @constructor UnionType + * @extends {Declaration} + * @property {TypeReference[]} types + */ +module.exports = Declaration.extends( + KIND, + function UnionType(types, docs, location) { + Declaration.apply(this, [KIND, null, docs, location]); + this.types = types; + }, +); diff --git a/src/ast/unset.js b/src/ast/unset.js index db5b84840..36f110cc8 100644 --- a/src/ast/unset.js +++ b/src/ast/unset.js @@ -11,13 +11,13 @@ const KIND = "unset"; /** * Deletes references to a list of variables * @constructor Unset + * @memberOf module:php-parser * @extends {Statement} */ -module.exports = Statement.extends(KIND, function Unset( - variables, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.variables = variables; -}); +module.exports = Statement.extends( + KIND, + function Unset(variables, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.variables = variables; + }, +); diff --git a/src/ast/usegroup.js b/src/ast/usegroup.js index 0eeafd3d9..d00cfd74e 100644 --- a/src/ast/usegroup.js +++ b/src/ast/usegroup.js @@ -11,22 +11,20 @@ const KIND = "usegroup"; /** * Defines a use statement (with a list of use items) * @constructor UseGroup + * @memberOf module:php-parser * @extends {Statement} - * @property {String|null} name - * @property {String|null} type - Possible value : function, const + * @property {string|null} name + * @property {string|null} type - Possible value : function, const * @property {UseItem[]} item * @see {Namespace} * @see http://php.net/manual/en/language.namespaces.importing.php */ -module.exports = Statement.extends(KIND, function UseGroup( - name, - type, - items, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; - this.type = type; - this.items = items; -}); +module.exports = Statement.extends( + KIND, + function UseGroup(name, type, items, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.name = name; + this.type = type; + this.items = items; + }, +); diff --git a/src/ast/useitem.js b/src/ast/useitem.js index b1067fb37..17af88c4f 100644 --- a/src/ast/useitem.js +++ b/src/ast/useitem.js @@ -11,34 +11,34 @@ const KIND = "useitem"; /** * Defines a use statement (from namespace) * @constructor UseItem + * @memberOf module:php-parser * @extends {Statement} - * @property {String} name - * @property {String|null} type - Possible value : function, const + * @property {string} name + * @property {string|null} type - Possible value : function, const * @property {Identifier|null} alias * @see {Namespace} * @see http://php.net/manual/en/language.namespaces.importing.php */ -const UseItem = Statement.extends(KIND, function UseItem( - name, - alias, - type, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.name = name; - this.alias = alias; - this.type = type; -}); +const UseItem = Statement.extends( + KIND, + function UseItem(name, alias, type, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.name = name; + this.alias = alias; + this.type = type; + }, +); /** * Importing a constant - * @constant {String} TYPE_CONST + * @constant {string} UseItem#TYPE_CONST + * @memberOf module:php-parser */ UseItem.TYPE_CONST = "const"; /** * Importing a function - * @constant {String} TYPE_FUNC + * @constant {string} UseItem#TYPE_FUNC + * @memberOf module:php-parser */ UseItem.TYPE_FUNCTION = "function"; diff --git a/src/ast/variable.js b/src/ast/variable.js index bead291b2..cd6609036 100644 --- a/src/ast/variable.js +++ b/src/ast/variable.js @@ -12,6 +12,7 @@ const KIND = "variable"; * Any expression node. Since the left-hand side of an assignment may * be any expression in general, an expression can also be a pattern. * @constructor Variable + * @memberOf module:php-parser * @extends {Expression} * @example * // PHP code : @@ -22,16 +23,14 @@ const KIND = "variable"; * "name": "foo", * "curly": false * } - * @property {String|Node} name The variable name (can be a complex expression when the name is resolved dynamically) + * @property {string|Node} name The variable name (can be a complex expression when the name is resolved dynamically) * @property {boolean} curly Indicate if the name is defined between curlies, ex `${foo}` */ -module.exports = Expression.extends(KIND, function Variable( - name, - curly, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.name = name; - this.curly = curly || false; -}); +module.exports = Expression.extends( + KIND, + function Variable(name, curly, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.name = name; + this.curly = curly || false; + }, +); diff --git a/src/ast/variadic.js b/src/ast/variadic.js index 369ecbc26..c9783ae3f 100644 --- a/src/ast/variadic.js +++ b/src/ast/variadic.js @@ -10,16 +10,16 @@ const KIND = "variadic"; /** * Introduce a list of items into the arguments of the call - * @constructor variadic + * @constructor Variadic + * @memberOf module:php-parser * @extends {Expression} * @property {Array|Expression} what * @see https://wiki.php.net/rfc/argument_unpacking */ -module.exports = Expression.extends(KIND, function variadic( - what, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.what = what; -}); +module.exports = Expression.extends( + KIND, + function variadic(what, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.what = what; + }, +); diff --git a/src/ast/variadicplaceholder.js b/src/ast/variadicplaceholder.js new file mode 100644 index 000000000..4e1fe657d --- /dev/null +++ b/src/ast/variadicplaceholder.js @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +const Node = require("./node"); +const KIND = "variadicplaceholder"; + +/** + * Defines a variadic placeholder (the ellipsis in PHP 8.1+'s first-class callable syntax) + * @constructor VariadicPlaceholder + * @memberOf module:php-parser + * @extends {Node} + * @see {Namespace} + * @see http://php.net/manual/en/language.namespaces.importing.php + */ +module.exports = Node.extends( + KIND, + function VariadicPlaceholder(docs, location) { + Node.apply(this, [KIND, docs, location]); + }, +); diff --git a/src/ast/while.js b/src/ast/while.js index 5887ec950..d92972717 100644 --- a/src/ast/while.js +++ b/src/ast/while.js @@ -11,20 +11,18 @@ const KIND = "while"; /** * Defines a while statement * @constructor While + * @memberOf module:php-parser * @extends {Statement} * @property {Expression} test - * @property {Statement} body + * @property {Block | null} body * @property {boolean} shortForm */ -module.exports = Statement.extends(KIND, function While( - test, - body, - shortForm, - docs, - location -) { - Statement.apply(this, [KIND, docs, location]); - this.test = test; - this.body = body; - this.shortForm = shortForm; -}); +module.exports = Statement.extends( + KIND, + function While(test, body, shortForm, docs, location) { + Statement.apply(this, [KIND, docs, location]); + this.test = test; + this.body = body; + this.shortForm = shortForm; + }, +); diff --git a/src/ast/yield.js b/src/ast/yield.js index 5214d0a6f..4cd92e54c 100644 --- a/src/ast/yield.js +++ b/src/ast/yield.js @@ -11,18 +11,17 @@ const KIND = "yield"; /** * Defines a yield generator statement * @constructor Yield + * @memberOf module:php-parser * @extends {Expression} - * @property {Expression|Null} value - * @property {Expression|Null} key + * @property {Expression|null} value + * @property {Expression|null} key * @see http://php.net/manual/en/language.generators.syntax.php */ -module.exports = Expression.extends(KIND, function Yield( - value, - key, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.value = value; - this.key = key; -}); +module.exports = Expression.extends( + KIND, + function Yield(value, key, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.value = value; + this.key = key; + }, +); diff --git a/src/ast/yieldfrom.js b/src/ast/yieldfrom.js index b7dd53cc0..11cf8df97 100644 --- a/src/ast/yieldfrom.js +++ b/src/ast/yieldfrom.js @@ -11,15 +11,15 @@ const KIND = "yieldfrom"; /** * Defines a yield from generator statement * @constructor YieldFrom + * @memberOf module:php-parser * @extends {Expression} * @property {Expression} value * @see http://php.net/manual/en/language.generators.syntax.php */ -module.exports = Expression.extends(KIND, function YieldFrom( - value, - docs, - location -) { - Expression.apply(this, [KIND, docs, location]); - this.value = value; -}); +module.exports = Expression.extends( + KIND, + function YieldFrom(value, docs, location) { + Expression.apply(this, [KIND, docs, location]); + this.value = value; + }, +); diff --git a/src/index.js b/src/index.js index 24bd5c874..8e9b734d2 100644 --- a/src/index.js +++ b/src/index.js @@ -38,6 +38,7 @@ function combine(src, to) { * Initialise a new parser instance with the specified options * * @class + * @memberOf module:php-parser * @tutorial Engine * @example * var parser = require('php-parser'); @@ -66,7 +67,7 @@ function combine(src, to) { * @property {AST} ast * @property {Object} tokens */ -const engine = function (options) { +const Engine = function (options) { if (typeof this === "function") { return new this(options); } @@ -92,8 +93,8 @@ const engine = function (options) { } else if (typeof options.parser.version !== "number") { throw new Error("Expecting a number for version"); } - if (options.parser.version < 500 || options.parser.version > 704) { - throw new Error("Can only handle versions between 5.x to 7.x"); + if (options.parser.version < 500 || options.parser.version > 900) { + throw new Error("Can only handle versions between 5.x to 8.x"); } } } @@ -106,6 +107,7 @@ const engine = function (options) { /** * Check if the inpyt is a buffer or a string + * @private * @param {Buffer|String} buffer Input value that can be either a buffer or a string * @return {String} Returns the string from input */ @@ -119,16 +121,16 @@ const getStringBuffer = function (buffer) { * @return {Engine} * @private */ -engine.create = function (options) { - return new engine(options); +Engine.create = function (options) { + return new Engine(options); }; /** * Evaluate the buffer * @private */ -engine.parseEval = function (buffer, options) { - const self = new engine(options); +Engine.parseEval = function (buffer, options) { + const self = new Engine(options); return self.parseEval(buffer); }; @@ -137,7 +139,7 @@ engine.parseEval = function (buffer, options) { * @param {String} buffer * @return {Program} */ -engine.prototype.parseEval = function (buffer) { +Engine.prototype.parseEval = function (buffer) { this.lexer.mode_eval = true; this.lexer.all_tokens = false; buffer = getStringBuffer(buffer); @@ -148,13 +150,13 @@ engine.prototype.parseEval = function (buffer) { * Static function that parse a php code with open/close tags * @private */ -engine.parseCode = function (buffer, filename, options) { +Engine.parseCode = function (buffer, filename, options) { if (typeof filename === "object" && !options) { // retro-compatibility options = filename; filename = "unknown"; } - const self = new engine(options); + const self = new Engine(options); return self.parseCode(buffer, filename); }; @@ -178,7 +180,7 @@ engine.parseCode = function (buffer, filename, options) { * @param {String} filename - Filename * @return {Program} */ -engine.prototype.parseCode = function (buffer, filename) { +Engine.prototype.parseCode = function (buffer, filename) { this.lexer.mode_eval = false; this.lexer.all_tokens = false; buffer = getStringBuffer(buffer); @@ -189,18 +191,18 @@ engine.prototype.parseCode = function (buffer, filename) { * Split the buffer into tokens * @private */ -engine.tokenGetAll = function (buffer, options) { - const self = new engine(options); +Engine.tokenGetAll = function (buffer, options) { + const self = new Engine(options); return self.tokenGetAll(buffer); }; /** * Extract tokens from the specified buffer. * > Note that the output tokens are *STRICLY* similar to PHP function `token_get_all` - * @param {String} buffer - * @return {String[]} - Each item can be a string or an array with following informations [token_name, text, line_number] + * @param {string} buffer + * @return {Array} - Each item can be a string or an array with following informations [token_name, text, line_number] */ -engine.prototype.tokenGetAll = function (buffer) { +Engine.prototype.tokenGetAll = function (buffer) { this.lexer.mode_eval = false; this.lexer.all_tokens = true; buffer = getStringBuffer(buffer); @@ -211,7 +213,7 @@ engine.prototype.tokenGetAll = function (buffer) { const result = []; while (token != EOF) { let entry = this.lexer.yytext; - if (names.hasOwnProperty(token)) { + if (Object.prototype.hasOwnProperty.call(names, token)) { entry = [names[token], entry, this.lexer.yylloc.first_line]; } result.push(entry); @@ -220,8 +222,10 @@ engine.prototype.tokenGetAll = function (buffer) { return result; }; +/** @module php-parser */ + // exports the function -module.exports = engine; +module.exports = Engine; // makes libraries public module.exports.tokens = tokens; @@ -229,6 +233,7 @@ module.exports.lexer = lexer; module.exports.AST = AST; module.exports.parser = parser; module.exports.combine = combine; +module.exports.Engine = Engine; // allow the default export in index.d.ts -module.exports.default = engine; +module.exports.default = Engine; diff --git a/src/lexer.js b/src/lexer.js index 008c0dc1e..c1cee6b35 100644 --- a/src/lexer.js +++ b/src/lexer.js @@ -9,17 +9,18 @@ * This is the php lexer. It will tokenize the string for helping the * parser to build the AST from its grammar. * - * @class - * @property {Integer} EOF - * @property {Boolean} all_tokens defines if all tokens must be retrieved (used by token_get_all only) - * @property {Boolean} comment_tokens extracts comments tokens - * @property {Boolean} mode_eval enables the evald mode (ignore opening tags) - * @property {Boolean} asp_tags disables by default asp tags mode - * @property {Boolean} short_tags enables by default short tags mode - * @property {Object} keywords List of php keyword - * @property {Object} castKeywords List of php keywords for type casting + * @constructor Lexer + * @memberOf module:php-parser + * @property {number} EOF + * @property {boolean} all_tokens defines if all tokens must be retrieved (used by token_get_all only) + * @property {boolean} comment_tokens extracts comments tokens + * @property {boolean} mode_eval enables the evald mode (ignore opening tags) + * @property {boolean} asp_tags disables by default asp tags mode + * @property {boolean} short_tags enables by default short tags mode + * @property {object} keywords List of php keyword + * @property {object} castKeywords List of php keywords for type casting */ -const lexer = function (engine) { +const Lexer = function (engine) { this.engine = engine; this.tok = this.engine.tokens.names; this.EOF = 1; @@ -29,7 +30,7 @@ const lexer = function (engine) { this.mode_eval = false; this.asp_tags = false; this.short_tags = false; - this.version = 704; + this.version = 803; this.yyprevcol = 0; this.keywords = { __class__: this.tok.T_CLASS_C, @@ -76,6 +77,7 @@ const lexer = function (engine) { class: this.tok.T_CLASS, interface: this.tok.T_INTERFACE, trait: this.tok.T_TRAIT, + enum: this.tok.T_ENUM, extends: this.tok.T_EXTENDS, implements: this.tok.T_IMPLEMENTS, new: this.tok.T_NEW, @@ -106,6 +108,8 @@ const lexer = function (engine) { or: this.tok.T_LOGICAL_OR, and: this.tok.T_LOGICAL_AND, xor: this.tok.T_LOGICAL_XOR, + match: this.tok.T_MATCH, + readonly: this.tok.T_READ_ONLY, }; this.castKeywords = { int: this.tok.T_INT_CAST, @@ -125,8 +129,10 @@ const lexer = function (engine) { /** * Initialize the lexer with the specified input + * @function Lexer#setInput + * @memberOf module:php-parser */ -lexer.prototype.setInput = function (input) { +Lexer.prototype.setInput = function (input) { this._input = input; this.size = input.length; this.yylineno = 1; @@ -165,7 +171,7 @@ lexer.prototype.setInput = function (input) { indentation: 0, indentation_uses_spaces: false, finished: false, - /** + /* * this used for parser to detemine the if current node segment is first encaps node. * if ture, the indentation will remove from the begining. and if false, the prev node * might be a variable '}' ,and the leading spaces should not be removed util meet the @@ -173,6 +179,7 @@ lexer.prototype.setInput = function (input) { */ first_encaps_node: false, // for backward compatible + /* istanbul ignore next */ toString: function () { this.label; }, @@ -182,8 +189,10 @@ lexer.prototype.setInput = function (input) { /** * consumes and returns one char from the input + * @function Lexer#input + * @memberOf module:php-parser */ -lexer.prototype.input = function () { +Lexer.prototype.input = function () { const ch = this._input[this.offset]; if (!ch) return ""; this.yytext += ch; @@ -204,8 +213,10 @@ lexer.prototype.input = function () { /** * revert eating specified size + * @function Lexer#unput + * @memberOf module:php-parser */ -lexer.prototype.unput = function (size) { +Lexer.prototype.unput = function (size) { if (size === 1) { // 1 char unput (most cases) this.offset--; @@ -268,18 +279,36 @@ lexer.prototype.unput = function (size) { return this; }; -// check if the text matches -lexer.prototype.tryMatch = function (text) { +/** + * check if the text matches + * @function Lexer#tryMatch + * @memberOf module:php-parser + * @param {string} text + * @returns {boolean} + */ +Lexer.prototype.tryMatch = function (text) { return text === this.ahead(text.length); }; -// check if the text matches -lexer.prototype.tryMatchCaseless = function (text) { +/** + * check if the text matches + * @function Lexer#tryMatchCaseless + * @memberOf module:php-parser + * @param {string} text + * @returns {boolean} + */ +Lexer.prototype.tryMatchCaseless = function (text) { return text === this.ahead(text.length).toLowerCase(); }; -// look ahead -lexer.prototype.ahead = function (size) { +/** + * look ahead + * @function Lexer#ahead + * @memberOf module:php-parser + * @param {number} size + * @returns {string} + */ +Lexer.prototype.ahead = function (size) { let text = this._input.substring(this.offset, this.offset + size); if ( text[text.length - 1] === "\r" && @@ -290,8 +319,14 @@ lexer.prototype.ahead = function (size) { return text; }; -// consume the specified size -lexer.prototype.consume = function (size) { +/** + * consume the specified size + * @function Lexer#consume + * @memberOf module:php-parser + * @param {number} size + * @returns {Lexer} + */ +Lexer.prototype.consume = function (size) { for (let i = 0; i < size; i++) { const ch = this._input[this.offset]; if (!ch) break; @@ -315,8 +350,10 @@ lexer.prototype.consume = function (size) { /** * Gets the current state + * @function Lexer#getState + * @memberOf module:php-parser */ -lexer.prototype.getState = function () { +Lexer.prototype.getState = function () { return { yytext: this.yytext, offset: this.offset, @@ -335,8 +372,10 @@ lexer.prototype.getState = function () { /** * Sets the current lexer state + * @function Lexer#setState + * @memberOf module:php-parser */ -lexer.prototype.setState = function (state) { +Lexer.prototype.setState = function (state) { this.yytext = state.yytext; this.offset = state.offset; this.yylineno = state.yylineno; @@ -348,14 +387,26 @@ lexer.prototype.setState = function (state) { return this; }; -// prepend next token -lexer.prototype.appendToken = function (value, ahead) { +/** + * prepend next token + * @function Lexer#appendToken + * @memberOf module:php-parser + * @param {*} value + * @param {*} ahead + * @returns {Lexer} + */ +Lexer.prototype.appendToken = function (value, ahead) { this.tokens.push([value, ahead]); return this; }; -// return next match that has a token -lexer.prototype.lex = function () { +/** + * return next match that has a token + * @function Lexer#lex + * @memberOf module:php-parser + * @returns {number|string} + */ +Lexer.prototype.lex = function () { this.yylloc.prev_offset = this.offset; this.yylloc.prev_line = this.yylloc.last_line; this.yylloc.prev_column = this.yylloc.last_column; @@ -391,31 +442,49 @@ lexer.prototype.lex = function () { return token; }; -// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -lexer.prototype.begin = function (condition) { +/** + * activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + * @function Lexer#begin + * @memberOf module:php-parser + * @param {*} condition + * @returns {Lexer} + */ +Lexer.prototype.begin = function (condition) { this.conditionStack.push(condition); this.curCondition = condition; this.stateCb = this["match" + condition]; + /* istanbul ignore next */ if (typeof this.stateCb !== "function") { throw new Error('Undefined condition state "' + condition + '"'); } return this; }; -// pop the previously active lexer condition state off the condition stack -lexer.prototype.popState = function () { +/** + * pop the previously active lexer condition state off the condition stack + * @function Lexer#popState + * @memberOf module:php-parser + * @returns {string|*} + */ +Lexer.prototype.popState = function () { const n = this.conditionStack.length - 1; const condition = n > 0 ? this.conditionStack.pop() : this.conditionStack[0]; this.curCondition = this.conditionStack[this.conditionStack.length - 1]; this.stateCb = this["match" + this.curCondition]; + /* istanbul ignore next */ if (typeof this.stateCb !== "function") { throw new Error('Undefined condition state "' + this.curCondition + '"'); } return condition; }; -// return next match in input -lexer.prototype.next = function () { +/** + * return next match in input + * @function Lexer#next + * @memberOf module:php-parser + * @returns {number|*} + */ +Lexer.prototype.next = function () { let token; if (!this._input) { this.done = true; @@ -444,6 +513,7 @@ lexer.prototype.next = function () { if (this.offset >= this.size && this.tokens.length === 0) { this.done = true; } + /* istanbul ignore next */ if (this.debug) { let tName = token; if (typeof tName === "number") { @@ -463,7 +533,7 @@ lexer.prototype.next = function () { this.yylloc.last_column + '\t"' + this.yytext + - '"' + '"', ); // eslint-disable-next-line no-console console.error(e.stack); @@ -473,6 +543,7 @@ lexer.prototype.next = function () { // extends the lexer with states [ + require("./lexer/attribute.js"), require("./lexer/comments.js"), require("./lexer/initial.js"), require("./lexer/numbers.js"), @@ -483,8 +554,8 @@ lexer.prototype.next = function () { require("./lexer/utils.js"), ].forEach(function (ext) { for (const k in ext) { - lexer.prototype[k] = ext[k]; + Lexer.prototype[k] = ext[k]; } }); -module.exports = lexer; +module.exports = Lexer; diff --git a/src/lexer/attribute.js b/src/lexer/attribute.js new file mode 100644 index 000000000..b3421baea --- /dev/null +++ b/src/lexer/attribute.js @@ -0,0 +1,85 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +module.exports = { + attributeIndex: 0, + attributeListDepth: {}, + matchST_ATTRIBUTE: function () { + let ch = this.input(); + if (this.is_WHITESPACE()) { + do { + ch = this.input(); + } while (this.is_WHITESPACE()); + this.unput(1); + return null; + } + switch (ch) { + case "]": + if (this.attributeListDepth[this.attributeIndex] === 0) { + delete this.attributeListDepth[this.attributeIndex]; + this.attributeIndex--; + this.popState(); + } else { + /* istanbul ignore next */ + this.attributeListDepth[this.attributeIndex]--; + } + return "]"; + case "(": + case ")": + case ":": + case "=": + case "|": + case "&": + case "^": + case "-": + case "+": + case "*": + case "%": + case "~": + case "<": + case ">": + case "!": + case ".": + return this.consume_TOKEN(); + case "[": + this.attributeListDepth[this.attributeIndex]++; + return "["; + case ",": + return ","; + case '"': + return this.ST_DOUBLE_QUOTES(); + case "'": + return this.T_CONSTANT_ENCAPSED_STRING(); + case "/": + if (this._input[this.offset] === "/") { + return this.T_COMMENT(); + } else if (this._input[this.offset] === "*") { + this.input(); + return this.T_DOC_COMMENT(); + } else { + return this.consume_TOKEN(); + } + } + if (this.is_LABEL_START() || ch === "\\") { + while (this.offset < this.size) { + const ch = this.input(); + if (!(this.is_LABEL() || ch === "\\")) { + if (ch) this.unput(1); + break; + } + } + return this.T_STRING(); + } else if (this.is_NUM()) { + return this.consume_NUM(); + } + + /* istanbul ignore next */ + throw new Error( + `Bad terminal sequence "${ch}" at line ${this.yylineno} (offset ${this.offset})`, + ); + }, +}; diff --git a/src/lexer/comments.js b/src/lexer/comments.js index ed8ba5e21..43501d701 100644 --- a/src/lexer/comments.js +++ b/src/lexer/comments.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads a single line comment */ T_COMMENT: function () { @@ -32,7 +32,7 @@ module.exports = { } return this.tok.T_COMMENT; }, - /** + /* * Behaviour : https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1927 */ T_DOC_COMMENT: function () { diff --git a/src/lexer/numbers.js b/src/lexer/numbers.js index 4c17a7131..0d6239461 100644 --- a/src/lexer/numbers.js +++ b/src/lexer/numbers.js @@ -35,7 +35,13 @@ module.exports = { } else { this.unput(ch ? 2 : 1); } - // @fixme check octal notation ? not usefull + } else if (ch === "o" || ch === "O") { + ch = this.input(); + if (ch !== "_" && this.is_OCTAL()) { + return this.consume_ONUM(); + } else { + this.unput(ch ? 2 : 1); + } } else if (!this.is_NUM()) { if (ch) this.unput(1); } @@ -151,4 +157,15 @@ module.exports = { } return this.tok.T_LNUMBER; }, + // read an octal number + consume_ONUM: function () { + while (this.offset < this.size) { + const ch = this.input(); + if (!this.is_OCTAL()) { + if (ch) this.unput(1); + break; + } + } + return this.tok.T_LNUMBER; + }, }; diff --git a/src/lexer/property.js b/src/lexer/property.js index 69627c9e7..8d2c00259 100644 --- a/src/lexer/property.js +++ b/src/lexer/property.js @@ -66,6 +66,7 @@ module.exports = { this.consume_LABEL(); return this.tok.T_VARIABLE; } else { + /* istanbul ignore next */ throw new Error("Unexpected terminal"); } } else if (this.is_LABEL_START()) { @@ -88,6 +89,7 @@ module.exports = { ) { return ch; } else { + /* istanbul ignore next */ throw new Error("Unexpected terminal"); } }, diff --git a/src/lexer/scripting.js b/src/lexer/scripting.js index 9206a9cba..0a6a1a1a3 100644 --- a/src/lexer/scripting.js +++ b/src/lexer/scripting.js @@ -16,6 +16,12 @@ module.exports = { case "\r\n": return this.T_WHITESPACE(); case "#": + if (this.version >= 800 && this._input[this.offset] === "[") { + this.input(); + this.attributeListDepth[++this.attributeIndex] = 0; + this.begin("ST_ATTRIBUTE"); + return this.tok.T_ATTRIBUTE; + } return this.T_COMMENT(); case "/": if (this._input[this.offset] === "/") { @@ -90,7 +96,7 @@ module.exports = { this.yylineno + " (offset " + this.offset + - ")" + ")", ); }, diff --git a/src/lexer/strings.js b/src/lexer/strings.js index ef575b41c..689213e5f 100644 --- a/src/lexer/strings.js +++ b/src/lexer/strings.js @@ -130,7 +130,7 @@ module.exports = { if (this.yytext.length > 2) { this.appendToken( this.tok.T_ENCAPSED_AND_WHITESPACE, - this.yytext.length - prefix + this.yytext.length - prefix, ); } this.unput(this.yytext.length - prefix); @@ -182,7 +182,7 @@ module.exports = { if ( this._input.substring( offset - 1, - offset - 1 + this.heredoc_label.length + offset - 1 + this.heredoc_label.length, ) === this.heredoc_label.label ) { const ch = this._input[offset - 1 + this.heredoc_label.length]; @@ -201,7 +201,7 @@ module.exports = { this.yylineno + " (offset " + this.offset + - ")" + ")", ); } } else { @@ -217,7 +217,7 @@ module.exports = { return false; }, - /** + /* * Prematch the end of HEREDOC/NOWDOC end tag to preset the * context of this.heredoc_label */ @@ -249,14 +249,14 @@ module.exports = { }, matchST_NOWDOC: function () { - /** edge case : empty now doc **/ + // edge case : empty now doc if (this.isDOC_MATCH(this.offset, true)) { // @fixme : never reached (may be caused by quotes) this.consume(this.heredoc_label.length); this.popState(); return this.tok.T_END_HEREDOC; } - /** SCANNING CONTENTS **/ + // SCANNING CONTENTS let ch = this._input[this.offset - 1]; while (this.offset < this.size) { if (newline.includes(ch)) { @@ -275,14 +275,14 @@ module.exports = { }, matchST_HEREDOC: function () { - /** edge case : empty here doc **/ + // edge case : empty here doc let ch = this.input(); if (this.isDOC_MATCH(this.offset, true)) { this.consume(this.heredoc_label.length - 1); this.popState(); return this.tok.T_END_HEREDOC; } - /** SCANNING CONTENTS **/ + // SCANNING CONTENTS while (this.offset < this.size) { if (ch === "\\") { ch = this.input(); // ignore next diff --git a/src/lexer/tokens.js b/src/lexer/tokens.js index 092c0aa51..217524ca8 100644 --- a/src/lexer/tokens.js +++ b/src/lexer/tokens.js @@ -20,7 +20,7 @@ module.exports = { } else { id = this.tok.T_STRING; if (token === "b" || token === "B") { - const ch = this.input(1); + const ch = this.input(); if (ch === '"') { return this.ST_DOUBLE_QUOTES(); } else if (ch === "'") { @@ -31,6 +31,55 @@ module.exports = { } } } + + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1546 + if (id === this.tok.T_ENUM) { + if (this.version < 801) { + return this.tok.T_STRING; + } + const initial = this.offset; + let ch = this.input(); + while (ch == " ") { + ch = this.input(); + } + let isEnum = false; + if (this.is_LABEL_START()) { + while (this.is_LABEL()) { + ch += this.input(); + } + const label = ch.slice(0, -1).toLowerCase(); + isEnum = label !== "extends" && label !== "implements"; + } + + this.unput(this.offset - initial); + return isEnum ? this.tok.T_ENUM : this.tok.T_STRING; + } + + if (this.offset < this.size && id !== this.tok.T_YIELD_FROM) { + // If immediately followed by a backslash, this is a T_NAME_RELATIVE or T_NAME_QUALIFIED. + let ch = this.input(); + if (ch === "\\") { + id = + token === "namespace" + ? this.tok.T_NAME_RELATIVE + : this.tok.T_NAME_QUALIFIED; + do { + if (this._input[this.offset] === "{") { + // e.g. when using group use statements, the last '\\' is followed by a '{' + this.input(); + break; + } + + this.consume_LABEL(); + ch = this.input(); + } while (ch === "\\"); + } + + if (ch) { + this.unput(1); + } + } + return id; }, // reads a custom token @@ -71,6 +120,28 @@ module.exports = { return "-"; }, "\\": function () { + if (this.offset < this.size) { + this.input(); + if (this.is_LABEL_START()) { + let ch; + do { + if (this._input[this.offset] === "{") { + // e.g. when using group use statements, the last '\\' is followed by a '{' + this.input(); + break; + } + + this.consume_LABEL(); + ch = this.input(); + } while (ch === "\\"); + + this.unput(1); + + return this.tok.T_NAME_FULLY_QUALIFIED; + } else { + this.unput(1); + } + } return this.tok.T_NS_SEPARATOR; }, "/": function () { @@ -162,6 +233,15 @@ module.exports = { return this.tok.T_COALESCE; } } + if ( + this.version >= 800 && + this._input[this.offset] === "-" && + this._input[this.offset + 1] === ">" + ) { + this.consume(1); + this.begin("ST_LOOKING_FOR_PROPERTY").input(); + return this.tok.T_NULLSAFE_OBJECT_OPERATOR; + } return "?"; }, "<": function () { diff --git a/src/lexer/utils.js b/src/lexer/utils.js index 777d9a48d..8a2733037 100644 --- a/src/lexer/utils.js +++ b/src/lexer/utils.js @@ -99,4 +99,14 @@ module.exports = { // else return false; }, + // check if current char can be an octal number + is_OCTAL: function () { + const ch = this._input.charCodeAt(this.offset - 1); + // 0 - 7 + if (ch > 47 && ch < 56) return true; + // _ (code 95) + if (ch === 95) return true; + // else + return false; + }, }; diff --git a/src/parser.js b/src/parser.js index 3d4cab0b4..5e5ef1fa5 100644 --- a/src/parser.js +++ b/src/parser.js @@ -5,6 +5,8 @@ */ "use strict"; +const Position = require("./ast/position"); + /** * @private */ @@ -15,17 +17,18 @@ function isNumber(n) { /** * The PHP Parser class that build the AST tree from the lexer * - * @class + * @constructor Parser + * @memberOf module:php-parser * @tutorial Parser * @property {Lexer} lexer - current lexer instance * @property {AST} ast - the AST factory instance - * @property {Integer|String} token - current token - * @property {Boolean} extractDoc - should extract documentation as AST node - * @property {Boolean} extractTokens - should extract each token - * @property {Boolean} suppressErrors - should ignore parsing errors and continue - * @property {Boolean} debug - should output debug informations + * @property {number|string} token - current token + * @property {boolean} extractDoc - should extract documentation as AST node + * @property {boolean} extractTokens - should extract each token + * @property {boolean} suppressErrors - should ignore parsing errors and continue + * @property {boolean} debug - should output debug informations */ -const parser = function (lexer, ast) { +const Parser = function (lexer, ast) { this.lexer = lexer; this.ast = ast; this.tok = lexer.tok; @@ -33,7 +36,7 @@ const parser = function (lexer, ast) { this.token = null; this.prev = null; this.debug = false; - this.version = 704; + this.version = 803; this.extractDoc = false; this.extractTokens = false; this.suppressErrors = false; @@ -70,6 +73,7 @@ const parser = function (lexer, ast) { this.tok.T_ENDIF, this.tok.T_ENDSWITCH, this.tok.T_ENDWHILE, + this.tok.T_ENUM, this.tok.T_EVAL, this.tok.T_EXIT, this.tok.T_EXTENDS, @@ -96,6 +100,7 @@ const parser = function (lexer, ast) { this.tok.T_LOGICAL_AND, this.tok.T_LOGICAL_OR, this.tok.T_LOGICAL_XOR, + this.tok.T_MATCH, this.tok.T_METHOD_C, this.tok.T_NAMESPACE, this.tok.T_NEW, @@ -104,6 +109,7 @@ const parser = function (lexer, ast) { this.tok.T_PRIVATE, this.tok.T_PROTECTED, this.tok.T_PUBLIC, + this.tok.T_READ_ONLY, this.tok.T_REQUIRE, this.tok.T_REQUIRE_ONCE, this.tok.T_RETURN, @@ -117,18 +123,20 @@ const parser = function (lexer, ast) { this.tok.T_VAR, this.tok.T_WHILE, this.tok.T_YIELD, - ].map(mapIt) + ].map(mapIt), ), VARIABLE: new Map( [ this.tok.T_VARIABLE, "$", "&", - this.tok.T_NS_SEPARATOR, this.tok.T_STRING, + this.tok.T_NAME_RELATIVE, + this.tok.T_NAME_QUALIFIED, + this.tok.T_NAME_FULLY_QUALIFIED, this.tok.T_NAMESPACE, this.tok.T_STATIC, - ].map(mapIt) + ].map(mapIt), ), SCALAR: new Map( [ @@ -151,7 +159,7 @@ const parser = function (lexer, ast) { 'B"', "-", this.tok.T_NS_SEPARATOR, - ].map(mapIt) + ].map(mapIt), ), T_MAGIC_CONST: new Map( [ @@ -163,7 +171,7 @@ const parser = function (lexer, ast) { this.tok.T_FILE, this.tok.T_DIR, this.tok.T_NS_C, - ].map(mapIt) + ].map(mapIt), ), T_MEMBER_FLAGS: new Map( [ @@ -173,7 +181,7 @@ const parser = function (lexer, ast) { this.tok.T_STATIC, this.tok.T_ABSTRACT, this.tok.T_FINAL, - ].map(mapIt) + ].map(mapIt), ), EOS: new Map([";", this.EOF, this.tok.T_INLINE_HTML].map(mapIt)), EXPR: new Map( @@ -192,6 +200,7 @@ const parser = function (lexer, ast) { this.tok.T_NEW, this.tok.T_ISSET, this.tok.T_EMPTY, + this.tok.T_MATCH, this.tok.T_INCLUDE, this.tok.T_INCLUDE_ONCE, this.tok.T_REQUIRE, @@ -215,6 +224,9 @@ const parser = function (lexer, ast) { "$", this.tok.T_NS_SEPARATOR, this.tok.T_STRING, + this.tok.T_NAME_RELATIVE, + this.tok.T_NAME_QUALIFIED, + this.tok.T_NAME_FULLY_QUALIFIED, // using SCALAR : this.tok.T_STRING, // @see variable.js line 45 > conflict with variable = shift/reduce :) this.tok.T_CONSTANT_ENCAPSED_STRING, @@ -236,15 +248,17 @@ const parser = function (lexer, ast) { 'B"', "-", this.tok.T_NS_SEPARATOR, - ].map(mapIt) + ].map(mapIt), ), }; }; /** * helper : gets a token name + * @function Parser#getTokenName + * @memberOf module:php-parser */ -parser.prototype.getTokenName = function (token) { +Parser.prototype.getTokenName = function (token) { if (!isNumber(token)) { return "'" + token + "'"; } else { @@ -255,8 +269,10 @@ parser.prototype.getTokenName = function (token) { /** * main entry point : converts a source code to AST + * @function Parser#parse + * @memberOf module:php-parser */ -parser.prototype.parse = function (code, filename) { +Parser.prototype.parse = function (code, filename) { this._errors = []; this.filename = filename || "eval"; this.currentNamespace = [""]; @@ -301,6 +317,7 @@ parser.prototype.parse = function (code, filename) { const result = program(childs, this._errors, this._docs, this._tokens); if (this.debug) { const errors = this.ast.checkNodes(); + /* istanbul ignore next */ if (errors.length > 0) { errors.forEach(function (error) { if (error.position) { @@ -309,7 +326,7 @@ parser.prototype.parse = function (code, filename) { "Node at line " + error.position.line + ", column " + - error.position.column + error.position.column, ); } // eslint-disable-next-line no-console @@ -323,14 +340,16 @@ parser.prototype.parse = function (code, filename) { /** * Raise an error + * @function Parser#raiseError + * @memberOf module:php-parser */ -parser.prototype.raiseError = function (message, msgExpect, expect, token) { +Parser.prototype.raiseError = function (message, msgExpect, expect, token) { message += " on line " + this.lexer.yylloc.first_line; if (!this.suppressErrors) { const err = new SyntaxError( message, this.filename, - this.lexer.yylloc.first_line + this.lexer.yylloc.first_line, ); err.lineNumber = this.lexer.yylloc.first_line; err.fileName = this.filename; @@ -342,7 +361,7 @@ parser.prototype.raiseError = function (message, msgExpect, expect, token) { message, token, this.lexer.yylloc.first_line, - expect + expect, ); this._errors.push(node); return node; @@ -350,8 +369,10 @@ parser.prototype.raiseError = function (message, msgExpect, expect, token) { /** * handling errors + * @function Parser#error + * @memberOf module:php-parser */ -parser.prototype.error = function (expect) { +Parser.prototype.error = function (expect) { let msg = "Parse Error : syntax error"; let token = this.getTokenName(this.token); let msgExpect = ""; @@ -359,6 +380,7 @@ parser.prototype.error = function (expect) { if (this.token !== this.EOF) { if (isNumber(this.token)) { let symbol = this.text(); + /* istanbul ignore next */ if (symbol.length > 10) { symbol = symbol.substring(0, 7) + "..."; } @@ -375,15 +397,33 @@ parser.prototype.error = function (expect) { return this.raiseError(msg, msgExpect, expect, token); }; +/** + * Create a position node from the lexers position + * + * @function Parser#position + * @memberOf module:php-parser + * @return {Position} + */ +Parser.prototype.position = function () { + return new Position( + this.lexer.yylloc.first_line, + this.lexer.yylloc.first_column, + this.lexer.yylloc.first_offset, + ); +}; + /** * Creates a new AST node + * @function Parser#node + * @memberOf module:php-parser */ -parser.prototype.node = function (name) { +Parser.prototype.node = function (name) { if (this.extractDoc) { let docs = null; if (this._docIndex < this._docs.length) { docs = this._docs.slice(this._docIndex); this._docIndex = this._docs.length; + /* istanbul ignore next */ if (this.debug) { // eslint-disable-next-line no-console console.log(new Error("Append docs on " + name)); @@ -392,7 +432,7 @@ parser.prototype.node = function (name) { } } const node = this.ast.prepare(name, docs, this); - /** + /* * TOKENS : * node1 commentA token commmentB node2 commentC token commentD node3 commentE token * @@ -434,7 +474,7 @@ parser.prototype.node = function (name) { if (max > this._docIndex) { // inject trailing comment on child node this._lastNode.setTrailingComments( - this._docs.slice(this._docIndex, max) + this._docs.slice(this._docIndex, max), ); this._docIndex = max; } @@ -453,9 +493,11 @@ parser.prototype.node = function (name) { /** * expects an end of statement or end of file + * @function Parser#expectEndOfStatement + * @memberOf module:php-parser * @return {boolean} */ -parser.prototype.expectEndOfStatement = function (node) { +Parser.prototype.expectEndOfStatement = function (node) { if (this.token === ";") { // include only real ';' statements // https://github.com/glayzzle/php-parser/issues/164 @@ -470,20 +512,27 @@ parser.prototype.expectEndOfStatement = function (node) { return true; }; -/** outputs some debug information on current token **/ const ignoreStack = ["parser.next", "parser.node", "parser.showlog"]; -parser.prototype.showlog = function () { +/** + * outputs some debug information on current token + * @private + * @function Parser#showlog + * @memberOf module:php-parser + */ +Parser.prototype.showlog = function () { const stack = new Error().stack.split("\n"); let line; for (let offset = 2; offset < stack.length; offset++) { line = stack[offset].trim(); let found = false; for (let i = 0; i < ignoreStack.length; i++) { + /* istanbul ignore next */ if (line.substring(3, 3 + ignoreStack[i].length) === ignoreStack[i]) { found = true; break; } } + /* istanbul ignore next */ if (!found) { break; } @@ -498,7 +547,7 @@ parser.prototype.showlog = function () { this.lexer.yytext + "<" + " @-->" + - line + line, ); return this; }; @@ -512,11 +561,13 @@ parser.prototype.showlog = function () { * If the suppressError mode is activated, then the error will * be added to the program error stack and this function will return `false`. * + * @function Parser#expect + * @memberOf module:php-parser * @param {String|Number} token * @return {boolean} * @throws Error */ -parser.prototype.expect = function (token) { +Parser.prototype.expect = function (token) { if (Array.isArray(token)) { if (token.indexOf(this.token) === -1) { this.error(token); @@ -531,14 +582,20 @@ parser.prototype.expect = function (token) { /** * Returns the current token contents + * @function Parser#text + * @memberOf module:php-parser * @return {String} */ -parser.prototype.text = function () { +Parser.prototype.text = function () { return this.lexer.yytext; }; -/** consume the next token **/ -parser.prototype.next = function () { +/** + * consume the next token + * @function Parser#next + * @memberOf module:php-parser + */ +Parser.prototype.next = function () { // prepare the back command if (this.token !== ";" || this.lexer.yytext === ";") { // ignore '?>' from automated resolution @@ -576,18 +633,38 @@ parser.prototype.next = function () { return this; }; +/** + * Peek at the next token. + * @function Parser#peek + * @memberOf module:php-parser + * @returns {string|number} Next Token + */ +Parser.prototype.peek = function () { + const lexerState = this.lexer.getState(); + const nextToken = this.lexer.lex(); + this.lexer.setState(lexerState); + return nextToken; +}; + /** * Eating a token + * @function Parser#lex + * @memberOf module:php-parser */ -parser.prototype.lex = function () { +Parser.prototype.lex = function () { // append on token stack if (this.extractTokens) { do { // the token - this.token = this.lexer.lex() || this.EOF; + this.token = this.lexer.lex() || /* istanbul ignore next */ this.EOF; if (this.token === this.EOF) return this; let entry = this.lexer.yytext; - if (this.lexer.engine.tokens.values.hasOwnProperty(this.token)) { + if ( + Object.prototype.hasOwnProperty.call( + this.lexer.engine.tokens.values, + this.token, + ) + ) { entry = [ this.lexer.engine.tokens.values[this.token], entry, @@ -622,15 +699,17 @@ parser.prototype.lex = function () { this.token === this.tok.T_OPEN_TAG ); } else { - this.token = this.lexer.lex() || this.EOF; + this.token = this.lexer.lex() || /* istanbul ignore next */ this.EOF; } return this; }; /** * Check if token is of specified type + * @function Parser#is + * @memberOf module:php-parser */ -parser.prototype.is = function (type) { +Parser.prototype.is = function (type) { if (Array.isArray(type)) { return type.indexOf(this.token) !== -1; } @@ -643,6 +722,7 @@ parser.prototype.is = function (type) { require("./parser/class.js"), require("./parser/comment.js"), require("./parser/expr.js"), + require("./parser/enum.js"), require("./parser/function.js"), require("./parser/if.js"), require("./parser/loops.js"), @@ -656,12 +736,13 @@ parser.prototype.is = function (type) { require("./parser/variable.js"), ].forEach(function (ext) { for (const k in ext) { - if (parser.prototype.hasOwnProperty(k)) { + /* istanbul ignore next */ + if (Object.prototype.hasOwnProperty.call(Parser.prototype, k)) { // @see https://github.com/glayzzle/php-parser/issues/234 throw new Error("Function " + k + " is already defined - collision"); } - parser.prototype[k] = ext[k]; + Parser.prototype[k] = ext[k]; } }); -module.exports = parser; +module.exports = Parser; diff --git a/src/parser/array.js b/src/parser/array.js index 51dcc5c9f..0d354b209 100644 --- a/src/parser/array.js +++ b/src/parser/array.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Parse an array * ```ebnf * array ::= T_ARRAY '(' array_pair_list ')' | @@ -33,7 +33,7 @@ module.exports = { this.next(); return result(shortForm, items); }, - /** + /* * Reads an array of items * ```ebnf * array_pair_list ::= array_pair (',' array_pair?)* @@ -46,10 +46,10 @@ module.exports = { return self.read_array_pair(shortForm); }, ",", - true + true, ); }, - /** + /* * Reads an entry * array_pair: * expr T_DOUBLE_ARROW expr diff --git a/src/parser/class.js b/src/parser/class.js index 6019433d1..cbc2c370f 100644 --- a/src/parser/class.js +++ b/src/parser/class.js @@ -6,13 +6,13 @@ "use strict"; module.exports = { - /** + /* * reading a class * ```ebnf * class ::= class_scope? T_CLASS T_STRING (T_EXTENDS NAMESPACE_NAME)? (T_IMPLEMENTS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' CLASS_BODY '}' * ``` */ - read_class_declaration_statement: function () { + read_class_declaration_statement: function (attrs) { const result = this.node("class"); const flag = this.read_class_modifiers(); // graceful mode : ignore token & go next @@ -29,37 +29,53 @@ module.exports = { const propExtends = this.read_extends_from(); const propImplements = this.read_implements_list(); this.expect("{"); - const body = this.next().read_class_body(); - return result(propName, propExtends, propImplements, body, flag); + const body = this.next().read_class_body(true, false); + const node = result(propName, propExtends, propImplements, body, flag); + if (attrs) node.attrGroups = attrs; + return node; }, read_class_modifiers: function () { - return [0, 0, this.read_class_modifier()]; + const modifier = this.read_class_modifier({ + readonly: 0, + final_or_abstract: 0, + }); + return [0, 0, modifier.final_or_abstract, modifier.readonly]; }, - read_class_modifier: function () { - const result = 0; - - if (this.token === this.tok.T_ABSTRACT) { + read_class_modifier: function (memo) { + if (this.token === this.tok.T_READ_ONLY) { + this.next(); + memo.readonly = 1; + memo = this.read_class_modifier(memo); + } else if ( + memo.final_or_abstract === 0 && + this.token === this.tok.T_ABSTRACT + ) { this.next(); - return 1; - } else if (this.token === this.tok.T_FINAL) { + memo.final_or_abstract = 1; + memo = this.read_class_modifier(memo); + } else if ( + memo.final_or_abstract === 0 && + this.token === this.tok.T_FINAL + ) { this.next(); - return 2; + memo.final_or_abstract = 2; + memo = this.read_class_modifier(memo); } - return result; + return memo; }, - /** + /* * Reads a class body * ```ebnf * class_body ::= (member_flags? (T_VAR | T_STRING | T_FUNCTION))* * ``` */ - read_class_body: function () { + read_class_body: function (allow_variables, allow_enum_cases) { let result = []; - + let attrs = []; while (this.token !== this.EOF && this.token !== "}") { if (this.token === this.tok.T_COMMENT) { result.push(this.read_comment()); @@ -77,12 +93,28 @@ module.exports = { continue; } + // check enum cases + if (allow_enum_cases && this.token === this.tok.T_CASE) { + const enumcase = this.read_enum_case(); + if (this.expect(";")) { + this.next(); + } + result = result.concat(enumcase); + continue; + } + + if (this.token === this.tok.T_ATTRIBUTE) { + attrs = this.read_attr_list(); + } + + const locStart = this.position(); + // read member flags const flags = this.read_member_flags(false); // check constant if (this.token === this.tok.T_CONST) { - const constants = this.read_constant_list(flags); + const constants = this.read_constant_list(flags, attrs); if (this.expect(";")) { this.next(); } @@ -91,7 +123,7 @@ module.exports = { } // jump over T_VAR then land on T_VARIABLE - if (this.token === this.tok.T_VAR) { + if (allow_variables && this.token === this.tok.T_VAR) { this.next().expect(this.tok.T_VARIABLE); flags[0] = null; // public (as null) flags[1] = 0; // non static var @@ -99,20 +131,27 @@ module.exports = { if (this.token === this.tok.T_FUNCTION) { // reads a function - result.push(this.read_function(false, flags)); + result.push(this.read_function(false, flags, attrs, locStart)); + attrs = []; } else if ( - this.token === this.tok.T_VARIABLE || - // support https://wiki.php.net/rfc/typed_properties_v2 - (this.version >= 704 && - (this.token === "?" || - this.token === this.tok.T_CALLABLE || - this.token === this.tok.T_ARRAY || - this.token === this.tok.T_NS_SEPARATOR || - this.token === this.tok.T_STRING || - this.token === this.tok.T_NAMESPACE)) + allow_variables && + (this.token === this.tok.T_VARIABLE || + (this.version >= 801 && this.token === this.tok.T_READ_ONLY) || + // support https://wiki.php.net/rfc/typed_properties_v2 + (this.version >= 704 && + (this.token === "?" || + this.token === this.tok.T_ARRAY || + this.token === this.tok.T_CALLABLE || + this.token === this.tok.T_NAMESPACE || + this.token === this.tok.T_NAME_FULLY_QUALIFIED || + this.token === this.tok.T_NAME_QUALIFIED || + this.token === this.tok.T_NAME_RELATIVE || + this.token === this.tok.T_NS_SEPARATOR || + this.token === this.tok.T_STRING))) ) { // reads a variable - const variables = this.read_variable_list(flags); + const variables = this.read_variable_list(flags, attrs); + attrs = []; this.expect(";"); this.next(); result = result.concat(variables); @@ -120,7 +159,8 @@ module.exports = { // raise an error this.error([ this.tok.T_CONST, - this.tok.T_VARIABLE, + ...(allow_variables ? [this.tok.T_VARIABLE] : []), + ...(allow_enum_cases ? [this.tok.T_CASE] : []), this.tok.T_FUNCTION, ]); // ignore token @@ -131,17 +171,17 @@ module.exports = { this.next(); return result; }, - /** + /* * Reads variable list * ```ebnf * variable_list ::= (variable_declaration ',')* variable_declaration * ``` */ - read_variable_list: function (flags) { + read_variable_list: function (flags, attrs) { const result = this.node("propertystatement"); const properties = this.read_list( - /** + /* * Reads a variable declaration * * ```ebnf @@ -150,40 +190,49 @@ module.exports = { */ function read_variable_declaration() { const result = this.node("property"); + let readonly = false; + if (this.token === this.tok.T_READ_ONLY) { + readonly = true; + this.next(); + } const [nullable, type] = this.read_optional_type(); this.expect(this.tok.T_VARIABLE); let propName = this.node("identifier"); const name = this.text().substring(1); // ignore $ this.next(); propName = propName(name); - if (this.token === ";" || this.token === ",") { - return result(propName, null, nullable, type); - } else if (this.token === "=") { + + let value = null; + + this.expect([",", ";", "="]); + if (this.token === "=") { // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L815 - return result(propName, this.next().read_expr(), nullable, type); - } else { - this.expect([",", ";", "="]); - return result(propName, null, nullable, type); + value = this.next().read_expr(); } + return result(propName, value, readonly, nullable, type, attrs || []); }, - "," + ",", ); return result(null, properties, flags); }, - /** + /* * Reads constant list * ```ebnf - * constant_list ::= T_CONST (constant_declaration ',')* constant_declaration + * constant_list ::= T_CONST [type] (constant_declaration ',')* constant_declaration * ``` */ - read_constant_list: function (flags) { + read_constant_list: function (flags, attrs) { if (this.expect(this.tok.T_CONST)) { this.next(); } + + const [nullable, type] = + this.version >= 803 ? this.read_optional_type() : [false, null]; + const result = this.node("classconstant"); const items = this.read_list( - /** + /* * Reads a constant declaration * * ```ebnf @@ -211,12 +260,12 @@ module.exports = { } return result(constName, value); }, - "," + ",", ); - return result(null, items, flags); + return result(null, items, flags, nullable, type, attrs || []); }, - /** + /* * Read member flags * @return array * 1st index : 0 => public, 1 => protected, 2 => private @@ -256,11 +305,11 @@ module.exports = { break; } if (asInterface) { - if (idx == 0 && val == 2) { + if (idx === 0 && val === 2) { // an interface can't be private this.expect([this.tok.T_PUBLIC, this.tok.T_PROTECTED]); val = -1; - } else if (idx == 2 && val == 1) { + } else if (idx === 2 && val === 1) { // an interface cant be abstract this.error(); val = -1; @@ -275,12 +324,12 @@ module.exports = { } while (this.next().is("T_MEMBER_FLAGS")); } - if (result[1] == -1) result[1] = 0; - if (result[2] == -1) result[2] = 0; + if (result[1] === -1) result[1] = 0; + if (result[2] === -1) result[2] = 0; return result; }, - /** + /* * optional_type: * /- empty -/ { $$ = NULL; } * | type_expr { $$ = $1; } @@ -304,15 +353,19 @@ module.exports = { * ; */ read_optional_type: function () { - let nullable = false; - if (this.token === "?") { - nullable = true; + const nullable = this.token === "?"; + if (nullable) { this.next(); } - let type = this.read_type(); + + if (this.peek() === "=") { + return [false, null]; + } + + let type = this.read_types(); if (nullable && !type) { this.raiseError( - "Expecting a type definition combined with nullable operator" + "Expecting a type definition combined with nullable operator", ); } if (!nullable && !type) { @@ -333,13 +386,13 @@ module.exports = { return [nullable, type]; }, - /** + /* * reading an interface * ```ebnf * interface ::= T_INTERFACE T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' INTERFACE_BODY '}' * ``` */ - read_interface_declaration_statement: function () { + read_interface_declaration_statement: function (attrs) { const result = this.node("interface"); if (this.token !== this.tok.T_INTERFACE) { this.error(this.tok.T_INTERFACE); @@ -354,16 +407,17 @@ module.exports = { const propExtends = this.read_interface_extends_list(); this.expect("{"); const body = this.next().read_interface_body(); - return result(propName, propExtends, body); + return result(propName, propExtends, body, attrs || []); }, - /** + /* * Reads an interface body * ```ebnf * interface_body ::= (member_flags? (T_CONST | T_FUNCTION))* * ``` */ read_interface_body: function () { - let result = []; + let result = [], + attrs = []; while (this.token !== this.EOF && this.token !== "}") { if (this.token === this.tok.T_COMMENT) { @@ -376,24 +430,34 @@ module.exports = { continue; } + const locStart = this.position(); + + attrs = this.read_attr_list(); // read member flags const flags = this.read_member_flags(true); // check constant - if (this.token == this.tok.T_CONST) { - const constants = this.read_constant_list(flags); + if (this.token === this.tok.T_CONST) { + const constants = this.read_constant_list(flags, attrs); if (this.expect(";")) { this.next(); } result = result.concat(constants); + attrs = []; } else if (this.token === this.tok.T_FUNCTION) { // reads a function - const method = this.read_function_declaration(2, flags); + const method = this.read_function_declaration( + 2, + flags, + attrs, + locStart, + ); method.parseFlags(flags); result.push(method); if (this.expect(";")) { this.next(); } + attrs = []; } else { // raise an error this.error([this.tok.T_CONST, this.tok.T_FUNCTION]); @@ -405,7 +469,7 @@ module.exports = { } return result; }, - /** + /* * reading a trait * ```ebnf * trait ::= T_TRAIT T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' FUNCTION* '}' @@ -425,10 +489,10 @@ module.exports = { this.next(); propName = propName(name); this.expect("{"); - const body = this.next().read_class_body(); + const body = this.next().read_class_body(true, false); return result(propName, body); }, - /** + /* * reading a use statement * ```ebnf * trait_use_statement ::= namespace_name (',' namespace_name)* ('{' trait_use_alias '}')? @@ -461,7 +525,7 @@ module.exports = { } return node(traits, adaptations); }, - /** + /* * Reading trait alias * ```ebnf * trait_use_alias ::= namespace_name ( T_DOUBLE_COLON T_STRING )? (T_INSTEADOF namespace_name) | (T_AS member_flags? T_STRING) @@ -508,7 +572,7 @@ module.exports = { "traitprecedence", trait, method, - this.next().read_name_list() + this.next().read_name_list(), ); } else if (this.token === this.tok.T_AS) { // handle trait alias diff --git a/src/parser/comment.js b/src/parser/comment.js index a8dd9e5c8..fdddb2529 100644 --- a/src/parser/comment.js +++ b/src/parser/comment.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Comments with // or # or / * ... * / */ read_comment: function () { @@ -14,7 +14,7 @@ module.exports = { let result = this.ast.prepare( text.substring(0, 2) === "/*" ? "commentblock" : "commentline", null, - this + this, ); const offset = this.lexer.yylloc.first_offset; // handle location on comment @@ -30,7 +30,7 @@ module.exports = { this.prev = prev; return result; }, - /** + /* * Comments with / ** ... * / */ read_doc_comment: function () { diff --git a/src/parser/enum.js b/src/parser/enum.js new file mode 100644 index 000000000..f380fe390 --- /dev/null +++ b/src/parser/enum.js @@ -0,0 +1,56 @@ +/** + * Copyright (C) 2018 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ +"use strict"; + +module.exports = { + /* + * reading an enum + * ```ebnf + * enum ::= enum_scope? T_ENUM T_STRING (':' NAMESPACE_NAME)? (T_IMPLEMENTS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' ENUM_BODY '}' + * ``` + */ + read_enum_declaration_statement: function (attrs) { + const result = this.node("enum"); + // graceful mode : ignore token & go next + if (!this.expect(this.tok.T_ENUM)) { + return null; + } + this.next().expect(this.tok.T_STRING); + let propName = this.node("identifier"); + const name = this.text(); + this.next(); + propName = propName(name); + const valueType = this.read_enum_value_type(); + const propImplements = this.read_implements_list(); + this.expect("{"); + const body = this.next().read_class_body(false, true); + const node = result(propName, valueType, propImplements, body); + if (attrs) node.attrGroups = attrs; + return node; + }, + + read_enum_value_type: function () { + if (this.token === ":") { + return this.next().read_namespace_name(); + } + + return null; + }, + + read_enum_case: function () { + this.expect(this.tok.T_CASE); + const result = this.node("enumcase"); + let caseName = this.node("identifier"); + const name = this.next().text(); + this.next(); + caseName = caseName(name); + + const value = this.token === "=" ? this.next().read_expr() : null; + this.expect(";"); + + return result(caseName, value); + }, +}; diff --git a/src/parser/expr.js b/src/parser/expr.js index f7df754c6..538fffdbd 100644 --- a/src/parser/expr.js +++ b/src/parser/expr.js @@ -18,65 +18,100 @@ module.exports = { expr = this.read_expr_item(); } // binary operations - if (this.token === "|") + if (this.token === "|") { return result("bin", "|", expr, this.next().read_expr()); - if (this.token === "&") + } + if (this.token === "&") { return result("bin", "&", expr, this.next().read_expr()); - if (this.token === "^") + } + if (this.token === "^") { return result("bin", "^", expr, this.next().read_expr()); - if (this.token === ".") + } + if (this.token === ".") { return result("bin", ".", expr, this.next().read_expr()); - if (this.token === "+") + } + if (this.token === "+") { return result("bin", "+", expr, this.next().read_expr()); - if (this.token === "-") + } + if (this.token === "-") { return result("bin", "-", expr, this.next().read_expr()); - if (this.token === "*") + } + if (this.token === "*") { return result("bin", "*", expr, this.next().read_expr()); - if (this.token === "/") + } + if (this.token === "/") { return result("bin", "/", expr, this.next().read_expr()); - if (this.token === "%") + } + if (this.token === "%") { return result("bin", "%", expr, this.next().read_expr()); - if (this.token === this.tok.T_POW) + } + if (this.token === this.tok.T_POW) { return result("bin", "**", expr, this.next().read_expr()); - if (this.token === this.tok.T_SL) + } + if (this.token === this.tok.T_SL) { return result("bin", "<<", expr, this.next().read_expr()); - if (this.token === this.tok.T_SR) + } + if (this.token === this.tok.T_SR) { return result("bin", ">>", expr, this.next().read_expr()); + } // more binary operations (formerly bool) - if (this.token === this.tok.T_BOOLEAN_OR) + if (this.token === this.tok.T_BOOLEAN_OR) { return result("bin", "||", expr, this.next().read_expr()); - if (this.token === this.tok.T_LOGICAL_OR) + } + if (this.token === this.tok.T_LOGICAL_OR) { return result("bin", "or", expr, this.next().read_expr()); - if (this.token === this.tok.T_BOOLEAN_AND) + } + if (this.token === this.tok.T_BOOLEAN_AND) { return result("bin", "&&", expr, this.next().read_expr()); - if (this.token === this.tok.T_LOGICAL_AND) + } + if (this.token === this.tok.T_LOGICAL_AND) { return result("bin", "and", expr, this.next().read_expr()); - if (this.token === this.tok.T_LOGICAL_XOR) + } + if (this.token === this.tok.T_LOGICAL_XOR) { return result("bin", "xor", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_IDENTICAL) + } + if (this.token === this.tok.T_IS_IDENTICAL) { return result("bin", "===", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_NOT_IDENTICAL) + } + if (this.token === this.tok.T_IS_NOT_IDENTICAL) { return result("bin", "!==", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_EQUAL) + } + if (this.token === this.tok.T_IS_EQUAL) { return result("bin", "==", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_NOT_EQUAL) + } + if (this.token === this.tok.T_IS_NOT_EQUAL) { return result("bin", "!=", expr, this.next().read_expr()); - if (this.token === "<") + } + if (this.token === "<") { return result("bin", "<", expr, this.next().read_expr()); - if (this.token === ">") + } + if (this.token === ">") { return result("bin", ">", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_SMALLER_OR_EQUAL) + } + if (this.token === this.tok.T_IS_SMALLER_OR_EQUAL) { return result("bin", "<=", expr, this.next().read_expr()); - if (this.token === this.tok.T_IS_GREATER_OR_EQUAL) + } + if (this.token === this.tok.T_IS_GREATER_OR_EQUAL) { return result("bin", ">=", expr, this.next().read_expr()); - if (this.token === this.tok.T_SPACESHIP) + } + if (this.token === this.tok.T_SPACESHIP) { return result("bin", "<=>", expr, this.next().read_expr()); + } + if (this.token === this.tok.T_OBJECT_OPERATOR) { + if (this.version < 804) { + this.raiseError( + "New without parenthesis is not allowed before PHP 8.4", + ); + } + return result("bin", "->", expr, this.next().read_expr()); + } + if (this.token === this.tok.T_INSTANCEOF) { expr = result( "bin", "instanceof", expr, - this.next().read_class_name_reference() + this.next().read_class_name_reference(), ); if ( this.token !== ";" && @@ -89,8 +124,9 @@ module.exports = { // extra operations : // $username = $_GET['user'] ?? 'nobody'; - if (this.token === this.tok.T_COALESCE) + if (this.token === this.tok.T_COALESCE) { return result("bin", "??", expr, this.next().read_expr()); + } // extra operations : // $username = $_GET['user'] ? true : false; @@ -109,21 +145,21 @@ module.exports = { return expr; }, - /** + /* * Reads a cast expression */ read_expr_cast: function (type) { return this.node("cast")(type, this.text(), this.next().read_expr()); }, - /** + /* * Read a isset variable */ read_isset_variable: function () { return this.read_expr(); }, - /** + /* * Reads isset variables */ read_isset_variables: function () { @@ -192,7 +228,7 @@ module.exports = { return result; }, - /** + /* * Reads optional expression */ read_optional_expr: function (stopToken) { @@ -203,7 +239,7 @@ module.exports = { return null; }, - /** + /* * Reads exit expression */ read_exit_expr: function () { @@ -218,22 +254,28 @@ module.exports = { return expression; }, - /** + /* * ```ebnf * Reads an expression * expr ::= @todo * ``` */ read_expr_item: function () { - let result, expr; - if (this.token === "+") + let result, + expr, + attrs = []; + if (this.token === "+") { return this.node("unary")("+", this.next().read_expr()); - if (this.token === "-") + } + if (this.token === "-") { return this.node("unary")("-", this.next().read_expr()); - if (this.token === "!") + } + if (this.token === "!") { return this.node("unary")("!", this.next().read_expr()); - if (this.token === "~") + } + if (this.token === "~") { return this.node("unary")("~", this.next().read_expr()); + } if (this.token === "(") { expr = this.next().read_expr(); @@ -275,9 +317,10 @@ module.exports = { } } if (!hasItem) { + /* istanbul ignore next */ this.raiseError( "Fatal Error : Cannot use empty list on line " + - this.lexer.yylloc.first_line + this.lexer.yylloc.first_line, ); } @@ -288,10 +331,11 @@ module.exports = { return assign( result(assignList, false), this.next().read_expr(), - "=" + "=", ); } else { // error fallback : list($a, $b); + /* istanbul ignore next */ return result(assignList, false); } } else { @@ -299,8 +343,13 @@ module.exports = { } } - if (this.token === this.tok.T_CLONE) + if (this.token === this.tok.T_ATTRIBUTE) { + attrs = this.read_attr_list(); + } + + if (this.token === this.tok.T_CLONE) { return this.node("clone")(this.next().read_expr()); + } switch (this.token) { case this.tok.T_INC: @@ -320,6 +369,9 @@ module.exports = { case this.tok.T_REQUIRE: case this.tok.T_REQUIRE_ONCE: return this.read_internal_functions_in_yacc(); + + case this.tok.T_MATCH: + return this.read_match_expression(); case this.tok.T_INT_CAST: return this.read_expr_cast("int"); @@ -328,7 +380,7 @@ module.exports = { case this.tok.T_STRING_CAST: return this.read_expr_cast( - this.text().indexOf("binary") !== -1 ? "binary" : "string" + this.text().indexOf("binary") !== -1 ? "binary" : "string", ); case this.tok.T_ARRAY_CAST: @@ -343,6 +395,14 @@ module.exports = { case this.tok.T_UNSET_CAST: return this.read_expr_cast("unset"); + case this.tok.T_THROW: { + if (this.version < 800) { + this.raiseError("PHP 8+ is required to use throw as an expression"); + } + const result = this.node("throw"); + const expr = this.next().read_expr(); + return result(expr); + } case this.tok.T_EXIT: { const useDie = this.lexer.yytext.toLowerCase() === "die"; result = this.node("exit"); @@ -379,7 +439,7 @@ module.exports = { case this.tok.T_FN: case this.tok.T_FUNCTION: - return this.read_inline_function(); + return this.read_inline_function(undefined, attrs); case this.tok.T_STATIC: { const backup = [this.token, this.lexer.getState()]; @@ -389,7 +449,7 @@ module.exports = { (this.version >= 704 && this.token === this.tok.T_FN) ) { // handles static function - return this.read_inline_function([0, 1, 0]); + return this.read_inline_function([0, 1, 0], attrs); } else { // rollback this.lexer.tokens.push(backup); @@ -489,7 +549,7 @@ module.exports = { expr = this.read_scalar(); if (expr.kind === "array" && expr.shortForm && this.token === "=") { // list assign - const list = this.node("list")(expr.items, true); + const list = this.convertToList(expr); if (expr.loc) list.loc = expr.loc; const right = this.next().read_expr(); return result("assign", list, right, "="); @@ -508,7 +568,28 @@ module.exports = { return expr; }, - /** + /* + * Recursively convert nested array to nested list. + */ + convertToList: function (array) { + const convertedItems = array.items.map((entry) => { + if ( + entry.value && + entry.value.kind === "array" && + entry.value.shortForm + ) { + entry.value = this.convertToList(entry.value); + } + return entry; + }); + const node = this.node("list")(convertedItems, true); + if (array.loc) node.loc = array.loc; + if (array.leadingComments) node.leadingComments = array.leadingComments; + if (array.trailingComments) node.trailingComments = array.trailingComments; + return node; + }, + + /* * Reads assignment * @param {*} left */ @@ -527,7 +608,7 @@ module.exports = { return result("assignref", left, right); }, - /** + /* * * inline_function: * function returns_ref backup_doc_comment '(' parameter_list ')' lexical_vars return_type @@ -542,9 +623,11 @@ module.exports = { * ((zend_ast_decl *) $$)->lex_pos = $10; * CG(extra_fn_flags) = $9; } * */ - read_inline_function: function (flags) { + read_inline_function: function (flags, attrs) { if (this.token === this.tok.T_FUNCTION) { - return this.read_function(true, flags); + const result = this.read_function(true, flags, attrs); + result.attrGroups = attrs; + return result; } // introduced in PHP 7.4 if (!this.version >= 704) { @@ -567,21 +650,101 @@ module.exports = { nullable = true; this.next(); } - returnType = this.read_type(); + returnType = this.read_types(); } if (this.expect(this.tok.T_DOUBLE_ARROW)) this.next(); const body = this.read_expr(); - return node( + const result = node( params, isRef, body, returnType, nullable, - flags ? true : false + flags ? true : false, ); + result.attrGroups = attrs; + return result; + }, + + read_match_expression: function () { + const node = this.node("match"); + this.expect(this.tok.T_MATCH) && this.next(); + if (this.version < 800) { + this.raiseError("Match statements are not allowed before PHP 8"); + } + let cond = null; + let arms = []; + if (this.expect("(")) this.next(); + cond = this.read_expr(); + if (this.expect(")")) this.next(); + if (this.expect("{")) this.next(); + arms = this.read_match_arms(); + if (this.expect("}")) this.next(); + return node(cond, arms); + }, + + read_match_arms: function () { + return this.read_list(() => this.read_match_arm(), ",", true); + }, + + read_match_arm: function () { + if (this.token === "}") { + return; + } + return this.node("matcharm")(this.read_match_arm_conds(), this.read_expr()); + }, + + read_match_arm_conds: function () { + let conds = []; + if (this.token === this.tok.T_DEFAULT) { + conds = null; + this.next(); + } else { + conds.push(this.read_expr()); + while (this.token === ",") { + this.next(); + if (this.token === this.tok.T_DOUBLE_ARROW) { + this.next(); + return conds; + } + conds.push(this.read_expr()); + } + } + if (this.expect(this.tok.T_DOUBLE_ARROW)) { + this.next(); + } + return conds; + }, + + read_attribute() { + const name = this.text(); + let args = []; + this.next(); + if (this.token === "(") { + args = this.read_argument_list(); + } + return this.node("attribute")(name, args); + }, + read_attr_list() { + const list = []; + if (this.token === this.tok.T_ATTRIBUTE) { + do { + const attrGr = this.node("attrgroup")([]); + this.next(); + attrGr.attrs.push(this.read_attribute()); + while (this.token === ",") { + this.next(); + if (this.token !== "]") attrGr.attrs.push(this.read_attribute()); + } + list.push(attrGr); + this.expect("]"); + this.next(); + } while (this.token === this.tok.T_ATTRIBUTE); + } + return list; }, - /** + /* * ```ebnf * new_expr ::= T_NEW (namespace_name function_argument_list) | (T_CLASS ... class declaration) * ``` @@ -591,6 +754,17 @@ module.exports = { const result = this.node("new"); this.expect(this.tok.T_NEW) && this.next(); let args = []; + if (this.token === "(") { + this.next(); + const newExp = this.read_expr(); + this.expect(")"); + this.next(); + if (this.token === "(") { + args = this.read_argument_list(); + } + return result(newExp, args); + } + const attrs = this.read_attr_list(); if (this.token === this.tok.T_CLASS) { const what = this.node("class"); // Annonymous class declaration @@ -601,21 +775,26 @@ module.exports = { const propImplements = this.read_implements_list(); let body = null; if (this.expect("{")) { - body = this.next().read_class_body(); + body = this.next().read_class_body(true, false); } - return result( - what(null, propExtends, propImplements, body, [0, 0, 0]), - args - ); + const whatNode = what(null, propExtends, propImplements, body, [0, 0, 0]); + whatNode.attrGroups = attrs; + return result(whatNode, args); } // Already existing class - const name = this.read_new_class_name(); + let name = this.read_new_class_name(); + while (this.token === "[") { + const offsetNode = this.node("offsetlookup"); + const offset = this.next().read_encaps_var_offset(); + this.expect("]") && this.next(); + name = offsetNode(name, offset); + } if (this.token === "(") { args = this.read_argument_list(); } return result(name, args); }, - /** + /* * Reads a class name * ```ebnf * read_new_class_name ::= namespace_name | variable @@ -624,6 +803,9 @@ module.exports = { read_new_class_name: function () { if ( this.token === this.tok.T_NS_SEPARATOR || + this.token === this.tok.T_NAME_RELATIVE || + this.token === this.tok.T_NAME_QUALIFIED || + this.token === this.tok.T_NAME_FULLY_QUALIFIED || this.token === this.tok.T_STRING || this.token === this.tok.T_NAMESPACE ) { diff --git a/src/parser/function.js b/src/parser/function.js index a9f79b75e..314eca2d4 100644 --- a/src/parser/function.js +++ b/src/parser/function.js @@ -6,17 +6,17 @@ "use strict"; module.exports = { - /** + /* * checks if current token is a reference keyword */ is_reference: function () { - if (this.token == "&") { + if (this.token === "&") { this.next(); return true; } return false; }, - /** + /* * checks if current token is a variadic keyword */ is_variadic: function () { @@ -26,16 +26,18 @@ module.exports = { } return false; }, - /** + /* * reading a function * ```ebnf * function ::= function_declaration code_block * ``` */ - read_function: function (closure, flag) { + read_function: function (closure, flag, attrs, locStart) { const result = this.read_function_declaration( closure ? 1 : flag ? 2 : 0, - flag && flag[1] === 1 + flag && flag[1] === 1, + attrs || [], + locStart, ); if (flag && flag[2] == 1) { // abstract function : @@ -56,13 +58,13 @@ module.exports = { } return result; }, - /** + /* * reads a function declaration (without his body) * ```ebnf * function_declaration ::= T_FUNCTION '&'? T_STRING '(' parameter_list ')' * ``` */ - read_function_declaration: function (type, isStatic) { + read_function_declaration: function (type, isStatic, attrs, locStart) { let nodeName = "function"; if (type === 1) { nodeName = "closure"; @@ -118,7 +120,7 @@ module.exports = { name = nameNode(name); } if (this.expect("(")) this.next(); - const params = this.read_parameter_list(); + const params = this.read_parameter_list(name.name === "__construct"); if (this.expect(")")) this.next(); if (type === 1) { use = this.read_lexical_vars(); @@ -128,13 +130,32 @@ module.exports = { nullable = true; this.next(); } - returnType = this.read_type(); + returnType = this.read_types(); } + const apply_attrgroup_location = (node) => { + node.attrGroups = attrs || []; + + if (locStart && node.loc) { + node.loc.start = locStart; + if (node.loc.source) { + node.loc.source = this.lexer._input.substr( + node.loc.start.offset, + node.loc.end.offset - node.loc.start.offset, + ); + } + } + return node; + }; + if (type === 1) { // closure - return result(params, isRef, use, returnType, nullable, isStatic); + return apply_attrgroup_location( + result(params, isRef, use, returnType, nullable, isStatic), + ); } - return result(name, params, isRef, returnType, nullable); + return apply_attrgroup_location( + result(name, params, isRef, returnType, nullable), + ); }, read_lexical_vars: function () { @@ -150,11 +171,31 @@ module.exports = { return result; }, + read_list_with_dangling_comma: function (item) { + const result = []; + + while (this.token != this.EOF) { + result.push(item()); + if (this.token == ",") { + this.next(); + if (this.version >= 800 && this.token === ")") { + return result; + } + } else if (this.token == ")") { + break; + } else { + this.error([",", ")"]); + break; + } + } + return result; + }, + read_lexical_var_list: function () { - return this.read_list(this.read_lexical_var, ","); + return this.read_list_with_dangling_comma(this.read_lexical_var.bind(this)); }, - /** + /* * ```ebnf * lexical_var ::= '&'? T_VARIABLE * ``` @@ -169,49 +210,90 @@ module.exports = { this.next(); return result(name, false); }, - /** + /* * reads a list of parameters * ```ebnf * parameter_list ::= (parameter ',')* parameter? * ``` */ - read_parameter_list: function () { - const result = []; - if (this.token != ")") { - while (this.token != this.EOF) { - result.push(this.read_parameter()); - if (this.token == ",") { - this.next(); - } else if (this.token == ")") { - break; - } else { - this.error([",", ")"]); - break; - } - } + read_parameter_list: function (is_class_constructor) { + if (this.token !== ")") { + let wasVariadic = false; + + return this.read_list_with_dangling_comma( + function () { + const parameter = this.read_parameter(is_class_constructor); + if (parameter) { + // variadic parameters can only be defined at the end of the parameter list + if (wasVariadic) { + this.raiseError( + "Unexpected parameter after a variadic parameter", + ); + } + if (parameter.variadic) { + wasVariadic = true; + } + } + return parameter; + }.bind(this), + ",", + ); } - return result; + + return []; }, - /** + /* * ```ebnf * parameter ::= type? '&'? T_ELLIPSIS? T_VARIABLE ('=' expr)? * ``` * @see https://github.com/php/php-src/blob/493524454d66adde84e00d249d607ecd540de99f/Zend/zend_language_parser.y#L640 */ - read_parameter: function () { + read_parameter: function (is_class_constructor) { const node = this.node("parameter"); let parameterName = null; let value = null; - let type = null; + let types = null; let nullable = false; + let readonly = false; + let attrs = []; + if (this.token === this.tok.T_ATTRIBUTE) attrs = this.read_attr_list(); + + if (this.version >= 801 && this.token === this.tok.T_READ_ONLY) { + if (is_class_constructor) { + this.next(); + readonly = true; + } else { + this.raiseError( + "readonly properties can be used only on class constructor", + ); + } + } + + const flags = this.read_promoted(); + + if ( + !readonly && + this.version >= 801 && + this.token === this.tok.T_READ_ONLY + ) { + if (is_class_constructor) { + this.next(); + readonly = true; + } else { + this.raiseError( + "readonly properties can be used only on class constructor", + ); + } + } + if (this.token === "?") { this.next(); nullable = true; } - type = this.read_type(); - if (nullable && !type) { + types = this.read_types(); + if (nullable && !types) { this.raiseError( - "Expecting a type definition combined with nullable operator" + "Expecting a type definition combined with nullable operator", ); } const isRef = this.is_reference(); @@ -225,9 +307,90 @@ module.exports = { if (this.token == "=") { value = this.next().read_expr(); } - return node(parameterName, type, value, isRef, isVariadic, nullable); + const result = node( + parameterName, + types, + value, + isRef, + isVariadic, + readonly, + nullable, + flags, + ); + if (attrs) result.attrGroups = attrs; + return result; }, - /** + read_types: function () { + const MODE_UNSET = "unset"; + const MODE_UNION = "union"; + const MODE_INTERSECTION = "intersection"; + + const types = []; + let mode = MODE_UNSET; + const type = this.read_type(); + if (!type) return null; + + // we have matched a single type + types.push(type); + + // is the current token a: + // - | for union type + // - & for intersection type (> php 8.1) + while (this.token === "|" || (this.version >= 801 && this.token === "&")) { + const nextToken = this.peek(); + + if ( + nextToken === this.tok.T_ELLIPSIS || + nextToken === this.tok.T_VARIABLE + ) { + // the next token is part of the variable (or the variable itself), + // we're not gonna match anymore types + break; + } + + if (mode === MODE_UNSET) { + // are we in union or intersection "mode" + mode = this.token === "|" ? MODE_UNION : MODE_INTERSECTION; + } else { + // it is not possible to mix "modes" + if ( + (mode === MODE_UNION && this.token !== "|") || + (mode === MODE_INTERSECTION && this.token !== "&") + ) { + this.raiseError( + 'Unexpect token "' + this.token + '", "|" and "&" can not be mixed', + ); + } + } + + this.next(); + types.push(this.read_type()); + } + if (types.length === 1) { + return types[0]; + } else { + return mode === MODE_INTERSECTION + ? this.node("intersectiontype")(types) + : this.node("uniontype")(types); + } + }, + read_promoted: function () { + const MODIFIER_PUBLIC = 1; + const MODIFIER_PROTECTED = 2; + const MODIFIER_PRIVATE = 4; + if (this.token === this.tok.T_PUBLIC) { + this.next(); + return MODIFIER_PUBLIC; + } else if (this.token === this.tok.T_PROTECTED) { + this.next(); + return MODIFIER_PROTECTED; + } else if (this.token === this.tok.T_PRIVATE) { + this.next(); + return MODIFIER_PRIVATE; + } + return 0; + }, + /* * Reads a list of arguments * ```ebnf * function_argument_list ::= '(' (argument_list (',' argument_list)*)? ')' @@ -236,13 +399,20 @@ module.exports = { read_argument_list: function () { let result = []; this.expect("(") && this.next(); - if (this.token !== ")") { + if ( + this.version >= 801 && + this.token === this.tok.T_ELLIPSIS && + this.peek() === ")" + ) { + result.push(this.node("variadicplaceholder")()); + this.next(); + } else if (this.token !== ")") { result = this.read_non_empty_argument_list(); } this.expect(")") && this.next(); return result; }, - /** + /* * Reads non empty argument list */ read_non_empty_argument_list: function () { @@ -252,30 +422,49 @@ module.exports = { function () { const argument = this.read_argument(); if (argument) { - if (wasVariadic) { - this.raiseError("Unexpected argument after a variadic argument"); + const isVariadic = argument.kind === "variadic"; + // variadic arguments can only be followed by other variadic arguments + if (wasVariadic && !isVariadic) { + this.raiseError( + "Unexpected non-variadic argument after a variadic argument", + ); } - if (argument.kind === "variadic") { + if (isVariadic) { wasVariadic = true; } } return argument; }.bind(this), - "," + ",", ); }, - /** + /* * ```ebnf - * argument_list ::= T_ELLIPSIS? expr + * argument_list ::= T_STRING ':' expr | T_ELLIPSIS? expr * ``` */ read_argument: function () { if (this.token === this.tok.T_ELLIPSIS) { return this.node("variadic")(this.next().read_expr()); } + if ( + this.token === this.tok.T_STRING || + Object.values(this.lexer.keywords).includes(this.token) + ) { + const nextToken = this.peek(); + if (nextToken === ":") { + if (this.version < 800) { + this.raiseError("PHP 8+ is required to use named arguments"); + } + return this.node("namedargument")( + this.text(), + this.next().next().read_expr(), + ); + } + } return this.read_expr(); }, - /** + /* * read type hinting * ```ebnf * type ::= T_ARRAY | T_CALLABLE | namespace_name @@ -287,7 +476,13 @@ module.exports = { const type = this.text(); this.next(); return result("typereference", type.toLowerCase(), type); - } else if (this.token === this.tok.T_STRING) { + } else if ( + this.token === this.tok.T_NAME_RELATIVE || + this.token === this.tok.T_NAME_QUALIFIED || + this.token === this.tok.T_NAME_FULLY_QUALIFIED || + this.token === this.tok.T_STRING || + this.token === this.tok.T_STATIC + ) { const type = this.text(); const backup = [this.token, this.lexer.getState()]; this.next(); @@ -304,13 +499,6 @@ module.exports = { result.destroy(); return this.read_namespace_name(); } - } else if ( - this.token === this.tok.T_NAMESPACE || - this.token === this.tok.T_NS_SEPARATOR - ) { - // fix : destroy not consumed node (release comments) - result.destroy(); - return this.read_namespace_name(); } // fix : destroy not consumed node (release comments) result.destroy(); diff --git a/src/parser/if.js b/src/parser/if.js index b2a46ae5d..fda94ee19 100644 --- a/src/parser/if.js +++ b/src/parser/if.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads an IF statement * * ```ebnf @@ -48,7 +48,7 @@ module.exports = { } return result(test, body, alternate, shortForm); }, - /** + /* * reads an if expression : '(' expr ')' */ read_if_expr: function () { @@ -57,7 +57,7 @@ module.exports = { this.expect(")") && this.next(); return result; }, - /** + /* * reads an elseif (expr): statements */ read_elseif_short: function () { @@ -79,7 +79,7 @@ module.exports = { } return result(test, body(null, items), alternate, true); }, - /** + /* * */ read_else_short: function () { diff --git a/src/parser/loops.js b/src/parser/loops.js index e84e63d51..62847a6b8 100644 --- a/src/parser/loops.js +++ b/src/parser/loops.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads a while statement * ```ebnf * while ::= T_WHILE (statement | ':' inner_statement_list T_ENDWHILE ';') @@ -31,7 +31,7 @@ module.exports = { } return result(test, body, shortForm); }, - /** + /* * Reads a do / while loop * ```ebnf * do ::= T_DO statement T_WHILE '(' expr ')' ';' @@ -53,7 +53,7 @@ module.exports = { } return result(test, body); }, - /** + /* * Read a for incremental loop * ```ebnf * for ::= T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement @@ -98,7 +98,7 @@ module.exports = { } return result(init, test, increment, body, shortForm); }, - /** + /* * Reads a foreach loop * ```ebnf * foreach ::= '(' expr T_AS foreach_variable (T_DOUBLE_ARROW foreach_variable)? ')' statement @@ -140,7 +140,7 @@ module.exports = { } return result(source, key, value, body, shortForm); }, - /** + /* * Reads a foreach variable statement * ```ebnf * foreach_variable = diff --git a/src/parser/main.js b/src/parser/main.js index ba5a5db1c..8b18dfff8 100644 --- a/src/parser/main.js +++ b/src/parser/main.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * ```ebnf * start ::= (namespace | top_statement)* * ``` diff --git a/src/parser/namespace.js b/src/parser/namespace.js index 2825fe337..5f1e30431 100644 --- a/src/parser/namespace.js +++ b/src/parser/namespace.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads a namespace declaration block * ```ebnf * namespace ::= T_NAMESPACE namespace_name? '{' @@ -23,7 +23,7 @@ module.exports = { this.expect(this.tok.T_NAMESPACE) && this.next(); let name; - if (this.token == "{") { + if (this.token === "{") { name = { name: [""], }; @@ -32,12 +32,12 @@ module.exports = { } this.currentNamespace = name; - if (this.token == ";") { + if (this.token === ";") { this.currentNamespace = name; body = this.next().read_top_statements(); this.expect(this.EOF); return result(name.name, body, false); - } else if (this.token == "{") { + } else if (this.token === "{") { this.currentNamespace = name; body = this.next().read_top_statements(); this.expect("}") && this.next(); @@ -49,12 +49,6 @@ module.exports = { body.push(this.node("noop")()); } return result(name.name, body, true); - } else if (this.token === "(") { - // @fixme after merging #478 - name.resolution = this.ast.reference.RELATIVE_NAME; - name.name = name.name.substring(1); - result.destroy(); - return this.node("call")(name, this.read_argument_list()); } else { this.error(["{", ";"]); // graceful mode : @@ -64,7 +58,7 @@ module.exports = { return result(name, body, false); } }, - /** + /* * Reads a namespace name * ```ebnf * namespace_name ::= T_NS_SEPARATOR? (T_STRING T_NS_SEPARATOR)* T_STRING @@ -74,30 +68,40 @@ module.exports = { */ read_namespace_name: function (resolveReference) { const result = this.node(); - let relative = false; - if (this.token === this.tok.T_NAMESPACE) { - this.next().expect(this.tok.T_NS_SEPARATOR) && this.next(); - relative = true; + let resolution; + let name = this.text(); + switch (this.token) { + case this.tok.T_NAME_RELATIVE: + resolution = this.ast.name.RELATIVE_NAME; + name = name.replace(/^namespace\\/, ""); + break; + case this.tok.T_NAME_QUALIFIED: + resolution = this.ast.name.QUALIFIED_NAME; + break; + case this.tok.T_NAME_FULLY_QUALIFIED: + resolution = this.ast.name.FULL_QUALIFIED_NAME; + break; + default: + resolution = this.ast.name.UNQUALIFIED_NAME; + if (!this.expect(this.tok.T_STRING)) { + // graceful mode + return result("name", "", this.ast.name.FULL_QUALIFIED_NAME); + } } - const names = this.read_list( - this.tok.T_STRING, - this.tok.T_NS_SEPARATOR, - true - ); - if ( - !relative && - names.length === 1 && - (resolveReference || this.token !== "(") - ) { - if (names[0].toLowerCase() === "parent") { - return result("parentreference", names[0]); - } else if (names[0].toLowerCase() === "self") { - return result("selfreference", names[0]); + + this.next(); + + if (resolveReference || this.token !== "(") { + if (name.toLowerCase() === "parent") { + return result("parentreference", name); + } else if (name.toLowerCase() === "self") { + return result("selfreference", name); } } - return result("name", names, relative); + + return result("name", name, resolution); }, - /** + /* * Reads a use statement * ```ebnf * use_statement ::= T_USE @@ -127,7 +131,7 @@ module.exports = { this.expect(";") && this.next(); return result; }, - /** + /* * * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1045 */ @@ -135,7 +139,7 @@ module.exports = { // resolved as the same return this.read_variable(true, false); }, - /** + /* * Reads a use declaration * ```ebnf * use_declaration ::= use_type? namespace_name use_alias @@ -151,7 +155,7 @@ module.exports = { const alias = this.read_use_alias(); return result(name.name, alias, type); }, - /** + /* * Reads a list of use declarations * ```ebnf * use_declarations ::= use_declaration (',' use_declaration)* @@ -165,6 +169,9 @@ module.exports = { this.next(); if (typed) { if ( + this.token !== this.tok.T_NAME_RELATIVE && + this.token !== this.tok.T_NAME_QUALIFIED && + this.token !== this.tok.T_NAME_FULLY_QUALIFIED && this.token !== this.tok.T_FUNCTION && this.token !== this.tok.T_CONST && this.token !== this.tok.T_STRING @@ -172,6 +179,9 @@ module.exports = { break; } } else if ( + this.token !== this.tok.T_NAME_RELATIVE && + this.token !== this.tok.T_NAME_QUALIFIED && + this.token !== this.tok.T_NAME_FULLY_QUALIFIED && this.token !== this.tok.T_STRING && this.token !== this.tok.T_NS_SEPARATOR ) { @@ -181,7 +191,7 @@ module.exports = { } return result; }, - /** + /* * Reads a use statement * ```ebnf * use_alias ::= (T_AS T_STRING)? @@ -200,7 +210,7 @@ module.exports = { } return result; }, - /** + /* * Reads the namespace type declaration * ```ebnf * use_type ::= (T_FUNCTION | T_CONST)? diff --git a/src/parser/scalar.js b/src/parser/scalar.js index 88ceace12..f8ccea1f6 100644 --- a/src/parser/scalar.js +++ b/src/parser/scalar.js @@ -17,7 +17,7 @@ const specialChar = { }; module.exports = { - /** + /* * Unescape special chars */ resolve_special_chars: function (text, doubleQuote) { @@ -39,11 +39,11 @@ module.exports = { } else { return String.fromCodePoint(parseInt(p1, 8)); } - } + }, ); }, - /** + /* * Remove all leading spaces each line for heredoc text if there is a indentation * @param {string} text * @param {number} indentation @@ -54,7 +54,7 @@ module.exports = { text, indentation, indentation_uses_spaces, - first_encaps_node + first_encaps_node, ) { if (indentation === 0) { return text; @@ -64,16 +64,16 @@ module.exports = { text, indentation, indentation_uses_spaces, - first_encaps_node + first_encaps_node, ); const matchedChar = indentation_uses_spaces ? " " : "\t"; const removementRegExp = new RegExp( `\\n${matchedChar}{${indentation}}`, - "g" + "g", ); const removementFirstEncapsNodeRegExp = new RegExp( - `^${matchedChar}{${indentation}}` + `^${matchedChar}{${indentation}}`, ); // Rough replace, need more check @@ -86,7 +86,7 @@ module.exports = { return text.replace(removementRegExp, "\n"); }, - /** + /* * Check indentation level of heredoc in text, if mismatch, raiseError * @param {string} text * @param {number} indentation @@ -97,13 +97,14 @@ module.exports = { text, indentation, indentation_uses_spaces, - first_encaps_node + first_encaps_node, ) { const textSize = text.length; let offset = 0; let leadingWhitespaceCharCount = 0; - /** + /* * @var inCoutingState {boolean} reset to true after a new line + * @private */ let inCoutingState = true; const chToCheck = indentation_uses_spaces ? " " : "\t"; @@ -134,7 +135,7 @@ module.exports = { leadingWhitespaceCharCount < indentation ) { this.raiseError( - `Invalid body indentation level (expecting an indentation at least ${indentation})` + `Invalid body indentation level (expecting an indentation at least ${indentation})`, ); } else { inCheckState = false; @@ -149,7 +150,7 @@ module.exports = { } }, - /** + /* * Reads dereferencable scalar */ read_dereferencable_scalar: function () { @@ -168,13 +169,13 @@ module.exports = { this.next(); const textValue = this.resolve_special_chars( text.substring(offset + 1, text.length - 1), - isDoubleQuote + isDoubleQuote, ); value = value( isDoubleQuote, textValue, offset === 1, // unicode flag - text + text, ); if (this.token === this.tok.T_DOUBLE_COLON) { // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1151 @@ -196,7 +197,7 @@ module.exports = { return result; }, - /** + /* * ```ebnf * scalar ::= T_MAGIC_CONST * | T_LNUMBER | T_DNUMBER @@ -230,7 +231,7 @@ module.exports = { if (this.lexer.heredoc_label.indentation > 0) { value = value.substring( 0, - value.length - this.lexer.heredoc_label.indentation + value.length - this.lexer.heredoc_label.indentation, ); } const lastCh = value[value.length - 1]; @@ -250,18 +251,19 @@ module.exports = { this.expect(this.tok.T_END_HEREDOC) && this.next(); const raw = this.lexer._input.substring( start, - this.lexer.yylloc.first_offset + this.lexer.yylloc.first_offset, ); node = node( this.remove_heredoc_leading_whitespace_chars( value, this.lexer.heredoc_label.indentation, this.lexer.heredoc_label.indentation_uses_spaces, - this.lexer.heredoc_label.first_encaps_node + this.lexer.heredoc_label.first_encaps_node, ), raw, - this.lexer.heredoc_label.label + this.lexer.heredoc_label.label, ); + this.lexer.heredoc_label.finished = true; return node; } else { return this.read_encapsed_string(this.tok.T_END_HEREDOC); @@ -289,7 +291,7 @@ module.exports = { } } }, - /** + /* * Handles the dereferencing */ read_dereferencable: function (expr) { @@ -305,7 +307,7 @@ module.exports = { } return result; }, - /** + /* * Reads and extracts an encapsed item * ```ebnf * encapsed_string_item ::= T_ENCAPSED_AND_WHITESPACE @@ -344,11 +346,11 @@ module.exports = { this.resolve_special_chars(text, isDoubleQuote), this.lexer.heredoc_label.indentation, this.lexer.heredoc_label.indentation_uses_spaces, - this.lexer.heredoc_label.first_encaps_node + this.lexer.heredoc_label.first_encaps_node, ) : text, false, - text + text, ); } else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { syntax = "simple"; @@ -362,6 +364,7 @@ module.exports = { this.next(); // check if lookup an offset // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1243 + result.destroy(); if (this.token === "[") { name = name(varName, false); node = this.node("offsetlookup"); @@ -421,7 +424,7 @@ module.exports = { this.lexer.heredoc_label.first_encaps_node = false; return encapsedPart(result, syntax, curly); }, - /** + /* * Reads an encapsed string */ read_encapsed_string: function (expect, isBinary = false) { @@ -467,7 +470,7 @@ module.exports = { this.expect(expect) && this.next(); const raw = this.lexer._input.substring( type === "heredoc" ? labelStart : start - 1, - this.lexer.yylloc.first_offset + this.lexer.yylloc.first_offset, ); node = node(value, raw, type); @@ -477,7 +480,7 @@ module.exports = { } return node; }, - /** + /* * Constant token */ get_magic_constant: function () { diff --git a/src/parser/statement.js b/src/parser/statement.js index c3444a659..09b8f7ddf 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * reading a list of top statements (helper for top_statement*) * ```ebnf * top_statements ::= top_statement* @@ -26,7 +26,7 @@ module.exports = { } return result; }, - /** + /* * reading a top statement * ```ebnf * top_statement ::= @@ -37,18 +37,25 @@ module.exports = { * ``` */ read_top_statement: function () { + let attrs = []; + if (this.token === this.tok.T_ATTRIBUTE) { + attrs = this.read_attr_list(); + } switch (this.token) { case this.tok.T_FUNCTION: - return this.read_function(false, false); + return this.read_function(false, false, attrs); // optional flags case this.tok.T_ABSTRACT: case this.tok.T_FINAL: + case this.tok.T_READ_ONLY: case this.tok.T_CLASS: - return this.read_class_declaration_statement(); + return this.read_class_declaration_statement(attrs); case this.tok.T_INTERFACE: - return this.read_interface_declaration_statement(); + return this.read_interface_declaration_statement(attrs); case this.tok.T_TRAIT: return this.read_trait_declaration_statement(); + case this.tok.T_ENUM: + return this.read_enum_declaration_statement(attrs); case this.tok.T_USE: return this.read_use_statement(); case this.tok.T_CONST: { @@ -71,7 +78,7 @@ module.exports = { return this.read_statement(); } }, - /** + /* * reads a list of simple inner statements (helper for inner_statement*) * ```ebnf * inner_statements ::= inner_statement* @@ -91,7 +98,7 @@ module.exports = { } return result; }, - /** + /* * Reads a list of constants declaration * ```ebnf * const_list ::= T_CONST T_STRING '=' expr (',' T_STRING '=' expr)* ';' @@ -114,10 +121,10 @@ module.exports = { } }, ",", - false + false, ); }, - /** + /* * Reads a list of constants declaration * ```ebnf * declare_list ::= IDENTIFIER '=' expr (',' IDENTIFIER '=' expr)* @@ -143,16 +150,23 @@ module.exports = { } return result; }, - /** + /* * reads a simple inner statement * ```ebnf * inner_statement ::= '{' inner_statements '}' | token * ``` */ read_inner_statement: function () { + let attrs = []; + if (this.token === this.tok.T_ATTRIBUTE) { + attrs = this.read_attr_list(); + } switch (this.token) { - case this.tok.T_FUNCTION: - return this.read_function(false, false); + case this.tok.T_FUNCTION: { + const result = this.read_function(false, false); + result.attrGroups = attrs; + return result; + } // optional flags case this.tok.T_ABSTRACT: case this.tok.T_FINAL: @@ -162,9 +176,11 @@ module.exports = { return this.read_interface_declaration_statement(); case this.tok.T_TRAIT: return this.read_trait_declaration_statement(); + case this.tok.T_ENUM: + return this.read_enum_declaration_statement(); case this.tok.T_HALT_COMPILER: { this.raiseError( - "__HALT_COMPILER() can only be used from the outermost scope" + "__HALT_COMPILER() can only be used from the outermost scope", ); // fallback : returns a node but does not stop the parsing let node = this.node("halt"); @@ -178,7 +194,7 @@ module.exports = { return this.read_statement(); } }, - /** + /* * Reads statements */ read_statement: function () { @@ -222,7 +238,7 @@ module.exports = { case this.tok.T_BREAK: case this.tok.T_CONTINUE: { const result = this.node( - this.token === this.tok.T_CONTINUE ? "continue" : "break" + this.token === this.tok.T_CONTINUE ? "continue" : "break", ); this.next(); const level = this.read_optional_expr(";"); @@ -404,7 +420,7 @@ module.exports = { } } }, - /** + /* * ```ebnf * code_block ::= '{' (inner_statements | top_statements) '}' * ``` diff --git a/src/parser/switch.js b/src/parser/switch.js index 1b927d602..07c1785e7 100644 --- a/src/parser/switch.js +++ b/src/parser/switch.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads a switch statement * ```ebnf * switch ::= T_SWITCH '(' expr ')' switch_case_list @@ -24,7 +24,7 @@ module.exports = { const body = this.read_switch_case_list(); return result(test, body, shortForm); }, - /** + /* * ```ebnf * switch_case_list ::= '{' ';'? case_list* '}' | ':' ';'? case_list* T_ENDSWITCH ';' * ``` @@ -66,7 +66,7 @@ module.exports = { } return result(null, items); }, - /** + /* * ```ebnf * case_list ::= ((T_CASE expr) | T_DEFAULT) (':' | ';') inner_statement* * ``` diff --git a/src/parser/try.js b/src/parser/try.js index 404c2adde..60c396116 100644 --- a/src/parser/try.js +++ b/src/parser/try.js @@ -6,11 +6,11 @@ "use strict"; module.exports = { - /** + /* * ```ebnf * try ::= T_TRY '{' inner_statement* '}' * ( - * T_CATCH '(' namespace_name variable ')' '{' inner_statement* '}' + * T_CATCH '(' namespace_name (variable)? ')' '{' inner_statement* '}' * )* * (T_FINALLY '{' inner_statement* '}')? * ``` @@ -28,7 +28,10 @@ module.exports = { const item = this.node("catch"); this.next().expect("(") && this.next(); const what = this.read_list(this.read_namespace_name, "|", false); - const variable = this.read_variable(true, false); + let variable = null; + if (this.version < 800 || this.token === this.tok.T_VARIABLE) { + variable = this.read_variable(true, false); + } this.expect(")"); catches.push(item(this.next().read_statement(), what, variable)); } diff --git a/src/parser/utils.js b/src/parser/utils.js index 6bbdd1a4f..73734fc54 100644 --- a/src/parser/utils.js +++ b/src/parser/utils.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads a short form of tokens * @param {Number} token - The ending token * @return {Block} @@ -14,6 +14,7 @@ module.exports = { read_short_form: function (token) { const body = this.node("block"); const items = []; + /* istanbul ignore next */ if (this.expect(":")) this.next(); while (this.token != this.EOF && this.token !== token) { items.push(this.read_inner_statement()); @@ -25,12 +26,13 @@ module.exports = { ) { items.push(this.node("noop")()); } + /* istanbul ignore next */ if (this.expect(token)) this.next(); this.expectEndOfStatement(); return body(null, items); }, - /** + /* * https://wiki.php.net/rfc/trailing-comma-function-calls * @param {*} item * @param {*} separator @@ -53,7 +55,7 @@ module.exports = { return result; }, - /** + /* * Helper : reads a list of tokens / sample : T_STRING ',' T_STRING ... * ```ebnf * list ::= separator? ( item separator )* item @@ -95,7 +97,7 @@ module.exports = { return result; }, - /** + /* * Reads a list of names separated by a comma * * ```ebnf @@ -114,7 +116,7 @@ module.exports = { return this.read_list(this.read_namespace_name, ",", false); }, - /** + /* * Reads the byref token and assign it to the specified node * @param {*} cb */ @@ -130,7 +132,7 @@ module.exports = { return result; }, - /** + /* * Reads a list of variables declarations * * ```ebnf @@ -150,6 +152,7 @@ module.exports = { const node = this.node("staticvariable"); let variable = this.node("variable"); // plain variable name + /* istanbul ignore else */ if (this.expect(this.tok.T_VARIABLE)) { const name = this.text().substring(1); this.next(); diff --git a/src/parser/variable.js b/src/parser/variable.js index 1f3d17e23..4fd36d6d5 100644 --- a/src/parser/variable.js +++ b/src/parser/variable.js @@ -6,7 +6,7 @@ "use strict"; module.exports = { - /** + /* * Reads a variable * * ```ebnf @@ -24,11 +24,10 @@ module.exports = { */ read_variable: function (read_only, encapsed) { let result; - // check the byref flag if (this.token === "&") { return this.read_byref( - this.read_variable.bind(this, read_only, encapsed) + this.read_variable.bind(this, read_only, encapsed), ); } @@ -39,6 +38,9 @@ module.exports = { this.is([ this.tok.T_NS_SEPARATOR, this.tok.T_STRING, + this.tok.T_NAME_RELATIVE, + this.tok.T_NAME_QUALIFIED, + this.tok.T_NAME_FULLY_QUALIFIED, this.tok.T_NAMESPACE, ]) ) { @@ -228,13 +230,18 @@ module.exports = { result = node(result, this.read_what()); break; } + case this.tok.T_NULLSAFE_OBJECT_OPERATOR: { + node = this.node("nullsafepropertylookup"); + result = node(result, this.read_what()); + break; + } default: break recursive_scan_loop; } } return result; }, - /** + /* * https://github.com/php/php-src/blob/493524454d66adde84e00d249d607ecd540de99f/Zend/zend_language_parser.y#L1231 */ read_encaps_var_offset: function () { @@ -270,7 +277,7 @@ module.exports = { } return offset; }, - /** + /* * ```ebnf * reference_variable ::= simple_variable ('[' OFFSET ']')* | '{' EXPR '}' * ``` @@ -298,7 +305,7 @@ module.exports = { } return result; }, - /** + /* * ```ebnf * simple_variable ::= T_VARIABLE | '$' '{' expr '}' | '$' simple_variable * ``` diff --git a/src/tokens.js b/src/tokens.js index 1e1af82c4..fbb5e220c 100644 --- a/src/tokens.js +++ b/src/tokens.js @@ -5,283 +5,173 @@ */ "use strict"; +/** + * @readonly + * @memberOf module:php-parser + * + * @enum {number} + **/ +const TokenNames = { + T_HALT_COMPILER: 101, + T_USE: 102, + T_ENCAPSED_AND_WHITESPACE: 103, + T_OBJECT_OPERATOR: 104, + T_STRING: 105, + T_DOLLAR_OPEN_CURLY_BRACES: 106, + T_STRING_VARNAME: 107, + T_CURLY_OPEN: 108, + T_NUM_STRING: 109, + T_ISSET: 110, + T_EMPTY: 111, + T_INCLUDE: 112, + T_INCLUDE_ONCE: 113, + T_EVAL: 114, + T_REQUIRE: 115, + T_REQUIRE_ONCE: 116, + T_NAMESPACE: 117, + T_NS_SEPARATOR: 118, + T_AS: 119, + T_IF: 120, + T_ENDIF: 121, + T_WHILE: 122, + T_DO: 123, + T_FOR: 124, + T_SWITCH: 125, + T_BREAK: 126, + T_CONTINUE: 127, + T_RETURN: 128, + T_GLOBAL: 129, + T_STATIC: 130, + T_ECHO: 131, + T_INLINE_HTML: 132, + T_UNSET: 133, + T_FOREACH: 134, + T_DECLARE: 135, + T_TRY: 136, + T_THROW: 137, + T_GOTO: 138, + T_FINALLY: 139, + T_CATCH: 140, + T_ENDDECLARE: 141, + T_LIST: 142, + T_CLONE: 143, + T_PLUS_EQUAL: 144, + T_MINUS_EQUAL: 145, + T_MUL_EQUAL: 146, + T_DIV_EQUAL: 147, + T_CONCAT_EQUAL: 148, + T_MOD_EQUAL: 149, + T_AND_EQUAL: 150, + T_OR_EQUAL: 151, + T_XOR_EQUAL: 152, + T_SL_EQUAL: 153, + T_SR_EQUAL: 154, + T_INC: 155, + T_DEC: 156, + T_BOOLEAN_OR: 157, + T_BOOLEAN_AND: 158, + T_LOGICAL_OR: 159, + T_LOGICAL_AND: 160, + T_LOGICAL_XOR: 161, + T_SL: 162, + T_SR: 163, + T_IS_IDENTICAL: 164, + T_IS_NOT_IDENTICAL: 165, + T_IS_EQUAL: 166, + T_IS_NOT_EQUAL: 167, + T_IS_SMALLER_OR_EQUAL: 168, + T_IS_GREATER_OR_EQUAL: 169, + T_INSTANCEOF: 170, + T_INT_CAST: 171, + T_DOUBLE_CAST: 172, + T_STRING_CAST: 173, + T_ARRAY_CAST: 174, + T_OBJECT_CAST: 175, + T_BOOL_CAST: 176, + T_UNSET_CAST: 177, + T_EXIT: 178, + T_PRINT: 179, + T_YIELD: 180, + T_YIELD_FROM: 181, + T_FUNCTION: 182, + T_DOUBLE_ARROW: 183, + T_DOUBLE_COLON: 184, + T_ARRAY: 185, + T_CALLABLE: 186, + T_CLASS: 187, + T_ABSTRACT: 188, + T_TRAIT: 189, + T_FINAL: 190, + T_EXTENDS: 191, + T_INTERFACE: 192, + T_IMPLEMENTS: 193, + T_VAR: 194, + T_PUBLIC: 195, + T_PROTECTED: 196, + T_PRIVATE: 197, + T_CONST: 198, + T_NEW: 199, + T_INSTEADOF: 200, + T_ELSEIF: 201, + T_ELSE: 202, + T_ENDSWITCH: 203, + T_CASE: 204, + T_DEFAULT: 205, + T_ENDFOR: 206, + T_ENDFOREACH: 207, + T_ENDWHILE: 208, + T_CONSTANT_ENCAPSED_STRING: 209, + T_LNUMBER: 210, + T_DNUMBER: 211, + T_LINE: 212, + T_FILE: 213, + T_DIR: 214, + T_TRAIT_C: 215, + T_METHOD_C: 216, + T_FUNC_C: 217, + T_NS_C: 218, + T_START_HEREDOC: 219, + T_END_HEREDOC: 220, + T_CLASS_C: 221, + T_VARIABLE: 222, + T_OPEN_TAG: 223, + T_OPEN_TAG_WITH_ECHO: 224, + T_CLOSE_TAG: 225, + T_WHITESPACE: 226, + T_COMMENT: 227, + T_DOC_COMMENT: 228, + T_ELLIPSIS: 229, + T_COALESCE: 230, + T_POW: 231, + T_POW_EQUAL: 232, + T_SPACESHIP: 233, + T_COALESCE_EQUAL: 234, + T_FN: 235, + T_NULLSAFE_OBJECT_OPERATOR: 236, + T_MATCH: 237, + T_ATTRIBUTE: 238, + T_ENUM: 239, + T_READ_ONLY: 240, + T_NAME_RELATIVE: 241, + T_NAME_QUALIFIED: 242, + T_NAME_FULLY_QUALIFIED: 243, +}; + /** * PHP AST Tokens - * @type {Object} + * @readonly + * @memberOf module:php-parser + * + * @type {object} + * @property {Object.} values + * @property {TokenNames} names */ -module.exports = { - values: { - 101: "T_HALT_COMPILER", - 102: "T_USE", - 103: "T_ENCAPSED_AND_WHITESPACE", - 104: "T_OBJECT_OPERATOR", - 105: "T_STRING", - 106: "T_DOLLAR_OPEN_CURLY_BRACES", - 107: "T_STRING_VARNAME", - 108: "T_CURLY_OPEN", - 109: "T_NUM_STRING", - 110: "T_ISSET", - 111: "T_EMPTY", - 112: "T_INCLUDE", - 113: "T_INCLUDE_ONCE", - 114: "T_EVAL", - 115: "T_REQUIRE", - 116: "T_REQUIRE_ONCE", - 117: "T_NAMESPACE", - 118: "T_NS_SEPARATOR", - 119: "T_AS", - 120: "T_IF", - 121: "T_ENDIF", - 122: "T_WHILE", - 123: "T_DO", - 124: "T_FOR", - 125: "T_SWITCH", - 126: "T_BREAK", - 127: "T_CONTINUE", - 128: "T_RETURN", - 129: "T_GLOBAL", - 130: "T_STATIC", - 131: "T_ECHO", - 132: "T_INLINE_HTML", - 133: "T_UNSET", - 134: "T_FOREACH", - 135: "T_DECLARE", - 136: "T_TRY", - 137: "T_THROW", - 138: "T_GOTO", - 139: "T_FINALLY", - 140: "T_CATCH", - 141: "T_ENDDECLARE", - 142: "T_LIST", - 143: "T_CLONE", - 144: "T_PLUS_EQUAL", - 145: "T_MINUS_EQUAL", - 146: "T_MUL_EQUAL", - 147: "T_DIV_EQUAL", - 148: "T_CONCAT_EQUAL", - 149: "T_MOD_EQUAL", - 150: "T_AND_EQUAL", - 151: "T_OR_EQUAL", - 152: "T_XOR_EQUAL", - 153: "T_SL_EQUAL", - 154: "T_SR_EQUAL", - 155: "T_INC", - 156: "T_DEC", - 157: "T_BOOLEAN_OR", - 158: "T_BOOLEAN_AND", - 159: "T_LOGICAL_OR", - 160: "T_LOGICAL_AND", - 161: "T_LOGICAL_XOR", - 162: "T_SL", - 163: "T_SR", - 164: "T_IS_IDENTICAL", - 165: "T_IS_NOT_IDENTICAL", - 166: "T_IS_EQUAL", - 167: "T_IS_NOT_EQUAL", - 168: "T_IS_SMALLER_OR_EQUAL", - 169: "T_IS_GREATER_OR_EQUAL", - 170: "T_INSTANCEOF", - 171: "T_INT_CAST", - 172: "T_DOUBLE_CAST", - 173: "T_STRING_CAST", - 174: "T_ARRAY_CAST", - 175: "T_OBJECT_CAST", - 176: "T_BOOL_CAST", - 177: "T_UNSET_CAST", - 178: "T_EXIT", - 179: "T_PRINT", - 180: "T_YIELD", - 181: "T_YIELD_FROM", - 182: "T_FUNCTION", - 183: "T_DOUBLE_ARROW", - 184: "T_DOUBLE_COLON", - 185: "T_ARRAY", - 186: "T_CALLABLE", - 187: "T_CLASS", - 188: "T_ABSTRACT", - 189: "T_TRAIT", - 190: "T_FINAL", - 191: "T_EXTENDS", - 192: "T_INTERFACE", - 193: "T_IMPLEMENTS", - 194: "T_VAR", - 195: "T_PUBLIC", - 196: "T_PROTECTED", - 197: "T_PRIVATE", - 198: "T_CONST", - 199: "T_NEW", - 200: "T_INSTEADOF", - 201: "T_ELSEIF", - 202: "T_ELSE", - 203: "T_ENDSWITCH", - 204: "T_CASE", - 205: "T_DEFAULT", - 206: "T_ENDFOR", - 207: "T_ENDFOREACH", - 208: "T_ENDWHILE", - 209: "T_CONSTANT_ENCAPSED_STRING", - 210: "T_LNUMBER", - 211: "T_DNUMBER", - 212: "T_LINE", - 213: "T_FILE", - 214: "T_DIR", - 215: "T_TRAIT_C", - 216: "T_METHOD_C", - 217: "T_FUNC_C", - 218: "T_NS_C", - 219: "T_START_HEREDOC", - 220: "T_END_HEREDOC", - 221: "T_CLASS_C", - 222: "T_VARIABLE", - 223: "T_OPEN_TAG", - 224: "T_OPEN_TAG_WITH_ECHO", - 225: "T_CLOSE_TAG", - 226: "T_WHITESPACE", - 227: "T_COMMENT", - 228: "T_DOC_COMMENT", - 229: "T_ELLIPSIS", - 230: "T_COALESCE", - 231: "T_POW", - 232: "T_POW_EQUAL", - 233: "T_SPACESHIP", - 234: "T_COALESCE_EQUAL", - 235: "T_FN", - }, - names: { - T_HALT_COMPILER: 101, - T_USE: 102, - T_ENCAPSED_AND_WHITESPACE: 103, - T_OBJECT_OPERATOR: 104, - T_STRING: 105, - T_DOLLAR_OPEN_CURLY_BRACES: 106, - T_STRING_VARNAME: 107, - T_CURLY_OPEN: 108, - T_NUM_STRING: 109, - T_ISSET: 110, - T_EMPTY: 111, - T_INCLUDE: 112, - T_INCLUDE_ONCE: 113, - T_EVAL: 114, - T_REQUIRE: 115, - T_REQUIRE_ONCE: 116, - T_NAMESPACE: 117, - T_NS_SEPARATOR: 118, - T_AS: 119, - T_IF: 120, - T_ENDIF: 121, - T_WHILE: 122, - T_DO: 123, - T_FOR: 124, - T_SWITCH: 125, - T_BREAK: 126, - T_CONTINUE: 127, - T_RETURN: 128, - T_GLOBAL: 129, - T_STATIC: 130, - T_ECHO: 131, - T_INLINE_HTML: 132, - T_UNSET: 133, - T_FOREACH: 134, - T_DECLARE: 135, - T_TRY: 136, - T_THROW: 137, - T_GOTO: 138, - T_FINALLY: 139, - T_CATCH: 140, - T_ENDDECLARE: 141, - T_LIST: 142, - T_CLONE: 143, - T_PLUS_EQUAL: 144, - T_MINUS_EQUAL: 145, - T_MUL_EQUAL: 146, - T_DIV_EQUAL: 147, - T_CONCAT_EQUAL: 148, - T_MOD_EQUAL: 149, - T_AND_EQUAL: 150, - T_OR_EQUAL: 151, - T_XOR_EQUAL: 152, - T_SL_EQUAL: 153, - T_SR_EQUAL: 154, - T_INC: 155, - T_DEC: 156, - T_BOOLEAN_OR: 157, - T_BOOLEAN_AND: 158, - T_LOGICAL_OR: 159, - T_LOGICAL_AND: 160, - T_LOGICAL_XOR: 161, - T_SL: 162, - T_SR: 163, - T_IS_IDENTICAL: 164, - T_IS_NOT_IDENTICAL: 165, - T_IS_EQUAL: 166, - T_IS_NOT_EQUAL: 167, - T_IS_SMALLER_OR_EQUAL: 168, - T_IS_GREATER_OR_EQUAL: 169, - T_INSTANCEOF: 170, - T_INT_CAST: 171, - T_DOUBLE_CAST: 172, - T_STRING_CAST: 173, - T_ARRAY_CAST: 174, - T_OBJECT_CAST: 175, - T_BOOL_CAST: 176, - T_UNSET_CAST: 177, - T_EXIT: 178, - T_PRINT: 179, - T_YIELD: 180, - T_YIELD_FROM: 181, - T_FUNCTION: 182, - T_DOUBLE_ARROW: 183, - T_DOUBLE_COLON: 184, - T_ARRAY: 185, - T_CALLABLE: 186, - T_CLASS: 187, - T_ABSTRACT: 188, - T_TRAIT: 189, - T_FINAL: 190, - T_EXTENDS: 191, - T_INTERFACE: 192, - T_IMPLEMENTS: 193, - T_VAR: 194, - T_PUBLIC: 195, - T_PROTECTED: 196, - T_PRIVATE: 197, - T_CONST: 198, - T_NEW: 199, - T_INSTEADOF: 200, - T_ELSEIF: 201, - T_ELSE: 202, - T_ENDSWITCH: 203, - T_CASE: 204, - T_DEFAULT: 205, - T_ENDFOR: 206, - T_ENDFOREACH: 207, - T_ENDWHILE: 208, - T_CONSTANT_ENCAPSED_STRING: 209, - T_LNUMBER: 210, - T_DNUMBER: 211, - T_LINE: 212, - T_FILE: 213, - T_DIR: 214, - T_TRAIT_C: 215, - T_METHOD_C: 216, - T_FUNC_C: 217, - T_NS_C: 218, - T_START_HEREDOC: 219, - T_END_HEREDOC: 220, - T_CLASS_C: 221, - T_VARIABLE: 222, - T_OPEN_TAG: 223, - T_OPEN_TAG_WITH_ECHO: 224, - T_CLOSE_TAG: 225, - T_WHITESPACE: 226, - T_COMMENT: 227, - T_DOC_COMMENT: 228, - T_ELLIPSIS: 229, - T_COALESCE: 230, - T_POW: 231, - T_POW_EQUAL: 232, - T_SPACESHIP: 233, - T_COALESCE_EQUAL: 234, - T_FN: 235, - }, +const tokens = { + values: Object.entries(TokenNames).reduce( + (result, [key, value]) => ({ ...result, [value]: key }), + {}, + ), + names: TokenNames, }; + +module.exports = Object.freeze(tokens); diff --git a/test/benchmark.js b/test/benchmark.js new file mode 100644 index 000000000..8cf22c747 --- /dev/null +++ b/test/benchmark.js @@ -0,0 +1,31 @@ +const parser = require("./main"); +const Benchmark = require("benchmark"); +const suite = new Benchmark.Suite(); + +const code = ` + { + console.log(String(event.target)); +}); +suite.run(); diff --git a/test/benchmark2.js b/test/benchmark2.js new file mode 100644 index 000000000..d03e6cee7 --- /dev/null +++ b/test/benchmark2.js @@ -0,0 +1,18 @@ +const parser = require("./main"); + +const code = ` + 1000) { - speed = speed / 1000; - if (speed > 1000) { - speed = speed / 1000; - speed = Math.round(speed * 100) / 100 + "M"; - } else { - speed = Math.round(speed * 100) / 100 + "K"; - } - } - console.log(" + Tokens speed => " + speed + "/sec"); - - speed = (1000 / duration) * (code.length * iter); - // speed.should.be.greaterThan(10e5 * 2 * 0.8); - - if (speed > 1024) { - speed = speed / 1024; - if (speed > 1024) { - speed = speed / 1024; - speed = Math.round(speed * 100) / 100 + "M"; - } else { - speed = Math.round(speed * 100) / 100 + "K"; - } - } - console.log(" + Reading speed => " + speed + "/sec"); - }); - - it("parser", function () { - const reader = new parser(); - let nodeSize = 0; - function countNode(node) { - nodeSize++; - for (const k in node) { - if (node[k]) { - if (node[k].kind) { - countNode(node[k]); - } else if (Array.isArray(node[k])) { - for (let i = 0; i < node[k].length; i++) { - if (node[k][i] && node[k][i].kind) { - countNode(node[k][i]); - } - } - } - } - } - } - countNode(reader.parseCode(code)); - - let hrTime = process.hrtime(); - const iter = 100; - const start = hrTime[0] * 1000000 + hrTime[1] / 1000; - for (let i = 0; i < iter; i++) { - reader.parseCode(code); - } - hrTime = process.hrtime(); - const end = hrTime[0] * 1000000 + hrTime[1] / 1000; - const duration = (end - start) / 1000; // in MS - let speed = (1000 / duration) * (nodeSize * iter); - // speed.should.be.greaterThan(10e4); - - if (speed > 1000) { - speed = speed / 1000; - if (speed > 1000) { - speed = speed / 1000; - speed = Math.round(speed * 100) / 100 + "M"; - } else { - speed = Math.round(speed * 100) / 100 + "K"; - } - } - console.log(" + Nodes speed => " + speed + "/sec"); - - speed = (1000 / duration) * (code.length * iter); - // speed.should.be.greaterThan(10e5 * 1 * 0.8); - - if (speed > 1024) { - speed = speed / 1024; - if (speed > 1024) { - speed = speed / 1024; - speed = Math.round(speed * 100) / 100 + "M"; - } else { - speed = Math.round(speed * 100) / 100 + "K"; - } - } - console.log(" + Overall speed => " + speed + "/sec"); - }); -}); diff --git a/test/precedence.test.js b/test/precedence.test.js index 6b11adaae..50e60606e 100644 --- a/test/precedence.test.js +++ b/test/precedence.test.js @@ -16,7 +16,7 @@ function filterKey(fn, obj) { ...result, [key]: filterKey(fn, obj[key]), }), - {} + {}, ); } @@ -26,7 +26,7 @@ function filterKey(fn, obj) { function shouldBeSame(a, b) { const fn = (key) => key !== "parenthesizedExpression"; expect(filterKey(fn, parser.parseEval(a))).toEqual( - filterKey(fn, parser.parseEval(b)) + filterKey(fn, parser.parseEval(b)), ); } @@ -36,13 +36,13 @@ describe("Test infrastructure", function () { it("should filter parenthesizedExpression prop", function () { const fn = (key) => key !== "parenthesizedExpression"; expect( - filterKey(fn, { foo: "bar", parenthesizedExpression: true }) + filterKey(fn, { foo: "bar", parenthesizedExpression: true }), ).toEqual({ foo: "bar" }); expect( - filterKey(fn, { x: { foo: "bar", parenthesizedExpression: true } }) + filterKey(fn, { x: { foo: "bar", parenthesizedExpression: true } }), ).toEqual({ x: { foo: "bar" } }); expect( - filterKey(fn, [{ foo: "bar", parenthesizedExpression: true }]) + filterKey(fn, [{ foo: "bar", parenthesizedExpression: true }]), ).toEqual([{ foo: "bar" }]); }); }); @@ -130,7 +130,7 @@ describe("Test precedence", function () { it("test retif", function () { shouldBeSame( "$a ? 1 : $b ? 2 : $c ? 3 : 4", - "(($a ? 1 : $b) ? 2 : $c) ? 3 : 4" + "(($a ? 1 : $b) ? 2 : $c) ? 3 : 4", ); }); it("test + / *", function () { @@ -161,13 +161,13 @@ describe("Test precedence", function () { it("test silent node / ret if", function () { shouldBeSame( "@$i == true ? @$foo : @$bar;", - "@($i) == true ? @($foo) : @($bar);" + "@($i) == true ? @($foo) : @($bar);", ); }); it("test silent node - bugfix #355", function () { shouldBeSame( "echo 'pre' . (@$_GET['foo'] === 'bar' ? 'ok' : 'ko') . 'post'", - "echo 'pre' . (@($_GET['foo']) === 'bar' ? 'ok' : 'ko') . 'post'" + "echo 'pre' . (@($_GET['foo']) === 'bar' ? 'ok' : 'ko') . 'post'", ); }); it("test silent node - bugfix #356", function () { diff --git a/test/snapshot/__snapshots__/acid.test.js.snap b/test/snapshot/__snapshots__/acid.test.js.snap index ddecbaec8..66955f4bb 100644 --- a/test/snapshot/__snapshots__/acid.test.js.snap +++ b/test/snapshot/__snapshots__/acid.test.js.snap @@ -2,7 +2,7 @@ exports[`Acid level 1 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", "loc": Location { @@ -25,9 +25,9 @@ Program { ", }, Echo { - "expressions": Array [ + "expressions": [ Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -79,8 +79,8 @@ Program { "shortForm": true, }, Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -203,7 +203,7 @@ Program { }, }, Namespace { - "children": Array [ + "children": [ Inline { "kind": "inline", "loc": Location { @@ -223,11 +223,11 @@ Program { "value": "Hello", }, UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -284,7 +284,7 @@ Program { "name": "fooBar", }, "kind": "useitem", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -324,7 +324,7 @@ Program { }, ], "kind": "usegroup", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -368,7 +368,7 @@ Program { "type": "function", }, UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", @@ -423,7 +423,7 @@ Program { "type": null, }, ConstantStatement { - "constants": Array [ + "constants": [ Constant { "kind": "constant", "loc": Location { @@ -479,7 +479,7 @@ Program { }, ], "kind": "constantstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -516,7 +516,8 @@ Program { }, }, Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { "adaptations": null, "kind": "traituse", @@ -533,7 +534,7 @@ Program { "offset": 446, }, }, - "traits": Array [ + "traits": [ Name { "kind": "name", "loc": Location { @@ -555,9 +556,9 @@ Program { ], }, TraitUse { - "adaptations": Array [ + "adaptations": [ TraitPrecedence { - "instead": Array [ + "instead": [ Name { "kind": "name", "loc": Location { @@ -714,7 +715,7 @@ Program { "offset": 460, }, }, - "traits": Array [ + "traits": [ Name { "kind": "name", "loc": Location { @@ -754,7 +755,8 @@ Program { ], }, ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "loc": Location { @@ -809,6 +811,7 @@ Program { }, }, ], + "final": false, "kind": "classconstant", "loc": Location { "end": Position { @@ -823,6 +826,8 @@ Program { "offset": 544, }, }, + "nullable": false, + "type": null, "visibility": "", }, PropertyStatement { @@ -844,8 +849,9 @@ Program { "offset": 577, }, }, - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "loc": Location { "end": Position { @@ -881,9 +887,10 @@ Program { "name": "dwarf", }, "nullable": false, + "readonly": false, "type": null, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": String { @@ -1025,14 +1032,15 @@ Program { "visibility": "protected", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "loc": Location { @@ -1041,16 +1049,16 @@ Program { "line": 42, "offset": 855, }, - "source": "\\"Hey ho $name, $greeting !\\"", + "source": ""Hey ho $name, $greeting !"", "start": Position { "column": 13, "line": 42, "offset": 828, }, }, - "raw": "\\"Hey ho $name, $greeting !\\"", + "raw": ""Hey ho $name, $greeting !"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1247,7 +1255,7 @@ Program { "line": 42, "offset": 856, }, - "source": "echo \\"Hey ho $name, $greeting !\\";", + "source": "echo "Hey ho $name, $greeting !";", "start": Position { "column": 8, "line": 42, @@ -1299,7 +1307,7 @@ Program { "offset": 887, }, "source": "{ - echo \\"Hey ho $name, $greeting !\\"; + echo "Hey ho $name, $greeting !"; continue $foo; }", "start": Position { @@ -1328,7 +1336,7 @@ Program { "name": "name", }, "kind": "foreach", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -1357,7 +1365,7 @@ Program { "offset": 887, }, "source": "foreach($this->dwarf as $name => $greeting) { - echo \\"Hey ho $name, $greeting !\\"; + echo "Hey ho $name, $greeting !"; continue $foo; }", "start": Position { @@ -1445,7 +1453,7 @@ Program { "line": 45, "offset": 928, }, - "source": "throw new \\\\ComeToHome('Thats it');", + "source": "throw new \\ComeToHome('Thats it');", "start": Position { "column": 6, "line": 45, @@ -1453,7 +1461,7 @@ Program { }, }, "what": New { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": false, "kind": "string", @@ -1482,7 +1490,7 @@ Program { "line": 45, "offset": 927, }, - "source": "new \\\\ComeToHome('Thats it')", + "source": "new \\ComeToHome('Thats it')", "start": Position { "column": 12, "line": 45, @@ -1497,14 +1505,14 @@ Program { "line": 45, "offset": 915, }, - "source": "\\\\ComeToHome", + "source": "\\ComeToHome", "start": Position { "column": 16, "line": 45, "offset": 904, }, }, - "name": "\\\\ComeToHome", + "name": "\\ComeToHome", "resolution": "fqn", }, }, @@ -1520,10 +1528,10 @@ Program { "source": "{ // do not wanna do foreach($this->dwarf as $name => $greeting) { - echo \\"Hey ho $name, $greeting !\\"; + echo "Hey ho $name, $greeting !"; continue $foo; } - throw new \\\\ComeToHome('Thats it'); + throw new \\ComeToHome('Thats it'); }", "start": Position { "column": 40, @@ -1535,9 +1543,10 @@ Program { "byref": false, "isAbstract": false, "isFinal": true, + "isReadonly": false, "isStatic": false, "kind": "method", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -1567,11 +1576,11 @@ Program { "line": 46, "offset": 934, }, - "source": "function doSomething()", + "source": "final public function doSomething()", "start": Position { - "column": 17, + "column": 4, "line": 39, - "offset": 713, + "offset": 700, }, }, "name": Identifier { @@ -1597,7 +1606,7 @@ Program { }, ], "extends": null, - "implements": Array [ + "implements": [ Name { "kind": "name", "loc": Location { @@ -1606,7 +1615,7 @@ Program { "line": 25, "offset": 439, }, - "source": "namespace\\\\fooBaz", + "source": "namespace\\fooBaz", "start": Position { "column": 35, "line": 25, @@ -1620,8 +1629,9 @@ Program { "isAbstract": true, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -1651,7 +1661,7 @@ Program { "line": 47, "offset": 938, }, - "source": "abstract class fooBar implements namespace\\\\fooBaz { + "source": "abstract class fooBar implements namespace\\fooBaz { use Line; use foo, bar { foo::baz insteadof bar; @@ -1668,10 +1678,10 @@ Program { final public function doSomething() { // do not wanna do foreach($this->dwarf as $name => $greeting) { - echo \\"Hey ho $name, $greeting !\\"; + echo "Hey ho $name, $greeting !"; continue $foo; } - throw new \\\\ComeToHome('Thats it'); + throw new \\ComeToHome('Thats it'); } }", "start": Position { @@ -1699,13 +1709,16 @@ Program { }, }, Interface { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -1714,11 +1727,11 @@ Program { "line": 50, "offset": 1014, }, - "source": "function Am_I_Uggly() : bool", + "source": "public function Am_I_Uggly() : bool", "start": Position { - "column": 11, + "column": 4, "line": 50, - "offset": 986, + "offset": 979, }, }, "name": Identifier { @@ -1760,11 +1773,13 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -1773,11 +1788,11 @@ Program { "line": 51, "offset": 1054, }, - "source": "function broken() : bool", + "source": "protected function broken() : bool", "start": Position { - "column": 14, + "column": 4, "line": 51, - "offset": 1030, + "offset": 1020, }, }, "name": Identifier { @@ -1819,11 +1834,13 @@ Program { "visibility": "protected", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": true, "kind": "method", "loc": Location { @@ -1832,11 +1849,11 @@ Program { "line": 52, "offset": 1111, }, - "source": "function isWhiteSnowAlive() : bool", + "source": "static protected function isWhiteSnowAlive() : bool", "start": Position { - "column": 21, + "column": 4, "line": 52, - "offset": 1077, + "offset": 1060, }, }, "name": Identifier { @@ -1878,7 +1895,7 @@ Program { "visibility": "protected", }, ], - "extends": Array [ + "extends": [ Name { "kind": "name", "loc": Location { @@ -1935,9 +1952,10 @@ Program { }, }, _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": String { @@ -2025,7 +2043,7 @@ Program { }, }, "value": Call { - "arguments": Array [ + "arguments": [ Number { "kind": "number", "loc": Location { @@ -2148,11 +2166,13 @@ Program { "type": null, }, Trait { - "body": Array [ + "body": [ Method { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "loc": Location { "end": Position { @@ -2185,6 +2205,7 @@ Program { "name": "arrow", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "loc": Location { @@ -2224,14 +2245,15 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [ + "children": [ Case { "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -2285,7 +2307,7 @@ Program { }, Case { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2430,7 +2452,7 @@ Program { }, Case { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2809,6 +2831,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -2817,11 +2840,11 @@ Program { "line": 72, "offset": 1498, }, - "source": "function draw(bool $arrow = false) : string", + "source": "public function draw(bool $arrow = false) : string", "start": Position { - "column": 11, + "column": 4, "line": 61, - "offset": 1220, + "offset": 1213, }, }, "name": Identifier { @@ -2863,9 +2886,10 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Magic { "kind": "magic", @@ -2921,6 +2945,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -2929,11 +2954,11 @@ Program { "line": 75, "offset": 1563, }, - "source": "function shuut()", + "source": "private function shuut()", "start": Position { - "column": 12, + "column": 4, "line": 73, - "offset": 1511, + "offset": 1503, }, }, "name": Identifier { @@ -3007,11 +3032,12 @@ Program { }, }, _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Global { - "items": Array [ + "items": [ Variable { "curly": false, "kind": "variable", @@ -3286,10 +3312,10 @@ Program { }, If { "alternate": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ variadic { "kind": "variadic", "loc": Location { @@ -3425,11 +3451,11 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Silent { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -3568,7 +3594,7 @@ Program { "left": Bin { "kind": "bin", "left": Call { - "arguments": Array [ + "arguments": [ Number { "kind": "number", "loc": Location { @@ -3805,7 +3831,7 @@ Program { }, }, "right": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -3960,7 +3986,7 @@ next: }, "byref": false, "kind": "function", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -4082,7 +4108,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -4094,7 +4120,7 @@ next: // @todo $this->a_$foo return $$foo ?? false; } - return empty(namespace\\\\FOOBAR); + return empty(namespace\\FOOBAR); };", "start": Position { "column": 2, @@ -4104,9 +4130,11 @@ next: }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "loc": Location { "end": Position { @@ -4139,6 +4167,7 @@ next: "name": "bar", }, "nullable": true, + "readonly": false, "type": TypeReference { "kind": "typereference", "loc": Location { @@ -4177,8 +4206,9 @@ next: "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Static { "kind": "static", "loc": Location { @@ -4194,7 +4224,7 @@ next: "offset": 1938, }, }, - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -4218,10 +4248,10 @@ next: If { "alternate": If { "alternate": Block { - "children": Array [ + "children": [ For { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -4625,7 +4655,7 @@ next: }, }, }, - "increment": Array [ + "increment": [ Post { "kind": "post", "loc": Location { @@ -4662,7 +4692,7 @@ next: }, }, ], - "init": Array [ + "init": [ Assign { "kind": "assign", "left": Variable { @@ -4734,7 +4764,7 @@ next: }, }, "shortForm": false, - "test": Array [ + "test": [ Bin { "kind": "bin", "left": Variable { @@ -4769,7 +4799,7 @@ next: }, }, "right": Call { - "arguments": Array [ + "arguments": [ PropertyLookup { "kind": "propertylookup", "loc": Location { @@ -4931,7 +4961,7 @@ next: "type": "??", }, "kind": "return", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -4991,10 +5021,10 @@ next: }, }, "body": Block { - "children": Array [ + "children": [ Try { "always": Block { - "children": Array [ + "children": [ If { "alternate": null, "body": Unset { @@ -5012,7 +5042,7 @@ next: "offset": 2451, }, }, - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -5081,7 +5111,7 @@ next: "offset": 2430, }, }, - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -5123,7 +5153,7 @@ next: }, Return { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -5133,7 +5163,7 @@ next: }, "source": "new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt()", "start": Position { @@ -5152,7 +5182,7 @@ next: }, "source": "new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt", "start": Position { @@ -5179,7 +5209,7 @@ next: "name": "goatIt", }, "what": New { - "arguments": Array [], + "arguments": [], "kind": "new", "loc": Location { "end": Position { @@ -5189,7 +5219,7 @@ next: }, "source": "new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } }", "start": Position { @@ -5200,11 +5230,13 @@ next: }, "parenthesizedExpression": true, "what": Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": String { "isDoubleQuote": true, @@ -5215,14 +5247,14 @@ next: "line": 118, "offset": 2571, }, - "source": "\\"meeeh\\"", + "source": ""meeeh"", "start": Position { "column": 19, "line": 118, "offset": 2564, }, }, - "raw": "\\"meeeh\\"", + "raw": ""meeeh"", "unicode": false, "value": "meeeh", }, @@ -5233,7 +5265,7 @@ next: "line": 118, "offset": 2572, }, - "source": "return \\"meeeh\\";", + "source": "return "meeeh";", "start": Position { "column": 12, "line": 118, @@ -5250,7 +5282,7 @@ next: "offset": 2584, }, "source": "{ - return \\"meeeh\\"; + return "meeeh"; }", "start": Position { "column": 28, @@ -5262,6 +5294,7 @@ next: "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -5321,6 +5354,7 @@ next: "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -5330,7 +5364,7 @@ next: }, "source": "class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } }", "start": Position { @@ -5353,7 +5387,7 @@ next: }, "source": "return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt();", "start": Position { @@ -5375,7 +5409,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); }", @@ -5387,7 +5421,7 @@ next: }, }, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -5475,9 +5509,9 @@ next: }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -5651,7 +5685,7 @@ next: "name": "boom", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -5754,13 +5788,13 @@ next: }, }, }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -5894,7 +5928,7 @@ next: }, "name": "ex", }, - "what": Array [ + "what": [ Name { "kind": "name", "loc": Location { @@ -5950,7 +5984,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); }", @@ -5979,7 +6013,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -6008,7 +6042,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -6100,10 +6134,10 @@ next: }, }, "body": Block { - "children": Array [ + "children": [ While { "body": Block { - "children": Array [ + "children": [ If { "alternate": Continue { "kind": "continue", @@ -6123,7 +6157,7 @@ next: }, }, "body": Block { - "children": Array [ + "children": [ Break { "kind": "break", "level": Name { @@ -6197,7 +6231,7 @@ next: "kind": "bin", "left": Cast { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -6341,7 +6375,7 @@ next: }, Do { "body": Block { - "children": Array [ + "children": [ Inline { "kind": "inline", "loc": Location { @@ -6476,7 +6510,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -6592,7 +6626,7 @@ next: "line": 130, "offset": 2871, }, - "source": "namespace\\\\FOOBAR", + "source": "namespace\\FOOBAR", "start": Position { "column": 17, "line": 130, @@ -6609,7 +6643,7 @@ next: "line": 130, "offset": 2872, }, - "source": "empty(namespace\\\\FOOBAR)", + "source": "empty(namespace\\FOOBAR)", "start": Position { "column": 11, "line": 130, @@ -6624,7 +6658,7 @@ next: "line": 130, "offset": 2873, }, - "source": "return empty(namespace\\\\FOOBAR);", + "source": "return empty(namespace\\FOOBAR);", "start": Position { "column": 4, "line": 130, @@ -6663,7 +6697,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -6675,7 +6709,7 @@ next: // @todo $this->a_$foo return $$foo ?? false; } - return empty(namespace\\\\FOOBAR); + return empty(namespace\\FOOBAR); }", "start": Position { "column": 57, @@ -6719,7 +6753,7 @@ next: "name": "bool", "raw": "bool", }, - "uses": Array [ + "uses": [ Variable { "curly": false, "kind": "variable", @@ -6771,7 +6805,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -6783,7 +6817,7 @@ next: // @todo $this->a_$foo return $$foo ?? false; } - return empty(namespace\\\\FOOBAR); + return empty(namespace\\FOOBAR); };", "start": Position { "column": 2, @@ -6796,9 +6830,9 @@ next: "alternate": If { "alternate": null, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "loc": Location { @@ -6816,7 +6850,7 @@ next: }, "raw": "\`ls -larth\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -6926,9 +6960,9 @@ next: }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "loc": Location { @@ -6946,7 +6980,7 @@ next: }, "raw": "\`bar&\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -7064,7 +7098,7 @@ next: "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Noop { "kind": "noop", "loc": Location { @@ -7137,7 +7171,7 @@ next: }, "unpack": false, "value": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -7262,7 +7296,7 @@ next: }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -7318,7 +7352,7 @@ next: }, "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -7428,7 +7462,7 @@ next: }, }, "kind": "expressionstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -7468,7 +7502,7 @@ next: "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Noop { "kind": "noop", "loc": Location { @@ -7540,8 +7574,8 @@ next: }, }, "unpack": false, - "value": Array { - "items": Array [ + "value": List { + "items": [ Entry { "byRef": false, "key": null, @@ -7633,7 +7667,7 @@ next: }, }, ], - "kind": "array", + "kind": "list", "loc": Location { "end": Position { "column": 16, @@ -7741,7 +7775,7 @@ BAZ", BAZ ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -7824,7 +7858,7 @@ BAZ ExpressionStatement { "expression": Exit { "expression": Call { - "arguments": Array [ + "arguments": [ Nowdoc { "kind": "nowdoc", "label": "BAR", @@ -7965,7 +7999,7 @@ FOO", FOO ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -8030,7 +8064,7 @@ FOO }, ], "kind": "namespace", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -8056,7 +8090,7 @@ FOO "line": 155, "offset": 3172, }, - "source": "namespace foo\\\\bar { + "source": "namespace foo\\bar { ?>Hellodwarf as $name => $greeting) { - echo \\"Hey ho $name, $greeting !\\"; + echo "Hey ho $name, $greeting !"; continue $foo; } - throw new \\\\ComeToHome('Thats it'); + throw new \\ComeToHome('Thats it'); } } @@ -8166,7 +8200,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -8178,7 +8212,7 @@ next: // @todo $this->a_$foo return $$foo ?? false; } - return empty(namespace\\\\FOOBAR); + return empty(namespace\\FOOBAR); }; if ($foo): @@ -8210,7 +8244,7 @@ FOO "offset": 140, }, }, - "name": "foo\\\\bar", + "name": "foo\\bar", "withBrackets": true, }, Halt { @@ -8233,7 +8267,7 @@ THE END ... }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -8457,7 +8491,7 @@ THE END ... ", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8472,7 +8506,7 @@ declare(strict_types=1); include_once 'foo.php'; /** a comment before the namespace comment **/ -namespace foo\\\\bar { +namespace foo\\bar { ?>Hellodwarf as $name => $greeting) { - echo \\"Hey ho $name, $greeting !\\"; + echo "Hey ho $name, $greeting !"; continue $foo; } - throw new \\\\ComeToHome('Thats it'); + throw new \\ComeToHome('Thats it'); } } @@ -8582,7 +8616,7 @@ next: if (isset($bipbip, $ex)) unset($bipbip, $ex); return (new class extends fooBar { function goatIt() { - return \\"meeeh\\"; + return "meeeh"; } })->goatIt(); } @@ -8594,7 +8628,7 @@ next: // @todo $this->a_$foo return $$foo ?? false; } - return empty(namespace\\\\FOOBAR); + return empty(namespace\\FOOBAR); }; if ($foo): diff --git a/test/snapshot/__snapshots__/array.test.js.snap b/test/snapshot/__snapshots__/array.test.js.snap index 3ae4229ef..57818c9bf 100644 --- a/test/snapshot/__snapshots__/array.test.js.snap +++ b/test/snapshot/__snapshots__/array.test.js.snap @@ -2,10 +2,10 @@ exports[`Array without keys array with empty values #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Noop { "kind": "noop", }, @@ -73,17 +73,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with empty values #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Noop { "kind": "noop", }, @@ -154,17 +154,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with empty values 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Noop { "kind": "noop", }, @@ -232,17 +232,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with multiple trailing commas #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -288,17 +288,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with multiple trailing commas 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -335,17 +335,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with trailing commas #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -379,17 +379,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with trailing commas #4 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -423,17 +423,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array with trailing commas #5 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -467,17 +467,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array without trailing commas #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -511,17 +511,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys array without trailing commas 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -555,14 +555,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys byRef 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -573,7 +573,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -633,14 +633,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys deference array 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -651,7 +651,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -668,7 +668,7 @@ Program { "value": "1", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -685,7 +685,7 @@ Program { }, }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -694,7 +694,7 @@ Program { ], "kind": "call", "what": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -703,7 +703,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"a\\"", + "raw": ""a"", "unicode": false, "value": "a", }, @@ -716,7 +716,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"b\\"", + "raw": ""b"", "unicode": false, "value": "b", }, @@ -733,14 +733,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys mixed tests / coverage test empty array 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -751,7 +751,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [], + "items": [], "kind": "array", "shortForm": true, }, @@ -768,7 +768,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [], + "items": [], "kind": "array", "shortForm": false, }, @@ -776,17 +776,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys mixed tests / coverage test short form / keys 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": true, "key": Number { @@ -813,7 +813,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"foobar\\"", + "raw": ""foobar"", "unicode": false, "value": "foobar", }, @@ -825,14 +825,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys non empty array 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -843,7 +843,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -896,7 +896,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"test\\"", + "raw": ""test"", "unicode": false, "value": "test", }, @@ -907,7 +907,7 @@ Program { "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -949,7 +949,7 @@ Program { "kind": "entry", "unpack": false, "value": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -964,7 +964,7 @@ Program { "kind": "entry", "unpack": false, "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -991,24 +991,24 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys of arrays 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1017,7 +1017,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item1\\"", + "raw": ""item1"", "unicode": false, "value": "item1", }, @@ -1030,7 +1030,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item2\\"", + "raw": ""item2"", "unicode": false, "value": "item2", }, @@ -1046,7 +1046,7 @@ Program { "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1055,7 +1055,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item3\\"", + "raw": ""item3"", "unicode": false, "value": "item3", }, @@ -1068,7 +1068,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item4\\"", + "raw": ""item4"", "unicode": false, "value": "item4", }, @@ -1084,7 +1084,7 @@ Program { "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1093,7 +1093,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item5\\"", + "raw": ""item5"", "unicode": false, "value": "item5", }, @@ -1106,7 +1106,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item6\\"", + "raw": ""item6"", "unicode": false, "value": "item6", }, @@ -1123,17 +1123,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys of numbers 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1171,24 +1171,24 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys of objects 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": false, "value": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -1203,7 +1203,7 @@ Program { "kind": "entry", "unpack": false, "value": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -1218,7 +1218,7 @@ Program { "kind": "entry", "unpack": false, "value": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -1234,17 +1234,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys of strings 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1253,7 +1253,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item1\\"", + "raw": ""item1"", "unicode": false, "value": "item1", }, @@ -1266,7 +1266,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item2\\"", + "raw": ""item2"", "unicode": false, "value": "item2", }, @@ -1279,7 +1279,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item3\\"", + "raw": ""item3"", "unicode": false, "value": "item3", }, @@ -1291,17 +1291,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys of strings and numbers 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1320,7 +1320,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item2\\"", + "raw": ""item2"", "unicode": false, "value": "item2", }, @@ -1343,7 +1343,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"item4\\"", + "raw": ""item4"", "unicode": false, "value": "item4", }, @@ -1355,17 +1355,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys of variables 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1406,48 +1406,48 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys single and empty (short form) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [], + "items": [], "kind": "array", "shortForm": true, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys single and empty 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [], + "items": [], "kind": "array", "shortForm": false, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys spread operator 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1458,7 +1458,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1526,7 +1526,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1555,7 +1555,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1594,7 +1594,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1644,7 +1644,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1684,14 +1684,14 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": true, "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -1730,16 +1730,16 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": true, "value": New { - "arguments": Array [ + "arguments": [ Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1800,14 +1800,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Array without keys spread operator with reference 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1818,7 +1818,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1839,7 +1839,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", diff --git a/test/snapshot/__snapshots__/arrowfunc.test.js.snap b/test/snapshot/__snapshots__/arrowfunc.test.js.snap index d38fb334d..06086991b 100644 --- a/test/snapshot/__snapshots__/arrowfunc.test.js.snap +++ b/test/snapshot/__snapshots__/arrowfunc.test.js.snap @@ -2,7 +2,7 @@ exports[`arrow function argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -13,24 +13,28 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -44,14 +48,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`arrow function argument by ref 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -62,24 +66,28 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -93,14 +101,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`arrow function arguments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -111,48 +119,58 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -166,14 +184,93 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`arrow function error / arrow functions before PHP 7.4 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "fn1", + }, + "operator": "=", + "right": Call { + "arguments": [ + Variable { + "curly": false, + "kind": "variable", + "name": "x", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "fn", + "resolution": "uqn", + }, + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": undefined, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Bin { + "kind": "bin", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "x", + }, + "right": Variable { + "curly": false, + "kind": "variable", + "name": "y", + }, + "type": "+", + }, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": ";", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';' on line 1", + "token": "'=>' (T_DOUBLE_ARROW)", + }, + Error { + "expected": "EXPR", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '=>' (T_DOUBLE_ARROW) on line 1", + "token": "'=>' (T_DOUBLE_ARROW)", + }, + Error { + "expected": ";", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '$x' (T_VARIABLE), expecting ';' on line 1", + "token": "'$x' (T_VARIABLE)", + }, + ], "kind": "program", } `; exports[`arrow function error / empty not allowed 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -184,7 +281,8 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": undefined, "byref": false, "isStatic": false, @@ -196,7 +294,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -211,24 +309,28 @@ Program { exports[`arrow function error / fn fails on php7.4 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, @@ -250,7 +352,7 @@ Program { "type": null, }, ], - "errors": Array [ + "errors": [ Error { "expected": "(", "kind": "error", @@ -265,24 +367,28 @@ Program { exports[`arrow function error / fn passes on php7.3 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, @@ -304,32 +410,36 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`arrow function inside call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Variable { "curly": false, "kind": "variable", @@ -352,14 +462,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`arrow function return type 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -370,11 +480,12 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -392,14 +503,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`arrow function simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -410,11 +521,12 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -428,7 +540,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/assign.test.js.snap b/test/snapshot/__snapshots__/assign.test.js.snap index fd11a277c..69241ab07 100644 --- a/test/snapshot/__snapshots__/assign.test.js.snap +++ b/test/snapshot/__snapshots__/assign.test.js.snap @@ -2,7 +2,7 @@ exports[`assign %= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -21,14 +21,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign &= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -47,14 +47,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign **= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -73,14 +73,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign *= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -99,14 +99,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign += 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -125,14 +125,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign .= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -151,14 +151,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign /= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -177,14 +177,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign <<= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -203,14 +203,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign >>= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -229,14 +229,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign ??= (php < 7) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": RetIf { "falseExpr": undefined, @@ -259,7 +259,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -295,7 +295,7 @@ Program { exports[`assign ??= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -314,14 +314,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign ??= with bin 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -348,14 +348,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign ^= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -374,14 +374,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign |= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -400,14 +400,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign -= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -426,14 +426,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -461,14 +461,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -486,14 +486,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -512,14 +512,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`assign with ref 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -537,7 +537,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/ast.test.js.snap b/test/snapshot/__snapshots__/ast.test.js.snap index 5d18e561d..91208a884 100644 --- a/test/snapshot/__snapshots__/ast.test.js.snap +++ b/test/snapshot/__snapshots__/ast.test.js.snap @@ -2,7 +2,7 @@ exports[`Test AST structure #176 - lost \`?>\` in program node 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -38,7 +38,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -60,9 +60,9 @@ Program { exports[`Test AST structure fix #120 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": false, "kind": "string", @@ -81,20 +81,20 @@ Program { "value": " !", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure fix #127 - echo statements 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"hello\\"", + "raw": ""hello"", "unicode": false, "value": "hello", }, @@ -108,28 +108,28 @@ Program { "value": " world", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure fix #127 - inline 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": "?>?>", "value": "?>?>", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure fix #370 - classreference instead identifier(classreferent) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -148,14 +148,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure fix #370 - nullkeyword 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -173,14 +173,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test clone 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -202,14 +202,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test coalesce operator 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -237,16 +237,16 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test constants 1`] = ` Program { - "children": Array [ + "children": [ ConstantStatement { - "constants": Array [ + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -262,20 +262,20 @@ Program { "kind": "constantstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test die/exit 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bye\\"", + "raw": ""bye"", "unicode": false, "value": "bye", }, @@ -300,21 +300,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test echo, isset, unset, empty 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ RetIf { "falseExpr": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"ko\\"", + "raw": ""ko"", "unicode": false, "value": "ko", }, @@ -328,7 +328,7 @@ Program { "trueExpr": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"ok\\"", + "raw": ""ok"", "unicode": false, "value": "ok", }, @@ -342,7 +342,7 @@ Program { "expression": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"some text\\"", + "raw": ""some text"", "unicode": false, "value": "some text", }, @@ -353,7 +353,7 @@ Program { ExpressionStatement { "expression": Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -370,7 +370,7 @@ Program { }, Unset { "kind": "unset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -390,21 +390,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test eval 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Eval { "kind": "eval", "source": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"return true;\\"", + "raw": ""return true;"", "unicode": false, "value": "return true;", }, @@ -412,14 +412,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test include / require 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Include { "kind": "include", @@ -428,7 +428,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"file.php\\"", + "raw": ""file.php"", "unicode": false, "value": "file.php", }, @@ -451,7 +451,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"/file.php\\"", + "raw": ""/file.php"", "unicode": false, "value": "/file.php", }, @@ -468,7 +468,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"req.php\\"", + "raw": ""req.php"", "unicode": false, "value": "req.php", }, @@ -483,7 +483,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"file.php\\"", + "raw": ""file.php"", "unicode": false, "value": "file.php", }, @@ -491,21 +491,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test inline 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": "Hello ", "value": "Hello ", }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": false, "kind": "string", @@ -524,16 +524,72 @@ Program { "value": " !", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Test AST structure test invalid namespace separator 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Error { + "expected": "SCALAR", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '\\' (T_NS_SEPARATOR) on line 1", + "token": "'\\' (T_NS_SEPARATOR)", + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + "operator": "=", + "right": Number { + "kind": "number", + "value": "1", + }, + }, + "kind": "expressionstatement", + }, + Inline { + "kind": "inline", + "raw": " + !", + "value": " !", + }, + ], + "errors": [ + Error { + "expected": "SCALAR", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '\\' (T_NS_SEPARATOR) on line 1", + "token": "'\\' (T_NS_SEPARATOR)", + }, + Error { + "expected": ";", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '$var' (T_VARIABLE), expecting ';' on line 1", + "token": "'$var' (T_VARIABLE)", + }, + ], "kind": "program", } `; exports[`Test AST structure test magics 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Magic { "kind": "magic", "raw": "__FILE__", @@ -549,29 +605,29 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test program 1`] = ` Program { - "children": Array [], - "errors": Array [], + "children": [], + "errors": [], "kind": "program", } `; exports[`Test AST structure test shell 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\`ls -larth\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -591,7 +647,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/attributes.test.js.snap b/test/snapshot/__snapshots__/attributes.test.js.snap new file mode 100644 index 000000000..36fb1d4f0 --- /dev/null +++ b/test/snapshot/__snapshots__/attributes.test.js.snap @@ -0,0 +1,2692 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Parse Attributes can parse anon-class attributes 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "operator": "=", + "right": New { + "arguments": [], + "kind": "new", + "what": Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "T", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": true, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": null, + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse anonymous function attributes 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Pure", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Boolean { + "kind": "boolean", + "raw": "true", + "value": true, + }, + "byref": false, + "isStatic": false, + "kind": "arrowfunc", + "nullable": false, + "type": null, + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "b", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "A", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse attributes in inner statements 1`] = ` +Program { + "children": [ + Namespace { + "children": [ + _Function { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [ + Return { + "expr": Closure { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "C", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Closure { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Pure", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [], + }, + "byref": false, + "isStatic": false, + "kind": "arrowfunc", + "nullable": false, + "type": null, + }, + "kind": "return", + }, + ], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "type": null, + }, + ], + "kind": "namespace", + "name": "A", + "withBrackets": true, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse attributes with namespace 1`] = ` +Program { + "children": [ + _Function { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "\\JetBrains\\PhpStorm\\Pure", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse class attributes 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Deprecated", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""use NewClass"", + "unicode": false, + "value": "use NewClass", + }, + ], + "kind": "attribute", + "name": "replace", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "DepClass", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse class const attributes 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "B", + }, + ], + "kind": "attrgroup", + }, + ], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "B", + }, + "value": Number { + "kind": "number", + "value": "1", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse class property attributes 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "B", + }, + ], + "kind": "attrgroup", + }, + ], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "readonly": false, + "type": Name { + "kind": "name", + "name": "B", + "resolution": "uqn", + }, + "value": null, + }, + ], + "visibility": "public", + }, + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "C", + }, + ], + "kind": "attrgroup", + }, + ], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "c", + }, + "nullable": false, + "readonly": false, + "type": Name { + "kind": "name", + "name": "C", + "resolution": "uqn", + }, + "value": null, + }, + ], + "visibility": "private", + }, + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "D", + }, + ], + "kind": "attrgroup", + }, + ], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "d", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + }, + ], + "visibility": "protected", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse interface attributes 1`] = ` +Program { + "children": [ + Interface { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "A", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [ + ClassConstant { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "C", + }, + ], + "kind": "attrgroup", + }, + ], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "D", + }, + "value": Number { + "kind": "number", + "value": "0", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + Method { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "E", + }, + ], + "kind": "attrgroup", + }, + ], + "body": null, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "f", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + ], + "extends": null, + "kind": "interface", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse method attributes 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Pure", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "m", + }, + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Test", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse multi-line attributes 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "One", + }, + Attribute { + "args": [], + "kind": "attribute", + "name": "Two", + }, + Attribute { + "args": [], + "kind": "attribute", + "name": "Three", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Four", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Multi", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse param attributes 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Unsigned", + }, + ], + "kind": "attrgroup", + }, + ], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "n", + }, + "nullable": false, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "f", + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with argument labels 1`] = ` +Program { + "children": [ + _Function { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + namedargument { + "kind": "namedargument", + "name": "value", + "value": Number { + "kind": "number", + "value": "1234", + }, + }, + ], + "kind": "attribute", + "name": "MyAttribute", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with bitwise operations 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": "|", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att2", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att2", + "resolution": "uqn", + }, + }, + "type": "&", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att3", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att3", + "resolution": "uqn", + }, + }, + "type": "^", + }, + ], + "kind": "attribute", + "name": "Att3", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Unary { + "kind": "unary", + "type": "~", + "what": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att4", + "resolution": "uqn", + }, + }, + }, + ], + "kind": "attribute", + "name": "Att4", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att5", + "resolution": "uqn", + }, + }, + "right": Number { + "kind": "number", + "value": "1", + }, + "type": ">>", + }, + ], + "kind": "attribute", + "name": "Att5", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att6", + "resolution": "uqn", + }, + }, + "right": Number { + "kind": "number", + "value": "1", + }, + "type": "<<", + }, + ], + "kind": "attribute", + "name": "Att6", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "comments": [], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with comments 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Unsigned", + }, + ], + "kind": "attrgroup", + }, + ], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "leadingComments": [ + CommentBlock { + "kind": "commentblock", + "offset": 26, + "value": "/* Pure */", + }, + ], + "name": "Pure", + }, + ], + "kind": "attrgroup", + "leadingComments": [ + CommentLine { + "kind": "commentline", + "offset": 0, + "value": "// Line 1 +", + }, + ], + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "leadingComments": [ + CommentLine { + "kind": "commentline", + "offset": 66, + "value": "// Try using b +", + }, + ], + "name": "Deprecated", + }, + ], + "kind": "attrgroup", + "leadingComments": [ + CommentLine { + "kind": "commentline", + "offset": 43, + "value": "// Line 3 +", + }, + ], + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "type": null, + }, + ], + "comments": [ + CommentLine { + "kind": "commentline", + "offset": 0, + "value": "// Line 1 +", + }, + CommentBlock { + "kind": "commentblock", + "offset": 26, + "value": "/* Pure */", + }, + CommentLine { + "kind": "commentline", + "offset": 43, + "value": "// Line 3 +", + }, + CommentLine { + "kind": "commentline", + "offset": 66, + "value": "// Try using b +", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with end characters 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Array { + "items": [ + Entry { + "byRef": false, + "key": null, + "kind": "entry", + "unpack": false, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""])}>"", + "unicode": false, + "value": "])}>", + }, + }, + ], + "kind": "array", + "shortForm": true, + }, + ], + "kind": "attribute", + "name": "End", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "End", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with logical operations 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": "||", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att2", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att2", + "resolution": "uqn", + }, + }, + "type": "&&", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att3", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att3", + "resolution": "uqn", + }, + }, + "type": "or", + }, + ], + "kind": "attribute", + "name": "Att3", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att4", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att4", + "resolution": "uqn", + }, + }, + "type": "and", + }, + ], + "kind": "attribute", + "name": "Att4", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att5", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att5", + "resolution": "uqn", + }, + }, + "type": "xor", + }, + ], + "kind": "attribute", + "name": "Att5", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Unary { + "kind": "unary", + "type": "!", + "what": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att6", + "resolution": "uqn", + }, + }, + }, + ], + "kind": "attribute", + "name": "Att6", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "comments": [], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with mathematical expressions 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": Bin { + "kind": "bin", + "left": Bin { + "kind": "bin", + "left": Bin { + "kind": "bin", + "left": Unary { + "kind": "unary", + "type": "-", + "what": Number { + "kind": "number", + "value": "20", + }, + }, + "right": Bin { + "kind": "bin", + "left": Unary { + "kind": "unary", + "type": "+", + "what": Number { + "kind": "number", + "value": "10", + }, + }, + "parenthesizedExpression": true, + "right": Number { + "kind": "number", + "value": "5", + }, + "type": "/", + }, + "type": "*", + }, + "right": Number { + "kind": "number", + "value": "2", + }, + "type": "%", + }, + "right": Bin { + "kind": "bin", + "left": Number { + "kind": "number", + "value": "8", + }, + "right": Number { + "kind": "number", + "value": "2", + }, + "type": "**", + }, + "type": "+", + }, + "right": Unary { + "kind": "unary", + "type": "+", + "what": Unary { + "kind": "unary", + "type": "-", + "what": Number { + "kind": "number", + "value": "2", + }, + }, + }, + "type": "-", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "comments": [], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse params with string concatenation 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""b"", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""b"", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'a'", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""b"", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'a'", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""b"", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'a'", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'a'", + "unicode": false, + "value": "a", + }, + "right": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att2", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""b"", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""b"", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'a'", + "unicode": false, + "value": "a", + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'a'", + "unicode": false, + "value": "a", + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Bin { + "kind": "bin", + "left": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "right": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "BAR", + }, + "what": Name { + "kind": "name", + "name": "Att1", + "resolution": "uqn", + }, + }, + "type": ".", + }, + ], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + ], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "comments": [], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes can parse parms with array values 1`] = ` +Program { + "children": [ + _Function { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + Array { + "items": [ + Entry { + "byRef": false, + "key": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""a"", + "unicode": false, + "value": "a", + }, + "kind": "entry", + "unpack": false, + "value": Number { + "kind": "number", + "value": "1", + }, + }, + Entry { + "byRef": false, + "key": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'b'", + "unicode": false, + "value": "b", + }, + "kind": "entry", + "unpack": false, + "value": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "class", + }, + "what": Name { + "kind": "name", + "name": "Test", + "resolution": "uqn", + }, + }, + }, + Entry { + "byRef": false, + "key": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'c'", + "unicode": false, + "value": "c", + }, + "kind": "entry", + "unpack": false, + "value": Array { + "items": [], + "kind": "array", + "shortForm": true, + }, + }, + ], + "kind": "array", + "shortForm": true, + }, + ], + "kind": "attribute", + "name": "List", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes doesnt parse attributes for assignments 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "operator": "=", + "right": Number { + "kind": "number", + "value": "1", + }, + }, + "kind": "expressionstatement", + }, + ], + "comments": [], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes doesnt repeat attributes from previous function 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [], + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [], + "kind": "attribute", + "name": "Att1", + }, + ], + "kind": "attrgroup", + }, + ], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "type": null, + "visibility": "", + }, + Method { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "c", + }, + "nullable": false, + "type": null, + "visibility": "", + }, + Method { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "d", + }, + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes parses attributes as comments for PHP < 8 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "leadingComments": [ + CommentLine { + "kind": "commentline", + "offset": 45, + "value": "#[Att2] +", + }, + ], + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "leadingComments": [ + CommentLine { + "kind": "commentline", + "offset": 9, + "value": "#[Att1] +", + }, + ], + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + }, + ], + "comments": [ + CommentLine { + "kind": "commentline", + "offset": 9, + "value": "#[Att1] +", + }, + CommentLine { + "kind": "commentline", + "offset": 45, + "value": "#[Att2] +", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Parse Attributes parses this complicated edge case 1`] = ` +Program { + "children": [ + UseGroup { + "items": [ + UseItem { + "alias": Identifier { + "kind": "identifier", + "name": "Assert", + }, + "kind": "useitem", + "name": "Symfony\\Component\\Validator\\Constraints", + "type": null, + }, + ], + "kind": "usegroup", + "name": null, + "type": null, + }, + Class { + "attrGroups": [], + "body": [ + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [ + AttrGroup { + "attrs": [ + Attribute { + "args": [ + namedargument { + "kind": "namedargument", + "name": "allowNull", + "value": Boolean { + "kind": "boolean", + "raw": "false", + "value": false, + }, + }, + namedargument { + "kind": "namedargument", + "name": "groups", + "value": Array { + "items": [ + Entry { + "byRef": false, + "key": null, + "kind": "entry", + "unpack": false, + "value": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'foo'", + "unicode": false, + "value": "foo", + }, + }, + ], + "kind": "array", + "shortForm": true, + }, + }, + ], + "kind": "attribute", + "name": "Assert\\NotBlank", + }, + Attribute { + "args": [ + namedargument { + "kind": "namedargument", + "name": "max", + "value": Number { + "kind": "number", + "value": "255", + }, + }, + namedargument { + "kind": "namedargument", + "name": "groups", + "value": Array { + "items": [ + Entry { + "byRef": false, + "key": null, + "kind": "entry", + "unpack": false, + "value": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'foo'", + "unicode": false, + "value": "foo", + }, + }, + ], + "kind": "array", + "shortForm": true, + }, + }, + ], + "kind": "attribute", + "name": "Assert\\Length", + }, + ], + "kind": "attrgroup", + }, + ], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "value", + }, + "nullable": true, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + "value": NullKeyword { + "kind": "nullkeyword", + "raw": "null", + }, + }, + ], + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "ValueModel", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; diff --git a/test/snapshot/__snapshots__/bin.test.js.snap b/test/snapshot/__snapshots__/bin.test.js.snap index 3df773a1d..859c2ea69 100644 --- a/test/snapshot/__snapshots__/bin.test.js.snap +++ b/test/snapshot/__snapshots__/bin.test.js.snap @@ -2,7 +2,7 @@ exports[`bin != 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -21,14 +21,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin !== 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -47,14 +47,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin % 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -73,14 +73,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin & 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -99,14 +99,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin && 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -125,14 +125,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin * 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -151,14 +151,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin ** 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -177,14 +177,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin ** right-associative 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -212,14 +212,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin + 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -238,14 +238,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin . 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -264,14 +264,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin / 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -290,14 +290,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin < 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -316,14 +316,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin << 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -342,14 +342,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin <= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -368,14 +368,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin <=> 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -394,14 +394,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin == 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -420,14 +420,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin === 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -446,14 +446,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin > 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -472,14 +472,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin >= 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -498,14 +498,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin >> 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -524,14 +524,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin ?? (php < 7) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": RetIf { "falseExpr": Variable { @@ -550,7 +550,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -572,7 +572,7 @@ Program { exports[`bin ?? 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -591,14 +591,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin ?? right-associative 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -626,14 +626,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin ^ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -652,14 +652,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin | 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -678,14 +678,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin || 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -704,14 +704,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin - 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -730,14 +730,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin and 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -756,14 +756,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -791,14 +791,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin instanceof 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -817,14 +817,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin instanceof parent 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -842,14 +842,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin instanceof self 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -867,14 +867,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin instanceof static 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -892,14 +892,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin instanceof variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -918,14 +918,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -962,14 +962,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin multiple instanceof static 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -1004,14 +1004,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin or 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -1030,14 +1030,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -1057,14 +1057,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin parens around \`and\` 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1093,14 +1093,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin parens around \`or\` 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1129,14 +1129,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin parens around \`xor\` 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1165,14 +1165,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`bin xor 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -1191,7 +1191,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/block.test.js.snap b/test/snapshot/__snapshots__/block.test.js.snap index 84ca31775..6554522b6 100644 --- a/test/snapshot/__snapshots__/block.test.js.snap +++ b/test/snapshot/__snapshots__/block.test.js.snap @@ -2,10 +2,10 @@ exports[`block check empty php blocks 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 8, @@ -17,7 +17,7 @@ Program { "raw": " SOME HTML OUTPUT ", - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 64, @@ -28,7 +28,7 @@ SOME HTML OUTPUT ", }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 8, @@ -42,17 +42,17 @@ SOME HTML OUTPUT "value": "/* Inner comment */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block check empty php file 1`] = ` Program { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 8, @@ -63,7 +63,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 8, @@ -72,26 +72,28 @@ Program { */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty class block 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", "name": "foo", - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 12, @@ -101,26 +103,26 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 12, "value": "/* 1 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty declare block 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 18, @@ -129,7 +131,7 @@ Program { ], }, ], - "directives": Array [ + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -146,26 +148,26 @@ Program { "mode": "block", }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 18, "value": "/* 1 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty declare short form 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 17, @@ -174,7 +176,7 @@ Program { ], }, ], - "directives": Array [ + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -191,27 +193,27 @@ Program { "mode": "short", }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 17, "value": "/* 1 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty for 1`] = ` Program { - "children": Array [ + "children": [ For { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 10, @@ -222,34 +224,34 @@ Program { ], "kind": "block", }, - "increment": Array [], - "init": Array [], + "increment": [], + "init": [], "kind": "for", "shortForm": false, - "test": Array [], + "test": [], }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 10, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty for short form 1`] = ` Program { - "children": Array [ + "children": [ For { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 10, @@ -260,34 +262,34 @@ Program { ], "kind": "block", }, - "increment": Array [], - "init": Array [], + "increment": [], + "init": [], "kind": "for", "shortForm": true, - "test": Array [], + "test": [], }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 10, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty foreach 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 24, @@ -313,27 +315,27 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 24, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty foreach short form 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 23, @@ -359,28 +361,29 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 23, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty function block 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 17, @@ -401,25 +404,25 @@ Program { "type": null, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 17, "value": "/* 1 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty if #2 short form 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Variable { "curly": false, @@ -430,14 +433,14 @@ Program { }, ], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 10, "value": "/* pre */", }, ], - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 24, @@ -452,7 +455,7 @@ Program { "kind": "variable", "name": "foo", }, - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 43, @@ -461,7 +464,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 10, @@ -478,20 +481,20 @@ Program { "value": "/* out */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty if #3 short form 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 50, @@ -500,9 +503,9 @@ Program { ], }, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 34, @@ -519,9 +522,9 @@ Program { }, }, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 10, @@ -538,7 +541,7 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 10, @@ -555,21 +558,21 @@ Program { "value": "/* bar */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty if 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 11, @@ -589,27 +592,27 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 11, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty if short form 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 10, @@ -626,30 +629,32 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 10, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty method block 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 30, @@ -663,6 +668,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -679,6 +685,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -686,26 +693,26 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 30, "value": "/* 1 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty namespace block 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 16, @@ -719,22 +726,22 @@ Program { "withBrackets": true, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 16, "value": "/* 1 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty statement 1`] = ` Program { - "children": Array [], - "comments": Array [ + "children": [], + "comments": [ CommentBlock { "kind": "commentblock", "offset": 0, @@ -751,9 +758,9 @@ Program { "value": "/* 3 */", }, ], - "errors": Array [], + "errors": [], "kind": "program", - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 0, @@ -775,13 +782,13 @@ Program { exports[`block empty switch 1`] = ` Program { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 15, @@ -801,29 +808,29 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 15, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty switch case short form 1`] = ` Program { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [ + "children": [ Case { "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 22, @@ -849,27 +856,27 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 22, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block empty switch short form 1`] = ` Program { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 14, @@ -889,23 +896,23 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 14, "value": "/* foo */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`block single 1`] = ` Program { - "children": Array [ + "children": [ Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -926,8 +933,8 @@ Program { "kind": "block", }, ], - "comments": Array [], - "errors": Array [], + "comments": [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/boolean.test.js.snap b/test/snapshot/__snapshots__/boolean.test.js.snap index 680a50274..b629ed3ee 100644 --- a/test/snapshot/__snapshots__/boolean.test.js.snap +++ b/test/snapshot/__snapshots__/boolean.test.js.snap @@ -2,7 +2,7 @@ exports[`boolean assign (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -21,14 +21,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -47,7 +47,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/break.test.js.snap b/test/snapshot/__snapshots__/break.test.js.snap index 3dc58b265..7855e22f8 100644 --- a/test/snapshot/__snapshots__/break.test.js.snap +++ b/test/snapshot/__snapshots__/break.test.js.snap @@ -2,7 +2,7 @@ exports[`break argument 0 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": Number { @@ -11,14 +11,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`break argument 1 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": Number { @@ -27,14 +27,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`break argument 2 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": Number { @@ -43,20 +43,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`break should fail when no ';' at end 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": undefined, }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -71,20 +71,20 @@ Program { exports[`break simple 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`break with expression 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": Variable { @@ -94,14 +94,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`break with parens 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": Number { @@ -111,7 +111,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/buffer.test.js.snap b/test/snapshot/__snapshots__/buffer.test.js.snap index 7ea8554a1..44e8a8139 100644 --- a/test/snapshot/__snapshots__/buffer.test.js.snap +++ b/test/snapshot/__snapshots__/buffer.test.js.snap @@ -2,13 +2,13 @@ exports[`Test buffers handles buffers as input 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"test\\"", + "raw": ""test"", "unicode": false, "value": "test", }, @@ -17,7 +17,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/byref.test.js.snap b/test/snapshot/__snapshots__/byref.test.js.snap index 2f1fa3e0f..90966c843 100644 --- a/test/snapshot/__snapshots__/byref.test.js.snap +++ b/test/snapshot/__snapshots__/byref.test.js.snap @@ -2,7 +2,7 @@ exports[`byref call result 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -12,7 +12,7 @@ Program { "name": "a", }, "right": Call { - "arguments": Array [ + "arguments": [ Variable { "byref": true, "curly": false, @@ -31,14 +31,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -60,14 +60,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -93,14 +93,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #4 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -126,14 +126,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #5 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -159,14 +159,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #6 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -200,14 +200,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #7 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -217,7 +217,7 @@ Program { "name": "var", }, "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -236,14 +236,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable #8 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -253,7 +253,7 @@ Program { "name": "var", }, "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -265,14 +265,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref callable variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -290,14 +290,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref closure 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -308,9 +308,10 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -318,7 +319,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [ + "uses": [ Variable { "byref": true, "curly": false, @@ -331,17 +332,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref foreach (key/value) 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "key": Variable { @@ -364,17 +365,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref foreach 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "key": null, @@ -393,31 +394,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref function definition 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "bar", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": true, @@ -430,14 +435,14 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref new class 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -447,7 +452,7 @@ Program { "name": "a", }, "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -459,14 +464,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref offset lookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -485,14 +490,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -517,14 +522,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref return statement 1`] = ` Program { - "children": Array [ + "children": [ Return { "expr": Variable { "byref": true, @@ -535,14 +540,14 @@ Program { "kind": "return", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref static lookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -568,14 +573,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -605,14 +610,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -646,14 +651,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #4 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -679,14 +684,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #5 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -716,14 +721,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #6 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -757,14 +762,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #7 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -774,7 +779,7 @@ Program { "name": "var", }, "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -792,14 +797,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup #8 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -809,7 +814,7 @@ Program { "name": "var", }, "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -827,14 +832,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref staticlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -860,14 +865,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -885,31 +890,35 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref variadic 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "var", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": true, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -922,14 +931,14 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref with bin #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -955,14 +964,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`byref with bin 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -989,7 +998,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/call.test.js.snap b/test/snapshot/__snapshots__/call.test.js.snap index 4f519057e..3cb9f66b4 100644 --- a/test/snapshot/__snapshots__/call.test.js.snap +++ b/test/snapshot/__snapshots__/call.test.js.snap @@ -2,13 +2,13 @@ exports[`Test call array 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -17,7 +17,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Foo\\"", + "raw": ""Foo"", "unicode": false, "value": "Foo", }, @@ -30,7 +30,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -43,20 +43,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call array parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -65,7 +65,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Foo\\"", + "raw": ""Foo"", "unicode": false, "value": "Foo", }, @@ -78,7 +78,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -92,26 +92,213 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call comments 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + Array { + "items": [ + Entry { + "byRef": false, + "key": null, + "kind": "entry", + "leadingComments": [ + CommentLine { + "kind": "commentline", + "offset": 10, + "value": "// comment +", + }, + ], + "unpack": false, + "value": Number { + "kind": "number", + "value": "100", + }, + }, + Entry { + "byRef": false, + "key": null, + "kind": "entry", + "unpack": false, + "value": Number { + "kind": "number", + "value": "0", + }, + }, + ], + "kind": "array", + "shortForm": false, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "comments": [ + CommentLine { + "kind": "commentline", + "offset": 10, + "value": "// comment +", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call doesnt confused static methods with named arguments 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + Call { + "arguments": [], + "kind": "call", + "what": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "bar", + }, + "what": Name { + "kind": "name", + "name": "a", + "resolution": "uqn", + }, + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call handles spread operator at call site 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + variadic { + "kind": "variadic", + "what": Variable { + "curly": false, + "kind": "variable", + "name": "bar", + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Call { + "arguments": [ + Variable { + "curly": false, + "kind": "variable", + "name": "bar", + }, + variadic { + "kind": "variadic", + "what": Variable { + "curly": false, + "kind": "variable", + "name": "baz", + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Call { + "arguments": [ + variadic { + "kind": "variadic", + "what": Variable { + "curly": false, + "kind": "variable", + "name": "bar", + }, + }, + variadic { + "kind": "variadic", + "what": Variable { + "curly": false, + "kind": "variable", + "name": "baz", + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`Test call inside offsetlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"offset\\"", + "raw": ""offset"", "unicode": false, "value": "offset", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -129,14 +316,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -145,7 +332,7 @@ Program { "name": "property", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -163,17 +350,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -182,7 +369,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -191,7 +378,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -200,7 +387,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -223,14 +410,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -240,7 +427,7 @@ Program { "name": "property", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -258,14 +445,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (4) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -289,7 +476,7 @@ Program { "name": "property", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -309,14 +496,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (5) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -325,7 +512,7 @@ Program { "name": "CONSTANT", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -343,14 +530,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (6) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -364,7 +551,7 @@ Program { }, }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -382,14 +569,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (7) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -425,7 +612,7 @@ Program { }, }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -445,14 +632,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (8) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -462,13 +649,13 @@ Program { "name": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"property\\"", + "raw": ""property"", "unicode": false, "value": "property", }, }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -486,14 +673,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (9) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -507,7 +694,7 @@ Program { }, }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -525,20 +712,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (10) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -557,24 +744,24 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup (11) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", "offset": Literal { "kind": "literal", "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -593,17 +780,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call inside staticlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -612,7 +799,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -631,17 +818,90 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call keyword as named argument 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + namedargument { + "kind": "namedargument", + "name": "array", + "value": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call mix of unnamed and named arguments 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + Number { + "kind": "number", + "value": "50", + }, + namedargument { + "kind": "namedargument", + "name": "num", + "value": Number { + "kind": "number", + "value": "100", + }, + }, + namedargument { + "kind": "namedargument", + "name": "start_index", + "value": Number { + "kind": "number", + "value": "0", + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`Test call multiple (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -650,7 +910,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -659,7 +919,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -681,23 +941,23 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -710,17 +970,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call multiple arguments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -747,21 +1007,52 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call named arguments in php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + namedargument { + "kind": "namedargument", + "name": "a", + "value": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`Test call nested 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Call { - "arguments": Array [ + "arguments": [ Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -788,24 +1079,87 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call nullsafepropertylookup (2) 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "call", + }, + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test call nullsafepropertylookup 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "call", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`Test call offsetlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": OffsetLookup { "kind": "offsetlookup", "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"index\\"", + "raw": ""index"", "unicode": false, "value": "index", }, @@ -819,23 +1173,25 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call parent 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -857,6 +1213,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -873,6 +1230,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -880,17 +1238,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call propertylookup (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -915,17 +1273,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -943,23 +1301,25 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call self 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -981,6 +1341,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -997,6 +1358,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1004,17 +1366,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -1025,17 +1387,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call single argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -1052,23 +1414,25 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call static 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -1090,6 +1454,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -1106,6 +1471,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1113,17 +1479,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call staticlookup (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -1141,17 +1507,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call staticlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -1169,23 +1535,23 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call string 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": String { "isDoubleQuote": true, "kind": "string", "parenthesizedExpression": true, - "raw": "\\"func\\"", + "raw": ""func"", "unicode": false, "value": "func", }, @@ -1193,28 +1559,28 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call trailing comma #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"method\\"", + "raw": ""method"", "unicode": false, "value": "method", }, String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -1229,28 +1595,28 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call trailing comma #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"method\\"", + "raw": ""method"", "unicode": false, "value": "method", }, String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -1272,28 +1638,28 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call trailing comma 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"method\\"", + "raw": ""method"", "unicode": false, "value": "method", }, String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -1308,17 +1674,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call variable function (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -1337,17 +1703,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call variable function (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -1366,17 +1732,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test call variable function 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Variable { "curly": false, @@ -1387,7 +1753,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/class.test.js.snap b/test/snapshot/__snapshots__/class.test.js.snap index e64d302eb..068548dfe 100644 --- a/test/snapshot/__snapshots__/class.test.js.snap +++ b/test/snapshot/__snapshots__/class.test.js.snap @@ -1,14 +1,49 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Test classes 8.4 allow new without parenthesis 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Bin { + "kind": "bin", + "left": New { + "arguments": [], + "kind": "new", + "what": Name { + "kind": "name", + "name": "People", + "resolution": "uqn", + }, + }, + "right": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "name", + "resolution": "uqn", + }, + }, + "type": "->", + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + exports[`Test classes Advanced tests 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { "adaptations": null, "kind": "traituse", - "traits": Array [ + "traits": [ Name { "kind": "name", "name": "A", @@ -17,7 +52,7 @@ Program { ], }, TraitUse { - "adaptations": Array [ + "adaptations": [ TraitAlias { "as": Identifier { "kind": "identifier", @@ -30,7 +65,7 @@ Program { }, ], "kind": "traituse", - "traits": Array [ + "traits": [ Name { "kind": "name", "name": "B", @@ -41,7 +76,7 @@ Program { PropertyStatement { "isStatic": false, "kind": "propertystatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 87, @@ -62,14 +97,16 @@ Program { */", }, ], - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "var", }, "nullable": false, + "readonly": false, "type": null, "value": Boolean { "kind": "boolean", @@ -81,14 +118,16 @@ Program { "visibility": null, }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": true, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -100,14 +139,16 @@ Program { "visibility": "", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -120,7 +161,7 @@ Program { }, ], "extends": null, - "implements": Array [ + "implements": [ Name { "kind": "name", "name": "boo", @@ -130,6 +171,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -137,9 +179,11 @@ Program { }, }, Interface { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -152,8 +196,9 @@ Program { }, }, ], + "final": false, "kind": "classconstant", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 332, @@ -161,17 +206,21 @@ Program { ", }, ], + "nullable": false, + "type": null, "visibility": "", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 375, @@ -187,7 +236,7 @@ Program { "visibility": "protected", }, ], - "extends": Array [ + "extends": [ Name { "kind": "name", "name": "something", @@ -201,9 +250,10 @@ Program { }, }, Trait { - "body": Array [ + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -216,8 +266,9 @@ Program { }, }, ], + "final": false, "kind": "classconstant", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 455, @@ -225,14 +276,18 @@ Program { ", }, ], + "nullable": false, + "type": null, "visibility": "", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": true, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -251,7 +306,7 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 87, @@ -289,23 +344,25 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test classes Implement #183 : static keyword as identifier 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -323,7 +380,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -341,7 +398,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -359,7 +416,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -378,7 +435,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -401,6 +458,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": true, "kind": "method", "name": Identifier { @@ -417,6 +475,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -424,27 +483,78 @@ Program { }, }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes Implement readonly property 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "uid", + }, + "nullable": false, + "readonly": true, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + }, + ], + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "User", + }, + }, + ], + "errors": [], "kind": "program", } `; exports[`Test classes Implement typed_properties_v2 / php74 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "prop", }, "nullable": true, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "int", @@ -461,26 +571,32 @@ Program { PropertyStatement { "isStatic": true, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "y", }, "nullable": false, - "type": Array [ - TypeReference { - "kind": "typereference", - "name": "float", - "raw": "float", - }, - TypeReference { - "kind": "typereference", - "name": "string", - "raw": "string", - }, - ], + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "float", + "raw": "float", + }, + TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + ], + }, "value": null, }, ], @@ -492,6 +608,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -499,27 +616,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test classes Test js properties 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": true, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "constructor", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -527,14 +647,16 @@ Program { "visibility": "", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -546,9 +668,10 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -601,6 +724,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -617,6 +741,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -624,20 +749,21 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test classes Test of silent mode 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { "adaptations": null, "kind": "traituse", - "traits": Array [ + "traits": [ Name { "kind": "name", "name": "A", @@ -646,7 +772,7 @@ Program { ], }, TraitUse { - "adaptations": Array [ + "adaptations": [ TraitAlias { "as": null, "kind": "traitalias", @@ -663,7 +789,7 @@ Program { }, ], "kind": "traituse", - "traits": Array [ + "traits": [ Name { "kind": "name", "name": "B", @@ -677,6 +803,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -684,7 +811,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -693,7 +820,7 @@ Program { "token": "'use' (T_USE)", }, Error { - "expected": Array [ + "expected": [ 119, 200, ], @@ -717,7 +844,7 @@ Program { "token": "';'", }, Error { - "expected": Array [ + "expected": [ 119, 200, ], @@ -738,233 +865,745 @@ Program { } `; -exports[`Test classes Validate usual declarations 1`] = ` +exports[`Test classes Test promoted class properties php 8 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ - ClassConstant { - "constants": Array [ - Constant { - "kind": "constant", + "attrGroups": [], + "body": [ + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 1, + "kind": "parameter", "name": Identifier { "kind": "identifier", - "name": "FOO", + "name": "id", }, - "value": String { - "isDoubleQuote": true, - "kind": "string", - "raw": "\\"azerty\\"", - "unicode": false, - "value": "azerty", + "nullable": false, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", }, + "value": null, + "variadic": false, }, - ], - "kind": "classconstant", - "visibility": "", - }, - PropertyStatement { - "isStatic": true, - "kind": "propertystatement", - "properties": Array [ - Property { - "kind": "property", + Parameter { + "attrGroups": [], + "byref": false, + "flags": 4, + "kind": "parameter", "name": Identifier { "kind": "identifier", - "name": "var", + "name": "name", }, "nullable": false, + "readonly": false, "type": null, "value": null, + "variadic": false, }, - ], - "visibility": "public", - }, - Method { - "arguments": Array [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", - "name": "data", + "name": "c", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", - "name": "array", - "raw": "array", + "name": "int", + "raw": "int", }, - "value": NullKeyword { - "kind": "nullkeyword", - "raw": "null", + "value": null, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 2, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "req", + }, + "nullable": false, + "readonly": false, + "type": Name { + "kind": "name", + "name": "ServerRequestInterface", + "resolution": "uqn", }, + "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ - ExpressionStatement { - "expression": Assign { - "kind": "assign", - "left": PropertyLookup { - "kind": "propertylookup", - "offset": Identifier { - "kind": "identifier", - "name": "data", - }, - "what": Variable { - "curly": false, - "kind": "variable", - "name": "this", - }, - }, - "operator": "=", - "right": Variable { - "curly": false, - "kind": "variable", - "name": "data", - }, - }, - "kind": "expressionstatement", - }, - ], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { "kind": "identifier", - "name": "__construct", + "name": "constructor", }, "nullable": false, "type": null, "visibility": "public", }, - ClassConstant { - "constants": Array [ - Constant { - "kind": "constant", + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "__proto__", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes Test promoted nullable properties php 8 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 1, + "kind": "parameter", "name": Identifier { "kind": "identifier", - "name": "list", + "name": "maybe", }, - "value": String { - "isDoubleQuote": true, - "kind": "string", - "raw": "\\"bar\\"", - "unicode": false, - "value": "bar", + "nullable": true, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", }, + "value": null, + "variadic": false, }, - ], - "kind": "classconstant", - "visibility": "", - }, - Method { - "arguments": Array [ Parameter { + "attrGroups": [], "byref": false, + "flags": 4, "kind": "parameter", "name": Identifier { "kind": "identifier", - "name": "foo", + "name": "opt", }, - "nullable": false, - "type": null, - "value": StaticLookup { - "kind": "staticlookup", - "offset": Identifier { - "kind": "identifier", - "name": "list", - }, - "what": SelfReference { - "kind": "selfreference", - "raw": "self", - }, + "nullable": true, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", }, + "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ - Return { - "expr": StaticLookup { - "kind": "staticlookup", - "offset": Identifier { - "kind": "identifier", - "name": "list", - }, - "what": Variable { - "curly": false, - "kind": "variable", - "name": "this", - }, - }, - "kind": "return", - }, - ], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { "kind": "identifier", - "name": "new", + "name": "constructor", }, "nullable": false, "type": null, "visibility": "public", }, - PropertyStatement { - "isStatic": false, - "kind": "propertystatement", - "properties": Array [ - Property { - "kind": "property", - "name": Identifier { - "kind": "identifier", - "name": "foo", - }, - "nullable": false, - "type": null, - "value": null, - }, - ], - "visibility": "protected", - }, - PropertyStatement { - "isStatic": false, - "kind": "propertystatement", - "properties": Array [ - Property { - "kind": "property", - "name": Identifier { - "kind": "identifier", - "name": "bar", - }, - "nullable": false, - "type": null, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "__proto__", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes Test promoted readonly class properties 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 1, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "id", + }, + "nullable": false, + "readonly": true, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "__construct", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Bob", + }, + }, + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 1, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "id", + }, + "nullable": false, + "readonly": true, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "__construct", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Bob2", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes Test that readonly method parameters are throwing errors 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 1, + "kind": "parameter", + "name": null, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": null, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "id", + }, + "nullable": false, + "readonly": true, + "type": TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + "value": null, + }, + ], + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Bob", + }, + }, + ExpressionStatement { + "expression": undefined, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": undefined, + "kind": "error", + "line": 3, + "message": "readonly properties can be used only on class constructor on line 3", + "token": undefined, + }, + Error { + "expected": 222, + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY), expecting T_VARIABLE on line 3", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": [ + ",", + ")", + ], + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY) on line 3", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": ")", + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY), expecting ')' on line 3", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": "{", + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY), expecting '{' on line 3", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": [ + ",", + ";", + "=", + ], + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected ')' on line 3", + "token": "')'", + }, + Error { + "expected": ";", + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected ')', expecting ';' on line 3", + "token": "')'", + }, + Error { + "expected": [ + 198, + 222, + 182, + ], + "kind": "error", + "line": 3, + "message": "Parse Error : syntax error, unexpected '{' on line 3", + "token": "'{'", + }, + Error { + "expected": "EXPR", + "kind": "error", + "line": 4, + "message": "Parse Error : syntax error, unexpected '}' on line 4", + "token": "'}'", + }, + ], + "kind": "program", +} +`; + +exports[`Test classes Validate usual declarations 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "FOO", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""azerty"", + "unicode": false, + "value": "azerty", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + PropertyStatement { + "isStatic": true, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "var", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + }, + ], + "visibility": "public", + }, + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "data", + }, + "nullable": false, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "array", + "raw": "array", + }, + "value": NullKeyword { + "kind": "nullkeyword", + "raw": "null", + }, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": PropertyLookup { + "kind": "propertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "data", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "this", + }, + }, + "operator": "=", + "right": Variable { + "curly": false, + "kind": "variable", + "name": "data", + }, + }, + "kind": "expressionstatement", + }, + ], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "__construct", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "list", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""bar"", + "unicode": false, + "value": "bar", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + Method { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "list", + }, + "what": SelfReference { + "kind": "selfreference", + "raw": "self", + }, + }, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [ + Return { + "expr": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "list", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "this", + }, + }, + "kind": "return", + }, + ], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "new", + }, + "nullable": false, + "type": null, + "visibility": "public", + }, + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + }, + ], + "visibility": "protected", + }, + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "bar", + }, + "nullable": false, + "readonly": false, + "type": null, "value": null, }, ], "visibility": "private", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -981,7 +1620,7 @@ Program { "name": "bar", "resolution": "uqn", }, - "implements": Array [ + "implements": [ Name { "kind": "name", "name": "bim", @@ -1001,6 +1640,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": true, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1008,11 +1648,12 @@ Program { }, }, Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { - "adaptations": Array [ + "adaptations": [ TraitPrecedence { - "instead": Array [ + "instead": [ Name { "kind": "name", "name": "A", @@ -1031,7 +1672,7 @@ Program { }, }, TraitPrecedence { - "instead": Array [ + "instead": [ Name { "kind": "name", "name": "B", @@ -1137,7 +1778,7 @@ Program { }, ], "kind": "traituse", - "traits": Array [ + "traits": [ Name { "kind": "name", "name": "A", @@ -1151,11 +1792,13 @@ Program { ], }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": true, "isAbstract": true, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -1176,6 +1819,7 @@ Program { "isAbstract": true, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1183,21 +1827,23 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test classes abstract and final 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1205,7 +1851,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": 187, "kind": "error", @@ -1220,14 +1866,16 @@ Program { exports[`Test classes class name as identifier 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1235,21 +1883,23 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test classes empty 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1257,21 +1907,23 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test classes final and abstract 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1279,7 +1931,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": 187, "kind": "error", @@ -1291,3 +1943,173 @@ Program { "kind": "program", } `; + +exports[`Test classes handles property types with a leading \\ 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + PropertyStatement { + "isStatic": false, + "kind": "propertystatement", + "properties": [ + Property { + "attrGroups": [], + "kind": "property", + "name": Identifier { + "kind": "identifier", + "name": "baz", + }, + "nullable": false, + "readonly": false, + "type": Name { + "kind": "name", + "name": "\\Bar", + "resolution": "fqn", + }, + "value": null, + }, + ], + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes new without parenthesis throw errors in PHP < 8.4 1`] = `"New without parenthesis is not allowed before PHP 8.4 on line 1"`; + +exports[`Test classes readonly class in PHP8.2 should support abstract readonly 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [], + "extends": null, + "implements": null, + "isAbstract": true, + "isAnonymous": false, + "isFinal": false, + "isReadonly": true, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes readonly class in PHP8.2 should support final readonly 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": true, + "isReadonly": true, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes readonly class in PHP8.2 should support readonly 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": true, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes readonly class in PHP8.2 should support readonly abstract 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [], + "extends": null, + "implements": null, + "isAbstract": true, + "isAnonymous": false, + "isFinal": false, + "isReadonly": true, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test classes readonly class in PHP8.2 should support readonly final 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": true, + "isReadonly": true, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; diff --git a/test/snapshot/__snapshots__/classconstant.test.js.snap b/test/snapshot/__snapshots__/classconstant.test.js.snap index e844f3798..743c71381 100644 --- a/test/snapshot/__snapshots__/classconstant.test.js.snap +++ b/test/snapshot/__snapshots__/classconstant.test.js.snap @@ -1,12 +1,63 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`classconstant final 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "CONSTANT", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""Hello world!"", + "unicode": false, + "value": "Hello world!", + }, + }, + ], + "final": true, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + exports[`classconstant multiple 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -16,7 +67,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, @@ -30,13 +81,79 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Other hello world!\\"", + "raw": ""Other hello world!"", + "unicode": false, + "value": "Other hello world!", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`classconstant multiple 8.3 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "NAME_1", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""Hello world!"", + "unicode": false, + "value": "Hello world!", + }, + }, + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "NAME_2", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""Other hello world!"", "unicode": false, "value": "Other hello world!", }, }, ], + "final": false, "kind": "classconstant", + "nullable": false, + "type": null, "visibility": "", }, ], @@ -45,6 +162,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -52,18 +170,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classconstant private 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -73,13 +193,16 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, }, ], + "final": false, "kind": "classconstant", + "nullable": false, + "type": null, "visibility": "private", }, ], @@ -88,6 +211,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -95,18 +219,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classconstant protected 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -116,13 +242,16 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, }, ], + "final": false, "kind": "classconstant", + "nullable": false, + "type": null, "visibility": "protected", }, ], @@ -131,6 +260,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -138,18 +268,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classconstant public 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -159,13 +291,16 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, }, ], + "final": false, "kind": "classconstant", + "nullable": false, + "type": null, "visibility": "public", }, ], @@ -174,6 +309,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -181,18 +317,69 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classconstant simple 1`] = ` Program { - "children": Array [ + "children": [ + Class { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "CONSTANT", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""Hello world!"", + "unicode": false, + "value": "Hello world!", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`classconstant simple using 8.3 1`] = ` +Program { + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -202,13 +389,16 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, }, ], + "final": false, "kind": "classconstant", + "nullable": false, + "type": null, "visibility": "", }, ], @@ -217,6 +407,60 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`classconstant type hinted (supported) 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "CONSTANT", + }, + "value": String { + "isDoubleQuote": true, + "kind": "string", + "raw": ""Hello world!"", + "unicode": false, + "value": "Hello world!", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + "visibility": "public", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -224,7 +468,9 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; + +exports[`classconstant type hinted (unsupported) 1`] = `"Parse Error : syntax error, unexpected 'CONSTANT' (T_STRING), expecting '=' on line 1"`; diff --git a/test/snapshot/__snapshots__/classreference.test.js.snap b/test/snapshot/__snapshots__/classreference.test.js.snap index cbc8d39a2..13bf8cf32 100644 --- a/test/snapshot/__snapshots__/classreference.test.js.snap +++ b/test/snapshot/__snapshots__/classreference.test.js.snap @@ -2,28 +2,32 @@ exports[`classreference argument type (2) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", - "name": "Foo\\\\Foo", + "name": "Foo\\Foo", "resolution": "qn", }, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -36,24 +40,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classreference argument type 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", "name": "Foo", @@ -63,8 +70,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -77,17 +85,17 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classreference call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -105,14 +113,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classreference constant 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -129,14 +137,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`classreference variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -154,7 +162,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/clone.test.js.snap b/test/snapshot/__snapshots__/clone.test.js.snap index 68ced67ac..9bfb63e0d 100644 --- a/test/snapshot/__snapshots__/clone.test.js.snap +++ b/test/snapshot/__snapshots__/clone.test.js.snap @@ -2,7 +2,7 @@ exports[`clone assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -24,14 +24,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`clone simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Clone { "kind": "clone", @@ -44,7 +44,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/closure.test.js.snap b/test/snapshot/__snapshots__/closure.test.js.snap index 919e6c4eb..0f802d252 100644 --- a/test/snapshot/__snapshots__/closure.test.js.snap +++ b/test/snapshot/__snapshots__/closure.test.js.snap @@ -2,7 +2,7 @@ exports[`closure argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -13,28 +13,32 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -50,20 +54,20 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure argument and use 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -74,28 +78,32 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -111,7 +119,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [ + "uses": [ Variable { "curly": false, "kind": "variable", @@ -123,14 +131,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure argument by ref 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -141,28 +149,32 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -178,20 +190,20 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure arguments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -202,52 +214,62 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -263,20 +285,20 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure arguments and uses 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -287,52 +309,62 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -348,7 +380,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [ + "uses": [ Variable { "curly": false, "kind": "variable", @@ -370,14 +402,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure empty 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -388,9 +420,10 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -398,40 +431,44 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure inside call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, @@ -448,7 +485,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, ], "kind": "call", @@ -461,14 +498,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -479,15 +516,16 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -503,20 +541,20 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure use 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -527,15 +565,16 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -551,7 +590,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [ + "uses": [ Variable { "curly": false, "kind": "variable", @@ -563,14 +602,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure use by ref 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -581,15 +620,16 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -605,7 +645,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [ + "uses": [ Variable { "byref": true, "curly": false, @@ -618,14 +658,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`closure use multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -636,15 +676,16 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -660,7 +701,7 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [ + "uses": [ Variable { "curly": false, "kind": "variable", @@ -682,7 +723,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/comment.test.js.snap b/test/snapshot/__snapshots__/comment.test.js.snap index e56d59f40..0288dac0c 100644 --- a/test/snapshot/__snapshots__/comment.test.js.snap +++ b/test/snapshot/__snapshots__/comment.test.js.snap @@ -2,17 +2,17 @@ exports[`Test comments issues fix #55 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 51, @@ -31,7 +31,7 @@ Program { }, ], "kind": "block", - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 88, @@ -47,7 +47,7 @@ Program { "raw": "true", "value": true, }, - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 122, @@ -57,7 +57,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 51, @@ -77,19 +77,19 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments issues fix #126 : new option 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -103,7 +103,7 @@ Program { "kind": "number", "value": "2", }, - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 119, @@ -112,7 +112,7 @@ Program { ], }, "kind": "expressionstatement", - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 148, @@ -125,7 +125,7 @@ Program { "kind": "block", }, "kind": "if", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 57, @@ -141,7 +141,7 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -168,7 +168,7 @@ Program { "raw": "true", "value": true, }, - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 185, @@ -178,7 +178,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 57, @@ -203,14 +203,14 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments issues fix #189 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -222,7 +222,7 @@ Program { "operator": "=", "right": Bin { "kind": "bin", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 30, @@ -251,7 +251,7 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 61, @@ -275,7 +275,7 @@ Program { "kind": "expressionstatement", }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 30, @@ -295,14 +295,14 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments issues fix #193 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -313,11 +313,11 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 29, @@ -327,7 +327,7 @@ Program { ], "offset": Identifier { "kind": "identifier", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 70, @@ -348,7 +348,7 @@ Program { "kind": "expressionstatement", }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 29, @@ -362,17 +362,17 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments issues fix #250 : Leading comments are treated as trailing comments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -407,7 +407,7 @@ Program { }, }, "kind": "expressionstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -445,7 +445,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -460,7 +460,7 @@ Program { "offset": 26, }, }, - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -500,7 +500,7 @@ Program { }, }, "kind": "expressionstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -535,7 +535,7 @@ Program { "offset": 26, }, }, - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -559,7 +559,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "loc": Location { @@ -639,7 +639,7 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -665,13 +665,15 @@ bar() /* inner */ ; exports[`Test comments issues fix #278 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, @@ -686,9 +688,10 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": true, "kind": "method", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 51, @@ -706,9 +709,10 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, @@ -723,9 +727,10 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": true, "kind": "method", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 155, @@ -743,9 +748,10 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, @@ -756,7 +762,7 @@ Program { }, ], "kind": "block", - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 364, @@ -768,9 +774,10 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": true, "kind": "method", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 261, @@ -793,8 +800,9 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 1, @@ -809,7 +817,7 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 1, @@ -845,14 +853,156 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; +exports[`Test comments issues fix call comments 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [ + Array { + "items": [], + "kind": "array", + "loc": Location { + "end": Position { + "column": 2, + "line": 3, + "offset": 25, + }, + "source": "array // comment +()", + "start": Position { + "column": 5, + "line": 2, + "offset": 6, + }, + }, + "shortForm": false, + }, + ], + "kind": "call", + "loc": Location { + "end": Position { + "column": 4, + "line": 3, + "offset": 27, + }, + "source": "call(array // comment +());", + "start": Position { + "column": 0, + "line": 2, + "offset": 1, + }, + }, + "what": Name { + "kind": "name", + "loc": Location { + "end": Position { + "column": 4, + "line": 2, + "offset": 5, + }, + "source": "call", + "start": Position { + "column": 0, + "line": 2, + "offset": 1, + }, + }, + "name": "call", + "resolution": "uqn", + "trailingComments": [ + CommentLine { + "kind": "commentline", + "loc": Location { + "end": Position { + "column": 0, + "line": 3, + "offset": 23, + }, + "source": "// comment +", + "start": Position { + "column": 11, + "line": 2, + "offset": 12, + }, + }, + "offset": 12, + "value": "// comment +", + }, + ], + }, + }, + "kind": "expressionstatement", + "loc": Location { + "end": Position { + "column": 4, + "line": 3, + "offset": 27, + }, + "source": "call(array // comment +());", + "start": Position { + "column": 0, + "line": 2, + "offset": 1, + }, + }, + }, + ], + "comments": [ + CommentLine { + "kind": "commentline", + "loc": Location { + "end": Position { + "column": 0, + "line": 3, + "offset": 23, + }, + "source": "// comment +", + "start": Position { + "column": 11, + "line": 2, + "offset": 12, + }, + }, + "offset": 12, + "value": "// comment +", + }, + ], + "errors": [], + "kind": "program", + "loc": Location { + "end": Position { + "column": 8, + "line": 4, + "offset": 36, + }, + "source": " +call(array // comment +()); + ", + "start": Position { + "column": 0, + "line": 1, + "offset": 0, + }, + }, +} +`; + exports[`Test comments issues impl #194 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -864,7 +1014,7 @@ Program { "operator": "=", "right": Number { "kind": "number", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 37, @@ -878,7 +1028,7 @@ Program { ], "value": "1", }, - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 70, @@ -887,7 +1037,7 @@ Program { ], }, "kind": "expressionstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 9, @@ -898,19 +1048,19 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": true, "kind": "string", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 123, "value": "/* lead arg */", }, ], - "raw": "\\"arg\\"", - "trailingComments": Array [ + "raw": ""arg"", + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 144, @@ -922,7 +1072,7 @@ Program { }, ], "kind": "call", - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 162, @@ -936,7 +1086,7 @@ Program { }, }, "kind": "expressionstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 93, @@ -944,7 +1094,7 @@ Program { ", }, ], - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 189, @@ -953,7 +1103,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 9, @@ -1002,20 +1152,22 @@ Program { "value": "/* trail program */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments multi line comments test function 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 98, @@ -1027,19 +1179,21 @@ Program { "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Variable { "curly": false, "kind": "variable", "name": "arg", - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 168, @@ -1048,7 +1202,7 @@ Program { ], }, "kind": "return", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 137, @@ -1062,7 +1216,7 @@ Program { }, "byref": true, "kind": "function", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 9, @@ -1073,7 +1227,7 @@ Program { ], "name": Identifier { "kind": "identifier", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 65, @@ -1091,7 +1245,7 @@ Program { "type": null, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 9, @@ -1126,21 +1280,21 @@ Program { "value": "/* ignore */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments multi line comments test if statements 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": If { "alternate": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 351, @@ -1154,9 +1308,9 @@ Program { ], }, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 284, @@ -1180,7 +1334,7 @@ Program { ], }, "kind": "if", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 231, @@ -1190,7 +1344,7 @@ Program { "shortForm": false, "test": Boolean { "kind": "boolean", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 251, @@ -1207,9 +1361,9 @@ Program { }, }, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 190, @@ -1223,7 +1377,7 @@ Program { ], }, "kind": "if", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 89, @@ -1249,10 +1403,10 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 61, @@ -1263,7 +1417,7 @@ Program { }, ], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 38, @@ -1275,7 +1429,7 @@ Program { "shortForm": false, "test": Boolean { "kind": "boolean", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 12, @@ -1294,9 +1448,9 @@ Program { If { "alternate": null, "body": Block { - "children": Array [], + "children": [], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 415, @@ -1313,7 +1467,7 @@ Program { "value": "/* ignore */", }, ], - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 470, @@ -1335,7 +1489,7 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 12, @@ -1454,20 +1608,20 @@ Program { "value": "/* ignore */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments multi line comments test try statements 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 218, @@ -1477,7 +1631,7 @@ Program { }, ], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 182, @@ -1491,10 +1645,10 @@ Program { ], }, "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 36, @@ -1505,7 +1659,7 @@ Program { }, ], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 13, @@ -1513,13 +1667,13 @@ Program { }, ], }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ Noop { "kind": "noop", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 163, @@ -1529,7 +1683,7 @@ Program { }, ], "kind": "block", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 134, @@ -1543,7 +1697,7 @@ Program { ], }, "kind": "catch", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 64, @@ -1553,7 +1707,7 @@ Program { "variable": Variable { "curly": false, "kind": "variable", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 122, @@ -1562,22 +1716,22 @@ Program { ], "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 79, "value": "/* zz */", }, ], - "name": "\\\\Exception", + "name": "\\Exception", "resolution": "fqn", }, Name { "kind": "name", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 99, @@ -1589,14 +1743,14 @@ Program { "value": "/* 2 */", }, ], - "name": "\\\\Foo", + "name": "\\Foo", "resolution": "fqn", }, ], }, ], "kind": "try", - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 241, @@ -1606,7 +1760,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 13, @@ -1680,20 +1834,21 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments test classes 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 72, @@ -1706,24 +1861,28 @@ Program { ", }, ], - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "test", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "toto", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -1733,7 +1892,7 @@ Program { PropertyStatement { "isStatic": true, "kind": "propertystatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 149, @@ -1746,14 +1905,16 @@ Program { "value": "/** @var Class */", }, ], - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "foo", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -1764,17 +1925,19 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 239, @@ -1802,8 +1965,9 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 7, @@ -1814,7 +1978,7 @@ Program { ], "name": Identifier { "kind": "identifier", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 54, @@ -1825,7 +1989,7 @@ Program { }, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "offset": 7, @@ -1873,14 +2037,14 @@ Program { */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test comments test single line comments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1894,7 +2058,7 @@ Program { "kind": "number", "value": "123", }, - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 65, @@ -1904,7 +2068,7 @@ Program { ], }, "kind": "expressionstatement", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 7, @@ -1918,7 +2082,7 @@ Program { ", }, ], - "trailingComments": Array [ + "trailingComments": [ CommentBlock { "kind": "commentblock", "offset": 80, @@ -1927,7 +2091,7 @@ Program { ], }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 7, @@ -1952,7 +2116,7 @@ Program { "value": "/* done */", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/constantstatement.test.js.snap b/test/snapshot/__snapshots__/constantstatement.test.js.snap index 22dea296a..294dc9d86 100644 --- a/test/snapshot/__snapshots__/constantstatement.test.js.snap +++ b/test/snapshot/__snapshots__/constantstatement.test.js.snap @@ -2,9 +2,9 @@ exports[`constantstatement multiple 1`] = ` Program { - "children": Array [ + "children": [ ConstantStatement { - "constants": Array [ + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -14,7 +14,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, @@ -28,7 +28,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Other hello world!\\"", + "raw": ""Other hello world!"", "unicode": false, "value": "Other hello world!", }, @@ -37,16 +37,16 @@ Program { "kind": "constantstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`constantstatement simple 1`] = ` Program { - "children": Array [ + "children": [ ConstantStatement { - "constants": Array [ + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -56,7 +56,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, @@ -65,7 +65,7 @@ Program { "kind": "constantstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/continue.test.js.snap b/test/snapshot/__snapshots__/continue.test.js.snap index 8badeec50..7304d2d5f 100644 --- a/test/snapshot/__snapshots__/continue.test.js.snap +++ b/test/snapshot/__snapshots__/continue.test.js.snap @@ -2,7 +2,7 @@ exports[`continue argument 0 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": Number { @@ -11,14 +11,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`continue argument 1 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": Number { @@ -27,14 +27,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`continue argument 2 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": Number { @@ -43,20 +43,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`continue should fail when no ';' at end 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": undefined, }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -71,20 +71,20 @@ Program { exports[`continue simple 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`continue with expression 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": Variable { @@ -94,14 +94,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`continue with parens 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": Number { @@ -111,7 +111,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/declare.test.js.snap b/test/snapshot/__snapshots__/declare.test.js.snap index ac2484c87..2c5cebf74 100644 --- a/test/snapshot/__snapshots__/declare.test.js.snap +++ b/test/snapshot/__snapshots__/declare.test.js.snap @@ -2,10 +2,10 @@ exports[`declare encoding 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -25,22 +25,22 @@ Program { "mode": "none", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`declare mode short 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -49,7 +49,7 @@ Program { "shortForm": false, }, ], - "directives": Array [ + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -66,17 +66,17 @@ Program { "mode": "short", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`declare multiple 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -110,17 +110,17 @@ Program { "mode": "block", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`declare nested 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -137,17 +137,17 @@ Program { "mode": "block", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`declare strict_types 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -164,17 +164,17 @@ Program { "mode": "none", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`declare ticks 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -191,7 +191,7 @@ Program { "mode": "none", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/echo.test.js.snap b/test/snapshot/__snapshots__/echo.test.js.snap index 1046edf88..8d9553a8b 100644 --- a/test/snapshot/__snapshots__/echo.test.js.snap +++ b/test/snapshot/__snapshots__/echo.test.js.snap @@ -2,20 +2,20 @@ exports[`echo multiple 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -24,20 +24,20 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`echo simple 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -46,7 +46,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/empty.test.js.snap b/test/snapshot/__snapshots__/empty.test.js.snap index 75847a41c..61e4986b7 100644 --- a/test/snapshot/__snapshots__/empty.test.js.snap +++ b/test/snapshot/__snapshots__/empty.test.js.snap @@ -2,7 +2,7 @@ exports[`empty assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -24,14 +24,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`empty simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Empty { "expression": Variable { @@ -44,7 +44,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/encapsed.test.js.snap b/test/snapshot/__snapshots__/encapsed.test.js.snap index cc5701cfb..743c33a27 100644 --- a/test/snapshot/__snapshots__/encapsed.test.js.snap +++ b/test/snapshot/__snapshots__/encapsed.test.js.snap @@ -2,13 +2,13 @@ exports[`encapsed curly #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$$juice} string\\"", + "raw": ""string {$$juice} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -52,20 +52,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed curly #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$call()} string\\"", + "raw": ""string {$call()} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -81,7 +81,7 @@ Program { EncapsedPart { "curly": false, "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Variable { "curly": false, @@ -109,20 +109,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed curly 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$juice} string\\"", + "raw": ""string {$juice} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -162,20 +162,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${$juice} string\\"", + "raw": ""string \${$juice} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -219,20 +219,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${\${$juice}} string\\"", + "raw": ""string \${\${$juice}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -280,20 +280,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #4 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${call()} string\\"", + "raw": ""string \${call()} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -312,7 +312,7 @@ Program { "curly": false, "kind": "variable", "name": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -341,20 +341,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #5 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${test[test]} string\\"", + "raw": ""string \${test[test]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -402,20 +402,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #6 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${test[1]} string\\"", + "raw": ""string \${test[1]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -462,20 +462,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #7 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${test[-1]} string\\"", + "raw": ""string \${test[-1]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -526,20 +526,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces #8 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${test[$var]} string\\"", + "raw": ""string \${test[$var]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -587,20 +587,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed dollar open curly braces 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${juice} string\\"", + "raw": ""string \${juice} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -640,20 +640,464 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed multiple nullsafepropertylookup (complex syntax) 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string {$obj?->property?->property} string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`encapsed multiple propertylookup (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string {$obj->property->property} string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": PropertyLookup { + "kind": "propertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": PropertyLookup { + "kind": "propertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed negative offset in encapsed var offset 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""$var[-1]"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": OffsetLookup { + "kind": "offsetlookup", + "offset": Number { + "kind": "number", + "value": -1, + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + }, + "kind": "encapsedpart", + "syntax": "simple", + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed newline before closing curly (complex syntax) 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string {$var +} string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed no curly 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string $$juice string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string $", + "unicode": false, + "value": "string $", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "juice", + }, + "kind": "encapsedpart", + "syntax": "simple", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed nullsafepropertylookup (complex syntax) 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string {$obj?->property} string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed nullsafepropertylookup (simple syntax) 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string $obj?->property string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + "kind": "encapsedpart", + "syntax": "simple", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "?->property string", + "unicode": false, + "value": "?->property string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed nullsafepropertylookup 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": EncapsedPart { + "curly": false, + "expression": Encapsed { + "kind": "encapsed", + "raw": ""set{$type}"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "set", + "unicode": false, + "value": "set", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "type", + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + ], + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "this", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed nullsafepropertylookup and offsetlookup (complex syntax) 1`] = ` +Program { + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj->property->property} string\\"", + "raw": ""string {$obj?->values[3]?->name} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -668,22 +1112,29 @@ Program { }, EncapsedPart { "curly": false, - "expression": PropertyLookup { - "kind": "propertylookup", + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", "offset": Identifier { "kind": "identifier", - "name": "property", + "name": "name", }, - "what": PropertyLookup { - "kind": "propertylookup", - "offset": Identifier { - "kind": "identifier", - "name": "property", + "what": OffsetLookup { + "kind": "offsetlookup", + "offset": Number { + "kind": "number", + "value": "3", }, - "what": Variable { - "curly": false, - "kind": "variable", - "name": "obj", + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "values", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, }, }, }, @@ -707,57 +1158,154 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; -exports[`encapsed negative offset in encapsed var offset 1`] = ` +exports[`encapsed nullsafepropertylookup by variable (2) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"$var[-1]\\"", + "raw": ""string {$obj?->{$array[1]}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, - "expression": OffsetLookup { - "kind": "offsetlookup", - "offset": Number { - "kind": "number", - "value": -1, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": EncapsedPart { + "curly": false, + "expression": OffsetLookup { + "kind": "offsetlookup", + "offset": Number { + "kind": "number", + "value": "1", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "array", + }, + }, + "kind": "encapsedpart", + "syntax": "complex", }, "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + "kind": "encapsedpart", + "syntax": "complex", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, + }, + ], + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`encapsed nullsafepropertylookup by variable (complex syntax) 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Encapsed { + "kind": "encapsed", + "raw": ""string {$obj?->$var} string"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "string ", + "unicode": false, + "value": "string ", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Variable { "curly": false, "kind": "variable", "name": "var", }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, }, "kind": "encapsedpart", - "syntax": "simple", + "syntax": "complex", + }, + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": " string", + "unicode": false, + "value": " string", + }, + "kind": "encapsedpart", + "syntax": null, }, ], }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; -exports[`encapsed newline before closing curly (complex syntax) 1`] = ` +exports[`encapsed nullsafepropertylookup with comments (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$var -} string\\"", + "raw": ""string {$var?->foo?->bar /* Comment */ } string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -772,10 +1320,24 @@ Program { }, EncapsedPart { "curly": false, - "expression": Variable { - "curly": false, - "kind": "variable", - "name": "var", + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "bar", + }, + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "foo", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + }, }, "kind": "encapsedpart", "syntax": "complex", @@ -797,41 +1359,63 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; -exports[`encapsed no curly 1`] = ` +exports[`encapsed nullsafepropertylookup with multiple call (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $$juice string\\"", + "raw": ""string {$obj?->call()?->call()} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "string $", + "raw": "string ", "unicode": false, - "value": "string $", + "value": "string ", }, "kind": "encapsedpart", "syntax": null, }, EncapsedPart { "curly": false, - "expression": Variable { - "curly": false, - "kind": "variable", - "name": "juice", + "expression": Call { + "arguments": [], + "kind": "call", + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "call", + }, + "what": Call { + "arguments": [], + "kind": "call", + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "call", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + }, }, "kind": "encapsedpart", - "syntax": "simple", + "syntax": "complex", }, EncapsedPart { "curly": false, @@ -850,20 +1434,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup (2) (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $array[koolaid1] string\\"", + "raw": ""string $array[koolaid1] string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -910,20 +1494,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup (3) (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $array[0][0] string\\"", + "raw": ""string $array[0][0] string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -970,20 +1554,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$array[\\"key\\"]} string\\"", + "raw": ""string {$array["key"]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1003,7 +1587,7 @@ Program { "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"key\\"", + "raw": ""key"", "unicode": false, "value": "key", }, @@ -1033,20 +1617,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $array[0] string\\"", + "raw": ""string $array[0] string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1093,20 +1677,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup 2 (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$array[4][3]} string\\"", + "raw": ""string {$array[4][3]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1160,20 +1744,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup 3 (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$arr[foo][3]} string\\"", + "raw": ""string {$arr[foo][3]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1228,20 +1812,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed offsetlookup 4 (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$arr[\\"foo\\"][3]} string\\"", + "raw": ""string {$arr["foo"][3]} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1267,7 +1851,7 @@ Program { "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"foo\\"", + "raw": ""foo"", "unicode": false, "value": "foo", }, @@ -1298,20 +1882,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed positive offset in encapsed var offset 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"$var[1]\\"", + "raw": ""$var[1]"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -1334,20 +1918,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj->property} string\\"", + "raw": ""string {$obj->property} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1394,20 +1978,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $obj->property string\\"", + "raw": ""string $obj->property string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1454,14 +2038,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -1469,9 +2053,9 @@ Program { "curly": false, "expression": Encapsed { "kind": "encapsed", - "raw": "\\"set{$type}\\"", + "raw": ""set{$type}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1508,94 +2092,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], - "kind": "program", -} -`; - -exports[`encapsed propertylookup and offsetlookup (complex syntax) 1`] = ` -Program { - "children": Array [ - ExpressionStatement { - "expression": Encapsed { - "kind": "encapsed", - "raw": "\\"string {$obj->values[3]->name} string\\"", - "type": "string", - "value": Array [ - EncapsedPart { - "curly": false, - "expression": String { - "isDoubleQuote": false, - "kind": "string", - "raw": "string ", - "unicode": false, - "value": "string ", - }, - "kind": "encapsedpart", - "syntax": null, - }, - EncapsedPart { - "curly": false, - "expression": PropertyLookup { - "kind": "propertylookup", - "offset": Identifier { - "kind": "identifier", - "name": "name", - }, - "what": OffsetLookup { - "kind": "offsetlookup", - "offset": Number { - "kind": "number", - "value": "3", - }, - "what": PropertyLookup { - "kind": "propertylookup", - "offset": Identifier { - "kind": "identifier", - "name": "values", - }, - "what": Variable { - "curly": false, - "kind": "variable", - "name": "obj", - }, - }, - }, - }, - "kind": "encapsedpart", - "syntax": "complex", - }, - EncapsedPart { - "curly": false, - "expression": String { - "isDoubleQuote": false, - "kind": "string", - "raw": " string", - "unicode": false, - "value": " string", - }, - "kind": "encapsedpart", - "syntax": null, - }, - ], - }, - "kind": "expressionstatement", - }, - ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup by variable (2) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj->{$array[1]}} string\\"", + "raw": ""string {$obj->{$array[1]}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1655,20 +2165,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup by variable (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj->$var} string\\"", + "raw": ""string {$obj->$var} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1716,20 +2226,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup with comments (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$var->foo->bar /* Comment */ } string\\"", + "raw": ""string {$var->foo->bar /* Comment */ } string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1783,20 +2293,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed propertylookup with multiple call (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj->call()->call()} string\\"", + "raw": ""string {$obj->call()->call()} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1812,7 +2322,7 @@ Program { EncapsedPart { "curly": false, "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -1821,7 +2331,7 @@ Program { "name": "call", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -1858,20 +2368,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed staticlookup (2) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj::call()} string\\"", + "raw": ""string {$obj::call()} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1887,7 +2397,7 @@ Program { EncapsedPart { "curly": false, "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -1922,20 +2432,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed staticlookup (3) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj::$var::$var} string\\"", + "raw": ""string {$obj::$var::$var} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1991,20 +2501,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed staticlookup (4) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$var::$target::$resource::$binary::$foo::$bar::$foobar::$bar::$foo::$foobar::$bar::$foo} string\\"", + "raw": ""string {$var::$target::$resource::$binary::$foo::$bar::$foobar::$bar::$foo::$foobar::$bar::$foo} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2132,20 +2642,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed staticlookup (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$obj::$var} string\\"", + "raw": ""string {$obj::$var} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2193,20 +2703,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed string offset in encapsed var offset 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"$var[var]\\"", + "raw": ""$var[var]"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -2229,20 +2739,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed string offset in encapsed var offset 2`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"$var[$var]\\"", + "raw": ""$var[$var]"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -2266,20 +2776,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed two variable (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $var->$var string\\"", + "raw": ""string $var->$var string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2341,20 +2851,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${$name}} string\\"", + "raw": ""string {\${$name}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2398,20 +2908,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var named by the return value (2) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${call()}} string\\"", + "raw": ""string {\${call()}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2430,7 +2940,7 @@ Program { "curly": true, "kind": "variable", "name": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -2459,20 +2969,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var named by the return value (3) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${$obj->property}} string\\"", + "raw": ""string {\${$obj->property}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2523,20 +3033,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var named by the return value (4) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${$obj->call()}} string\\"", + "raw": ""string {\${$obj->call()}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2555,7 +3065,7 @@ Program { "curly": true, "kind": "variable", "name": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -2591,20 +3101,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var named by the return value (5) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${$obj::$var}} string\\"", + "raw": ""string {\${$obj::$var}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2656,20 +3166,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var named by the return value (6) (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${$obj::call()}} string\\"", + "raw": ""string {\${$obj::call()}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2688,7 +3198,7 @@ Program { "curly": true, "kind": "variable", "name": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -2724,20 +3234,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed value of the var named by the return value (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {\${call()}} string\\"", + "raw": ""string {\${call()}} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2756,7 +3266,7 @@ Program { "curly": true, "kind": "variable", "name": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -2785,20 +3295,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed variable (complex syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$var} string\\"", + "raw": ""string {$var} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2838,20 +3348,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed variable (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string $var string\\"", + "raw": ""string $var string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2891,20 +3401,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed variable curly (simple syntax) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string \${var} string\\"", + "raw": ""string \${var} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2944,20 +3454,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed variable with before closing curly 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string {$var } string\\"", + "raw": ""string {$var } string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2997,20 +3507,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`encapsed variable with space opening before curly 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"string { $var} string\\"", + "raw": ""string { $var} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -3050,7 +3560,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/enum.test.js.snap b/test/snapshot/__snapshots__/enum.test.js.snap new file mode 100644 index 000000000..0d32779aa --- /dev/null +++ b/test/snapshot/__snapshots__/enum.test.js.snap @@ -0,0 +1,589 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Test enums can alias cases 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [ + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Bar", + }, + "value": null, + }, + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "Baz", + }, + "value": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "Bar", + }, + "what": SelfReference { + "kind": "selfreference", + "raw": "self", + }, + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "public", + }, + ], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + "valueType": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums can have functions 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [ + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "MyCase", + }, + "value": Number { + "kind": "number", + "value": "1", + }, + }, + Method { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "bar", + }, + "nullable": false, + "type": TypeReference { + "kind": "typereference", + "name": "void", + "raw": "void", + }, + "visibility": "public", + }, + Method { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [ + Echo { + "expressions": [ + PropertyLookup { + "kind": "propertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "value", + }, + "what": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "MyCase", + }, + "what": SelfReference { + "kind": "selfreference", + "raw": "self", + }, + }, + }, + ], + "kind": "echo", + "shortForm": false, + }, + ], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": true, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "baz", + }, + "nullable": false, + "type": null, + "visibility": "protected", + }, + ], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + "valueType": Name { + "kind": "name", + "name": "int", + "resolution": "uqn", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums can implement interfaces 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [], + "implements": [ + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "Baz", + "resolution": "uqn", + }, + ], + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + "valueType": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums can use traits 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [ + TraitUse { + "adaptations": [ + TraitPrecedence { + "instead": [ + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + ], + "kind": "traitprecedence", + "method": Identifier { + "kind": "identifier", + "name": "hello", + }, + "trait": Name { + "kind": "name", + "name": "Baz", + "resolution": "uqn", + }, + }, + TraitAlias { + "as": Identifier { + "kind": "identifier", + "name": "earth", + }, + "kind": "traitalias", + "method": Identifier { + "kind": "identifier", + "name": "world", + }, + "trait": Name { + "kind": "name", + "name": "Baz", + "resolution": "uqn", + }, + "visibility": "", + }, + ], + "kind": "traituse", + "traits": [ + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "Baz", + "resolution": "uqn", + }, + ], + }, + TraitUse { + "adaptations": null, + "kind": "traituse", + "traits": [ + Name { + "kind": "name", + "name": "Bax", + "resolution": "uqn", + }, + ], + }, + ], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + "valueType": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums can't be parsed with PHP < 8 1`] = `"Parse Error : syntax error, unexpected 'Foo' (T_STRING), expecting ';' on line 1"`; + +exports[`Test enums cannot have properties 1`] = `"Parse Error : syntax error, unexpected 'int' (T_STRING) on line 3"`; + +exports[`Test enums doesn't confuse enums with identifiers 1`] = ` +Program { + "children": [ + Class { + "attrGroups": [], + "body": [ + Method { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isAbstract": false, + "isFinal": false, + "isReadonly": false, + "isStatic": false, + "kind": "method", + "name": Identifier { + "kind": "identifier", + "name": "enum", + }, + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Enum", + }, + }, + Interface { + "attrGroups": [], + "body": [], + "extends": null, + "kind": "interface", + "name": Identifier { + "kind": "identifier", + "name": "Enum", + }, + }, + Trait { + "body": [], + "kind": "trait", + "name": Identifier { + "kind": "identifier", + "name": "Enum", + }, + }, + _Function { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "enum", + }, + "nullable": false, + "type": null, + }, + Class { + "attrGroups": [], + "body": [], + "extends": Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Enum", + }, + }, + Class { + "attrGroups": [], + "body": [], + "extends": null, + "implements": [ + Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + ], + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Enum", + }, + }, + Class { + "attrGroups": [], + "body": [], + "extends": Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + "implements": null, + "isAbstract": false, + "isAnonymous": false, + "isFinal": false, + "isReadonly": false, + "kind": "class", + "name": Identifier { + "kind": "identifier", + "name": "Enum", + }, + }, + Enum { + "attrGroups": [], + "body": [], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "extendsFoo", + }, + "valueType": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums empty 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Foo", + }, + "valueType": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums may have a backing type 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [ + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Hearts", + }, + "value": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'H'", + "unicode": false, + "value": "H", + }, + }, + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Diamonds", + }, + "value": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'D'", + "unicode": false, + "value": "D", + }, + }, + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Clubs", + }, + "value": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'C'", + "unicode": false, + "value": "C", + }, + }, + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Spades", + }, + "value": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'S'", + "unicode": false, + "value": "S", + }, + }, + ], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Suit", + }, + "valueType": Name { + "kind": "name", + "name": "string", + "resolution": "uqn", + }, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test enums non-empty 1`] = ` +Program { + "children": [ + Enum { + "attrGroups": [], + "body": [ + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Hearts", + }, + "value": null, + }, + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Diamonds", + }, + "value": null, + }, + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Clubs", + }, + "value": null, + }, + EnumCase { + "kind": "enumcase", + "name": Identifier { + "kind": "identifier", + "name": "Spades", + }, + "value": null, + }, + ], + "implements": null, + "kind": "enum", + "name": Identifier { + "kind": "identifier", + "name": "Suit", + }, + "valueType": null, + }, + ], + "errors": [], + "kind": "program", +} +`; diff --git a/test/snapshot/__snapshots__/eval.test.js.snap b/test/snapshot/__snapshots__/eval.test.js.snap index b525bdbf6..af42e6f78 100644 --- a/test/snapshot/__snapshots__/eval.test.js.snap +++ b/test/snapshot/__snapshots__/eval.test.js.snap @@ -2,14 +2,14 @@ exports[`eval simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Eval { "kind": "eval", "source": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"command\\"", + "raw": ""command"", "unicode": false, "value": "command", }, @@ -17,7 +17,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/exit.test.js.snap b/test/snapshot/__snapshots__/exit.test.js.snap index d91b2cb15..5b6e258b1 100644 --- a/test/snapshot/__snapshots__/exit.test.js.snap +++ b/test/snapshot/__snapshots__/exit.test.js.snap @@ -2,7 +2,7 @@ exports[`exit argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": Variable { @@ -16,14 +16,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit die 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": null, @@ -33,14 +33,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit die with empty expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": null, @@ -50,14 +50,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit die with expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": Bin { @@ -79,14 +79,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit die without expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": null, @@ -96,14 +96,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit exit with empty expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": null, @@ -113,14 +113,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit exit with expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": Bin { @@ -142,14 +142,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit exit without expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": null, @@ -159,14 +159,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`exit simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": null, @@ -176,7 +176,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/expr.test.js.snap b/test/snapshot/__snapshots__/expr.test.js.snap index 021ebfff1..ba219eb0d 100644 --- a/test/snapshot/__snapshots__/expr.test.js.snap +++ b/test/snapshot/__snapshots__/expr.test.js.snap @@ -2,7 +2,7 @@ exports[`Test expressions chaining calls (derefenceable) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -23,7 +23,7 @@ Program { "name": "foo", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -52,14 +52,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions chaining calls (derefenceable) 2`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -74,7 +74,7 @@ Program { "value": "0", }, "what": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -114,17 +114,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions chaining calls (derefenceable) 3`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -146,7 +146,7 @@ Program { "name": "bar", }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -172,14 +172,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions chaining calls (derefenceable) 4`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -216,7 +216,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -238,10 +238,10 @@ Program { exports[`Test expressions chaining calls (derefenceable) 5`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -250,7 +250,7 @@ Program { "name": "baz", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -259,7 +259,7 @@ Program { "name": "foo", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -274,17 +274,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions fix #234 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -310,7 +310,7 @@ Program { "value": "0", }, "what": New { - "arguments": Array [], + "arguments": [], "kind": "new", "parenthesizedExpression": true, "what": Name { @@ -324,17 +324,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions fix #235 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -346,7 +346,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -358,7 +358,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -370,7 +370,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -382,7 +382,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -400,7 +400,7 @@ Program { }, ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": SelfReference { "kind": "selfreference", @@ -411,7 +411,7 @@ Program { }, ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": StaticReference { "kind": "staticreference", @@ -422,7 +422,7 @@ Program { }, ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": ParentReference { "kind": "parentreference", @@ -432,14 +432,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions should assign class static 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -465,14 +465,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions should fail to assign class constants 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -497,7 +497,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "VARIABLE", "kind": "error", @@ -512,7 +512,7 @@ Program { exports[`Test expressions should fail to assign constants 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -530,14 +530,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test assignements 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -760,14 +760,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test binary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -819,14 +819,14 @@ Program { "left": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"1\\"", + "raw": ""1"", "unicode": false, "value": "1", }, "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"3\\"", + "raw": ""3"", "unicode": false, "value": "3", }, @@ -955,14 +955,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test cast 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Cast { "expr": Variable { @@ -1120,14 +1120,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test cast extension - #171 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Variable { "cast": "int", @@ -1249,14 +1249,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test exit 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": Number { @@ -1285,14 +1285,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test fail new 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1303,44 +1303,37 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", - "what": Name { - "kind": "name", - "name": "foo", - "resolution": "uqn", - }, - }, - }, - "kind": "expressionstatement", - }, - ExpressionStatement { - "expression": Array { - "items": Array [ - Entry { - "byRef": false, - "key": null, - "kind": "entry", - "unpack": false, - "value": Number { - "kind": "number", - "value": "0", + "what": OffsetLookup { + "kind": "offsetlookup", + "offset": Identifier { + "kind": "identifier", + "name": "0", + }, + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", }, }, - ], - "kind": "array", - "shortForm": true, + }, }, "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { - "expected": ";", + "expected": [ + 105, + 109, + "-", + 222, + ], "kind": "error", "line": 2, - "message": "Parse Error : syntax error, unexpected '[', expecting ';' on line 2", - "token": "'['", + "message": "Parse Error : syntax error, unexpected '0' (T_LNUMBER) on line 2", + "token": "'0' (T_LNUMBER)", }, ], "kind": "program", @@ -1349,11 +1342,12 @@ Program { exports[`Test expressions test generators 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": null, @@ -1369,7 +1363,7 @@ Program { "expression": YieldFrom { "kind": "yieldfrom", "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -1408,14 +1402,14 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test if based returns 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -1480,14 +1474,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test incr/decr 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -1693,7 +1687,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1713,7 +1707,7 @@ Program { exports[`Test expressions test more binary ops (formerly bool) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -1970,14 +1964,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test nested expressions precedence 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2116,14 +2110,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test new 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2134,11 +2128,11 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", - "name": "\\\\foo", + "name": "\\foo", "resolution": "fqn", }, }, @@ -2155,7 +2149,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": StaticLookup { "kind": "staticlookup", @@ -2183,7 +2177,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Variable { "curly": false, @@ -2204,16 +2198,17 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": Name { "kind": "name", "name": "foo", "resolution": "uqn", }, - "implements": Array [ + "implements": [ Name { "kind": "name", "name": "bar", @@ -2223,6 +2218,7 @@ Program { "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -2231,17 +2227,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test node references 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -2259,7 +2255,7 @@ Program { }, ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": SelfReference { "kind": "selfreference", @@ -2270,7 +2266,7 @@ Program { }, ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": StaticReference { "kind": "staticreference", @@ -2281,7 +2277,7 @@ Program { }, ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": ParentReference { "kind": "parentreference", @@ -2291,18 +2287,18 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test silent 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Silent { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -2315,14 +2311,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test expressions test unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -2372,7 +2368,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/foreach.test.js.snap b/test/snapshot/__snapshots__/foreach.test.js.snap index 2657a8d8c..d75a9c7ce 100644 --- a/test/snapshot/__snapshots__/foreach.test.js.snap +++ b/test/snapshot/__snapshots__/foreach.test.js.snap @@ -2,12 +2,12 @@ exports[`foreach as list 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -29,7 +29,7 @@ Program { "name": "array", }, "value": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -58,19 +58,19 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach as list with key 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -96,7 +96,7 @@ Program { "name": "array", }, "value": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -125,19 +125,19 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach as short list 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -159,7 +159,7 @@ Program { "name": "array", }, "value": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -188,19 +188,19 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach as short list with key 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -226,7 +226,7 @@ Program { "name": "array", }, "value": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -255,19 +255,19 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach as variable 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -295,19 +295,19 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach as variable by ref 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -336,20 +336,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach unpacking #2 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -372,7 +372,7 @@ Program { "kind": "foreach", "shortForm": false, "source": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -425,20 +425,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach unpacking #3 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -461,14 +461,14 @@ Program { "kind": "foreach", "shortForm": false, "source": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -526,20 +526,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach unpacking #4 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -562,14 +562,14 @@ Program { "kind": "foreach", "shortForm": false, "source": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -627,20 +627,20 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`foreach unpacking 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -663,7 +663,7 @@ Program { "kind": "foreach", "shortForm": false, "source": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -716,7 +716,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/function.test.js.snap b/test/snapshot/__snapshots__/function.test.js.snap index 67e7f1119..2879e51d4 100644 --- a/test/snapshot/__snapshots__/function.test.js.snap +++ b/test/snapshot/__snapshots__/function.test.js.snap @@ -1,18 +1,364 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Function tests Test readonly function properties are only for class constructor 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 1, + "kind": "parameter", + "name": null, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": null, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "fun", + }, + "nullable": false, + "type": null, + }, + ExpressionStatement { + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "id", + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": undefined, + "kind": "expressionstatement", + }, + Block { + "children": [], + "kind": "block", + }, + ], + "errors": [ + Error { + "expected": undefined, + "kind": "error", + "line": 2, + "message": "readonly properties can be used only on class constructor on line 2", + "token": undefined, + }, + Error { + "expected": 222, + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY), expecting T_VARIABLE on line 2", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": [ + ",", + ")", + ], + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY) on line 2", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": ")", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY), expecting ')' on line 2", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": "{", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected 'readonly' (T_READ_ONLY), expecting '{' on line 2", + "token": "'readonly' (T_READ_ONLY)", + }, + Error { + "expected": 187, + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected 'int' (T_STRING), expecting T_CLASS on line 2", + "token": "'int' (T_STRING)", + }, + Error { + "expected": ";", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected ')', expecting ';' on line 2", + "token": "')'", + }, + Error { + "expected": "EXPR", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected ')' on line 2", + "token": "')'", + }, + Error { + "expected": ";", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected '{', expecting ';' on line 2", + "token": "'{'", + }, + ], + "kind": "program", +} +`; + +exports[`Function tests array pass by reference are not confused with intersection 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": true, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "params", + }, + "nullable": false, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "array", + "raw": "array", + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests first class callable support 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "callable", + }, + "operator": "=", + "right": Call { + "arguments": [ + VariadicPlaceholder { + "kind": "variadicplaceholder", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "strlen", + "resolution": "uqn", + }, + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "callable", + }, + "operator": "=", + "right": Call { + "arguments": [ + VariadicPlaceholder { + "kind": "variadicplaceholder", + }, + ], + "kind": "call", + "what": PropertyLookup { + "kind": "propertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "doSomething", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "item", + }, + }, + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "callable", + }, + "operator": "=", + "right": Call { + "arguments": [ + VariadicPlaceholder { + "kind": "variadicplaceholder", + }, + ], + "kind": "call", + "what": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "doSomething", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "item", + }, + }, + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "callable", + }, + "operator": "=", + "right": Call { + "arguments": [ + VariadicPlaceholder { + "kind": "variadicplaceholder", + }, + ], + "kind": "call", + "what": StaticLookup { + "kind": "staticlookup", + "offset": Identifier { + "kind": "identifier", + "name": "doSomething", + }, + "what": Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests first class callable support requires PHP 8.1+ 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "callable", + }, + "operator": "=", + "right": Call { + "arguments": [ + variadic { + "kind": "variadic", + "what": undefined, + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "strlen", + "resolution": "uqn", + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": "EXPR", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected ')' on line 2", + "token": "')'", + }, + Error { + "expected": ")", + "kind": "error", + "line": 2, + "message": "Parse Error : syntax error, unexpected ';', expecting ')' on line 2", + "token": "';'", + }, + ], + "kind": "program", +} +`; + exports[`Function tests implement #113 : typehint nodes 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "a", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "int", @@ -25,13 +371,16 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "b", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "float", @@ -44,13 +393,16 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "c", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "bool", @@ -63,13 +415,16 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "d", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "string", @@ -79,13 +434,16 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "e", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "callable", @@ -95,29 +453,35 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "f", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", - "name": "int\\\\bar", + "name": "int\\bar", "resolution": "qn", }, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "params", }, "nullable": true, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "array", @@ -127,8 +491,9 @@ Program { "variadic": true, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": true, @@ -145,20 +510,22 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Function tests implement #196 : set function name as identifier 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 18, @@ -167,77 +534,564 @@ Program { ], "name": Identifier { "kind": "identifier", - "name": "a", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "f", + }, + "nullable": false, + "type": null, + }, + ], + "comments": [ + CommentBlock { + "kind": "commentblock", + "offset": 18, + "value": "/* f */", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests spread array pass by reference are not intersection 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": true, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "params", + }, + "nullable": false, + "readonly": false, + "type": TypeReference { + "kind": "typereference", + "name": "array", + "raw": "array", + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": true, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test arrow function php 7.4 1`] = ` +Program { + "children": [ + _Function { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test danging comma in closure use-block php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ + Variable { + "curly": false, + "kind": "variable", + "name": "one", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test danging comma in closure use-block with multiple php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ + Variable { + "curly": false, + "kind": "variable", + "name": "one", + }, + Variable { + "curly": false, + "kind": "variable", + "name": "two", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test danging comma in closure use-block with multiple/refs php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Closure { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "one", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "two", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ + Variable { + "curly": false, + "kind": "variable", + "name": "three", + }, + Variable { + "byref": true, + "curly": false, + "kind": "variable", + "name": "four", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test danging comma in closure use-block with refs php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ + Variable { + "byref": true, + "curly": false, + "kind": "variable", + "name": "one", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test danging comma in function php 8.0 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "c", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test double danging comma in closure use-block php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ + Variable { + "curly": false, + "kind": "variable", + "name": "one", + }, + Variable { + "curly": false, + "kind": "variable", + "name": "", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": 222, + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected ',', expecting T_VARIABLE on line 1", + "token": "','", + }, + ], + "kind": "program", +} +`; + +exports[`Function tests test function intersection types 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + TypeReference { + "kind": "typereference", + "name": "float", + "raw": "float", + }, + ], + }, + "value": Number { + "kind": "number", + "value": "1", + }, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "b", }, "nullable": false, - "type": null, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + ], + }, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, "kind": "function", "name": Identifier { "kind": "identifier", - "name": "f", + "name": "foo", }, "nullable": false, - "type": null, - }, - ], - "comments": Array [ - CommentBlock { - "kind": "commentblock", - "offset": 18, - "value": "/* f */", - }, - ], - "errors": Array [], - "kind": "program", -} -`; - -exports[`Function tests test arrow function php 7.4 1`] = ` -Program { - "children": Array [ - _Function { - "arguments": Array [], - "body": Block { - "children": Array [], - "kind": "block", - }, - "byref": false, - "kind": "function", - "name": Identifier { - "kind": "identifier", - "name": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + ], }, - "nullable": false, - "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Function tests test function parsing 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "a", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -246,13 +1100,16 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "b", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "callable", @@ -262,13 +1119,16 @@ Program { "variadic": false, }, Parameter { + "attrGroups": [], "byref": true, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "params", }, "nullable": true, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "array", @@ -278,8 +1138,9 @@ Program { "variadic": true, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": true, @@ -305,22 +1166,26 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "b", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Boolean { "kind": "boolean", @@ -341,7 +1206,7 @@ Program { "name": "array", "raw": "array", }, - "uses": Array [ + "uses": [ Variable { "byref": true, "curly": false, @@ -368,11 +1233,11 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [ + "arguments": [ variadic { "kind": "variadic", "what": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -440,18 +1305,123 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test function union types 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + TypeReference { + "kind": "typereference", + "name": "float", + "raw": "float", + }, + ], + }, + "value": Number { + "kind": "number", + "value": "1", + }, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + ], + }, + }, + ], + "errors": [], "kind": "program", } `; exports[`Function tests test reserved word for function name error 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -464,7 +1434,7 @@ Program { "type": null, }, ], - "errors": Array [ + "errors": [ Error { "expected": 105, "kind": "error", @@ -477,9 +1447,223 @@ Program { } `; +exports[`Function tests test short function intersection types 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Closure { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + TypeReference { + "kind": "typereference", + "name": "float", + "raw": "float", + }, + ], + }, + "value": Number { + "kind": "number", + "value": "1", + }, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": String { + "isDoubleQuote": true, + "kind": "string", + "raw": """", + "unicode": false, + "value": "", + }, + "byref": false, + "isStatic": false, + "kind": "arrowfunc", + "nullable": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test short function union types 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Closure { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "a", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + TypeReference { + "kind": "typereference", + "name": "float", + "raw": "float", + }, + ], + }, + "value": Number { + "kind": "number", + "value": "1", + }, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "b", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "Foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "Bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": String { + "isDoubleQuote": true, + "kind": "string", + "raw": """", + "unicode": false, + "value": "", + }, + "byref": false, + "isStatic": false, + "kind": "arrowfunc", + "nullable": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + TypeReference { + "kind": "typereference", + "name": "string", + "raw": "string", + }, + TypeReference { + "kind": "typereference", + "name": "int", + "raw": "int", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + exports[`Function tests test static closure 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -490,9 +1674,10 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -500,96 +1685,102 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; -exports[`Function tests test variadic error 1`] = ` +exports[`Function tests test variadic call error 1`] = `"Unexpected non-variadic argument after a variadic argument on line 1"`; + +exports[`Function tests test variadic function error 1 1`] = `"Unexpected parameter after a variadic parameter on line 1"`; + +exports[`Function tests test variadic function error 2 1`] = `"Unexpected parameter after a variadic parameter on line 1"`; + +exports[`Function tests test without danging comma in closure use-block php 8.0 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", "left": Variable { "curly": false, "kind": "variable", - "name": "b", + "name": "test", }, "operator": "=", - "right": Call { - "arguments": Array [ - variadic { - "kind": "variadic", - "what": Array { - "items": Array [ - Entry { - "byRef": false, - "key": null, - "kind": "entry", - "unpack": false, - "value": Number { - "kind": "number", - "value": "1", - }, - }, - Entry { - "byRef": false, - "key": null, - "kind": "entry", - "unpack": false, - "value": Number { - "kind": "number", - "value": "2", - }, - }, - Entry { - "byRef": false, - "key": null, - "kind": "entry", - "unpack": false, - "value": Number { - "kind": "number", - "value": "3", - }, - }, - ], - "kind": "array", - "shortForm": true, - }, - }, + "right": Closure { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ Variable { "curly": false, "kind": "variable", - "name": "a", + "name": "one", }, ], - "kind": "call", - "what": Name { - "kind": "name", - "name": "foo", - "resolution": "uqn", - }, }, }, "kind": "expressionstatement", }, ], - "errors": Array [ - Error { - "expected": undefined, - "kind": "error", - "line": 1, - "message": "Unexpected argument after a variadic argument on line 1", - "token": undefined, + "errors": [], + "kind": "program", +} +`; + +exports[`Function tests test without danging comma in closure use-block with refs php 8.0 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Closure { + "arguments": [], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "isStatic": false, + "kind": "closure", + "nullable": false, + "type": null, + "uses": [ + Variable { + "byref": true, + "curly": false, + "kind": "variable", + "name": "one", + }, + ], + }, + }, + "kind": "expressionstatement", }, ], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/global.test.js.snap b/test/snapshot/__snapshots__/global.test.js.snap index 7c4a86eda..eeeb6d5e2 100644 --- a/test/snapshot/__snapshots__/global.test.js.snap +++ b/test/snapshot/__snapshots__/global.test.js.snap @@ -2,9 +2,9 @@ exports[`global mutliple 1`] = ` Program { - "children": Array [ + "children": [ Global { - "items": Array [ + "items": [ Variable { "curly": false, "kind": "variable", @@ -19,16 +19,16 @@ Program { "kind": "global", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`global simple 1`] = ` Program { - "children": Array [ + "children": [ Global { - "items": Array [ + "items": [ Variable { "curly": false, "kind": "variable", @@ -38,7 +38,7 @@ Program { "kind": "global", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/goto.test.js.snap b/test/snapshot/__snapshots__/goto.test.js.snap index 21e1f7817..bb89ebc35 100644 --- a/test/snapshot/__snapshots__/goto.test.js.snap +++ b/test/snapshot/__snapshots__/goto.test.js.snap @@ -2,7 +2,7 @@ exports[`goto simple 1`] = ` Program { - "children": Array [ + "children": [ Goto { "kind": "goto", "label": Identifier { @@ -11,11 +11,11 @@ Program { }, }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Foo\\"", + "raw": ""Foo"", "unicode": false, "value": "Foo", }, @@ -24,14 +24,14 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`goto simple 2`] = ` Program { - "children": Array [ + "children": [ Goto { "kind": "goto", "label": Identifier { @@ -40,11 +40,11 @@ Program { }, }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Foo\\"", + "raw": ""Foo"", "unicode": false, "value": "Foo", }, @@ -53,7 +53,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/graceful.test.js.snap b/test/snapshot/__snapshots__/graceful.test.js.snap index d07d9e6e9..d1bf9b28c 100644 --- a/test/snapshot/__snapshots__/graceful.test.js.snap +++ b/test/snapshot/__snapshots__/graceful.test.js.snap @@ -2,9 +2,10 @@ exports[`Test graceful mode to suppress errors interface 1`] = ` Program { - "children": Array [ + "children": [ Interface { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "kind": "interface", "name": Identifier { @@ -13,7 +14,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": "{", "kind": "error", @@ -22,7 +23,7 @@ Program { "token": "'implement' (T_STRING)", }, Error { - "expected": Array [ + "expected": [ 198, 182, ], @@ -32,7 +33,7 @@ Program { "token": "'baz' (T_STRING)", }, Error { - "expected": Array [ + "expected": [ 198, 182, ], @@ -48,7 +49,7 @@ Program { exports[`Test graceful mode to suppress errors should contain 2 errors 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -59,9 +60,10 @@ Program { }, "operator": "=", "right": Closure { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -83,13 +85,13 @@ Program { "kind": "closure", "nullable": false, "type": null, - "uses": Array [], + "uses": [], }, }, "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -111,17 +113,17 @@ Program { exports[`Test graceful mode to suppress errors should fail ! 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": StaticLookup { "kind": "staticlookup", "offset": Literal { "kind": "literal", "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -140,14 +142,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test graceful mode to suppress errors should fail with '[' and '}' 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -169,7 +171,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "]", "kind": "error", @@ -198,7 +200,7 @@ Program { exports[`Test graceful mode to suppress errors should fail with '{' and ']' 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -220,7 +222,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "}", "kind": "error", @@ -249,14 +251,14 @@ Program { exports[`Test graceful mode to suppress errors staticlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", "offset": Literal { "kind": "literal", "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -274,7 +276,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "(", "kind": "error", @@ -289,20 +291,23 @@ Program { exports[`Test graceful mode to suppress errors test class 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "onst", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", "name": "foo", @@ -319,6 +324,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -326,7 +332,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": 222, "kind": "error", @@ -335,7 +341,7 @@ Program { "token": "'const' (T_CONST)", }, Error { - "expected": Array [ + "expected": [ ",", ";", "=", @@ -353,7 +359,7 @@ Program { "token": "'A' (T_STRING)", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, @@ -364,7 +370,7 @@ Program { "token": "'='", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, @@ -388,7 +394,7 @@ Program { exports[`Test graceful mode to suppress errors test expr 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -429,7 +435,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -451,15 +457,18 @@ Program { exports[`Test graceful mode to suppress errors test flags (2) 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": true, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -476,6 +485,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -483,7 +493,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": 187, "kind": "error", @@ -512,15 +522,17 @@ Program { exports[`Test graceful mode to suppress errors test flags (3) 1`] = ` Program { - "children": Array [ + "children": [ Trait { - "body": Array [ + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": true, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -539,7 +551,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": 187, "kind": "error", @@ -568,15 +580,18 @@ Program { exports[`Test graceful mode to suppress errors test flags 1`] = ` Program { - "children": Array [ + "children": [ Interface { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": null, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -596,7 +611,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": 187, "kind": "error", @@ -632,10 +647,10 @@ Program { exports[`Test graceful mode to suppress errors test function arguments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -668,7 +683,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -705,7 +720,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ")", "kind": "error", @@ -755,7 +770,7 @@ Program { exports[`Test graceful mode to suppress errors test method chains 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -764,9 +779,9 @@ Program { "name": "", }, "what": Call { - "arguments": Array [ + "arguments": [ Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -800,9 +815,9 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { - "expected": Array [ + "expected": [ 105, 222, "$", @@ -820,20 +835,22 @@ Program { exports[`Test graceful mode to suppress errors trait 1`] = ` Program { - "children": Array [ + "children": [ Trait { - "body": Array [ + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "mplement", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", "name": "bar", @@ -852,7 +869,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": "{", "kind": "error", @@ -868,7 +885,7 @@ Program { "token": "'implement' (T_STRING)", }, Error { - "expected": Array [ + "expected": [ ",", ";", "=", @@ -886,7 +903,7 @@ Program { "token": "'baz' (T_STRING)", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, diff --git a/test/snapshot/__snapshots__/heredoc.test.js.snap b/test/snapshot/__snapshots__/heredoc.test.js.snap index 0344daf45..cdf9be706 100644 --- a/test/snapshot/__snapshots__/heredoc.test.js.snap +++ b/test/snapshot/__snapshots__/heredoc.test.js.snap @@ -2,7 +2,7 @@ exports[`heredoc Can't parse multiple flexible nowdoc blocks with different indentation #508 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -46,16 +46,16 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`heredoc Flexible heredoc syntax: 4 spaces of indentation 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "label": "END", @@ -65,7 +65,7 @@ Program { c END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -90,16 +90,16 @@ c", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`heredoc Flexible heredoc syntax: If the closing marker is indented further than any lines of the body 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "label": "END", @@ -109,7 +109,7 @@ Program { c END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -134,7 +134,7 @@ c", "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -149,9 +149,9 @@ c", exports[`heredoc Flexible heredoc syntax: different indentation for body (spaces) ending marker (tabs) 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "label": "END", @@ -159,7 +159,7 @@ Program { a END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -180,7 +180,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -209,7 +209,7 @@ Program { exports[`heredoc Flexible heredoc syntax: empty lines 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -231,7 +231,7 @@ Program { END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -261,14 +261,14 @@ c "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`heredoc Flexible heredoc syntax: empty lines 2`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -289,7 +289,7 @@ Program { c END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -317,14 +317,14 @@ c", "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`heredoc Flexible heredoc syntax: empty lines 3`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -346,7 +346,7 @@ Program { END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -376,14 +376,14 @@ c "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`heredoc Flexible heredoc syntax: empty lines 4`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -405,7 +405,7 @@ Program { END", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -435,7 +435,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -450,7 +450,7 @@ Program { exports[`heredoc Flexible heredoc syntax: empty lines 5`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -473,7 +473,7 @@ Program { END; ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -505,7 +505,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": 220, "kind": "error", @@ -520,7 +520,7 @@ Program { exports[`heredoc Flexible heredoc syntax: empty lines 6`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -542,7 +542,7 @@ Program { END; ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -572,7 +572,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": 220, "kind": "error", @@ -587,7 +587,7 @@ Program { exports[`heredoc Flexible heredoc syntax: empty lines 7`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -610,7 +610,7 @@ Program { END; ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -642,7 +642,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": 220, "kind": "error", @@ -657,7 +657,7 @@ Program { exports[`heredoc Flexible heredoc syntax: empty lines 8`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -680,7 +680,7 @@ Program { END; ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -712,7 +712,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": 220, "kind": "error", @@ -727,9 +727,9 @@ Program { exports[`heredoc Flexible heredoc syntax: ending label breaks old versions 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "label": "END", @@ -738,7 +738,7 @@ a END; ", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -761,7 +761,7 @@ a "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": 220, "kind": "error", @@ -776,7 +776,7 @@ a exports[`heredoc Flexible heredoc syntax: indentation bracket bug 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -792,7 +792,7 @@ Program { "raw": "<<foo. +My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': A EOT", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "My name is \\"", + "raw": "My name is "", "unicode": false, - "value": "My name is \\"", + "value": "My name is "", }, "kind": "encapsedpart", "syntax": null, @@ -2128,9 +2137,9 @@ EOT", "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "\\". I am printing some ", + "raw": "". I am printing some ", "unicode": false, - "value": "\\". I am printing some ", + "value": "". I am printing some ", }, "kind": "encapsedpart", "syntax": null, @@ -2212,7 +2221,7 @@ This should print a capital 'A': A", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/if.test.js.snap b/test/snapshot/__snapshots__/if.test.js.snap index b5a529809..79fac2e5e 100644 --- a/test/snapshot/__snapshots__/if.test.js.snap +++ b/test/snapshot/__snapshots__/if.test.js.snap @@ -2,18 +2,18 @@ exports[`Test IF statements test common cases 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": If { "alternate": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"else\\"", + "raw": ""else"", "unicode": false, "value": "else", }, @@ -25,13 +25,13 @@ Program { "kind": "block", }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"2nd\\"", + "raw": ""2nd"", "unicode": false, "value": "2nd", }, @@ -51,13 +51,13 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"false\\"", + "raw": ""false"", "unicode": false, "value": "false", }, @@ -77,13 +77,13 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"is true\\"", + "raw": ""is true"", "unicode": false, "value": "is true", }, @@ -103,14 +103,14 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test IF statements test issue #84 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": " @@ -120,7 +120,7 @@ Program { }, If { "alternate": Block { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": " @@ -131,7 +131,7 @@ Program { "kind": "block", }, "body": Block { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": " @@ -156,14 +156,14 @@ Program { "value": " ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test IF statements test issue #168 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": null, @@ -221,7 +221,7 @@ Program { "value": " ", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -242,7 +242,7 @@ Program { exports[`Test IF statements test issue #168 2`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": null, @@ -300,7 +300,7 @@ Program { "value": " ", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -321,7 +321,7 @@ Program { exports[`Test IF statements test issue #168 3`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": null, @@ -361,7 +361,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -382,17 +382,17 @@ Program { exports[`Test IF statements test short form 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"else\\"", + "raw": ""else"", "unicode": false, "value": "else", }, @@ -404,13 +404,13 @@ Program { "kind": "block", }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"false\\"", + "raw": ""false"", "unicode": false, "value": "false", }, @@ -430,13 +430,13 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"is true\\"", + "raw": ""is true"", "unicode": false, "value": "is true", }, @@ -456,26 +456,26 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test IF statements test various cases 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": If { "alternate": null, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"false\\"", + "raw": ""false"", "unicode": false, "value": "false", }, @@ -495,13 +495,13 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"false\\"", + "raw": ""false"", "unicode": false, "value": "false", }, @@ -521,13 +521,13 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"is true\\"", + "raw": ""is true"", "unicode": false, "value": "is true", }, @@ -548,13 +548,13 @@ Program { }, If { "alternate": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"false\\"", + "raw": ""false"", "unicode": false, "value": "false", }, @@ -566,13 +566,13 @@ Program { "kind": "block", }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"is true\\"", + "raw": ""is true"", "unicode": false, "value": "is true", }, @@ -592,7 +592,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/include.test.js.snap b/test/snapshot/__snapshots__/include.test.js.snap index d505d717c..3959faa3e 100644 --- a/test/snapshot/__snapshots__/include.test.js.snap +++ b/test/snapshot/__snapshots__/include.test.js.snap @@ -2,7 +2,7 @@ exports[`include include 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Include { "kind": "include", @@ -11,7 +11,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -19,14 +19,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`include include once 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Include { "kind": "include", @@ -35,7 +35,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -43,14 +43,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`include require 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Include { "kind": "include", @@ -59,7 +59,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -67,14 +67,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`include require_once 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Include { "kind": "include", @@ -83,7 +83,7 @@ Program { "target": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -91,7 +91,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/interface.test.js.snap b/test/snapshot/__snapshots__/interface.test.js.snap index f5fa5044c..14dd6a85c 100644 --- a/test/snapshot/__snapshots__/interface.test.js.snap +++ b/test/snapshot/__snapshots__/interface.test.js.snap @@ -2,10 +2,11 @@ exports[`interface extends 1`] = ` Program { - "children": Array [ + "children": [ Interface { - "body": Array [], - "extends": Array [ + "attrGroups": [], + "body": [], + "extends": [ Name { "kind": "name", "name": "B", @@ -19,16 +20,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`interface interface name as identifier 1`] = ` Program { - "children": Array [ + "children": [ Interface { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "kind": "interface", "name": Identifier { @@ -37,17 +39,70 @@ Program { }, }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`interface invalid private flag 1`] = ` +Program { + "children": [ + Interface { + "attrGroups": [], + "body": [ + ClassConstant { + "attrGroups": [], + "constants": [ + Constant { + "kind": "constant", + "name": Identifier { + "kind": "identifier", + "name": "B", + }, + "value": Number { + "kind": "number", + "value": "1", + }, + }, + ], + "final": false, + "kind": "classconstant", + "nullable": false, + "type": null, + "visibility": "", + }, + ], + "extends": null, + "kind": "interface", + "name": Identifier { + "kind": "identifier", + "name": "A", + }, + }, + ], + "errors": [ + Error { + "expected": [ + 195, + 196, + ], + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected 'private' (T_PRIVATE) on line 1", + "token": "'private' (T_PRIVATE)", + }, + ], "kind": "program", } `; exports[`interface multiple extends 1`] = ` Program { - "children": Array [ + "children": [ Interface { - "body": Array [], - "extends": Array [ + "attrGroups": [], + "body": [], + "extends": [ Name { "kind": "name", "name": "B", @@ -66,7 +121,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/isset.test.js.snap b/test/snapshot/__snapshots__/isset.test.js.snap index c41eb48e8..84adb6402 100644 --- a/test/snapshot/__snapshots__/isset.test.js.snap +++ b/test/snapshot/__snapshots__/isset.test.js.snap @@ -2,7 +2,7 @@ exports[`isset assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -14,7 +14,7 @@ Program { "operator": "=", "right": Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -26,18 +26,18 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`isset multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -58,18 +58,18 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`isset simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -80,14 +80,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`isset test errors 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -99,7 +99,7 @@ Program { "operator": "=", "right": Isset { "kind": "isset", - "variables": Array [ + "variables": [ undefined, ], }, @@ -107,7 +107,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -129,11 +129,11 @@ Program { exports[`isset trailing comma #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -149,18 +149,18 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`isset trailing comma 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -171,7 +171,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/label.test.js.snap b/test/snapshot/__snapshots__/label.test.js.snap index 936f8310d..f3cf3887a 100644 --- a/test/snapshot/__snapshots__/label.test.js.snap +++ b/test/snapshot/__snapshots__/label.test.js.snap @@ -2,7 +2,7 @@ exports[`label simple 1`] = ` Program { - "children": Array [ + "children": [ Label { "kind": "label", "name": Identifier { @@ -11,11 +11,11 @@ Program { }, }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Foo\\"", + "raw": ""Foo"", "unicode": false, "value": "Foo", }, @@ -24,14 +24,14 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`label simple 2`] = ` Program { - "children": Array [ + "children": [ Label { "kind": "label", "name": Identifier { @@ -40,11 +40,11 @@ Program { }, }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"Foo\\"", + "raw": ""Foo"", "unicode": false, "value": "Foo", }, @@ -53,7 +53,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/lexer.test.js.snap b/test/snapshot/__snapshots__/lexer.test.js.snap index 75814d0d7..e71bb1665 100644 --- a/test/snapshot/__snapshots__/lexer.test.js.snap +++ b/test/snapshot/__snapshots__/lexer.test.js.snap @@ -2,23 +2,23 @@ exports[`Test lexer initial state #263 - expect inline 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": "", "value": "", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test lexer initial state parse asp echo tag 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -29,16 +29,16 @@ Program { "shortForm": true, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test lexer initial state parse asp tag 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -49,16 +49,16 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test lexer initial state parse short echo 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -69,16 +69,16 @@ Program { "shortForm": true, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test lexer initial state parse short tag 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -89,34 +89,34 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test lexer test #148 - sensitive lexer 1`] = ` -Array [ - Array [ +[ + [ "T_OPEN_TAG", "", 1, ], - Array [ + [ "T_WHITESPACE", " ", 1, ], - Array [ + [ "T_STRING", "list", 1, @@ -125,9 +125,33 @@ Array [ ] `; +exports[`Test lexer test #1003 - null-safe operator with reserved keyword 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "class", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + exports[`Test lexer test comments 1`] = ` Program { - "children": Array [ + "children": [ Inline { "kind": "inline", "raw": " @@ -137,7 +161,7 @@ Program { }, Inline { "kind": "inline", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 20, @@ -150,7 +174,7 @@ Program { }, Inline { "kind": "inline", - "leadingComments": Array [ + "leadingComments": [ CommentLine { "kind": "commentline", "offset": 57, @@ -163,7 +187,7 @@ Program { }, Inline { "kind": "inline", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "offset": 92, @@ -172,7 +196,7 @@ Program { ], "raw": " ", - "trailingComments": Array [ + "trailingComments": [ CommentLine { "kind": "commentline", "offset": 112, @@ -183,7 +207,7 @@ Program { "value": " ", }, ], - "comments": Array [ + "comments": [ CommentLine { "kind": "commentline", "offset": 20, @@ -206,30 +230,30 @@ Program { ", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test lexer test tokens 1`] = ` -Array [ - Array [ +[ + [ "T_OPEN_TAG", " 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -107,7 +107,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -127,7 +127,7 @@ Program { exports[`Test locations test #164 : expr must include ; 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -232,7 +232,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -252,10 +252,10 @@ Program { exports[`Test locations test #202 : include calling argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -390,7 +390,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -410,7 +410,7 @@ Program { exports[`Test locations test #230 : check location 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -516,7 +516,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -536,7 +536,7 @@ Program { exports[`Test locations test #230 : check location on cast 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -625,7 +625,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -645,7 +645,7 @@ Program { exports[`Test locations test #230 : check location on retif 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": RetIf { "falseExpr": Variable { @@ -820,7 +820,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -840,18 +840,21 @@ Program { exports[`Test locations test abstract class (inner statement) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": true, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -936,7 +939,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -956,14 +959,16 @@ Program { exports[`Test locations test abstract class 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": true, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -997,7 +1002,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1017,10 +1022,10 @@ Program { exports[`Test locations test array 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1162,7 +1167,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1182,10 +1187,10 @@ Program { exports[`Test locations test array nested 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1205,7 +1210,7 @@ Program { }, "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1365,7 +1370,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1385,10 +1390,10 @@ Program { exports[`Test locations test array short form 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1530,7 +1535,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1550,10 +1555,10 @@ Program { exports[`Test locations test array short form nested 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1573,7 +1578,7 @@ Program { }, "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -1733,7 +1738,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1753,7 +1758,7 @@ Program { exports[`Test locations test array with keys, byRef and unpack 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1790,7 +1795,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -2049,7 +2054,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2069,7 +2074,7 @@ Program { exports[`Test locations test assign [] 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2157,7 +2162,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2177,7 +2182,7 @@ Program { exports[`Test locations test assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2248,7 +2253,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2268,7 +2273,7 @@ Program { exports[`Test locations test assign by ref 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -2338,7 +2343,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2358,7 +2363,7 @@ Program { exports[`Test locations test assign mutliple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2464,7 +2469,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2484,7 +2489,7 @@ Program { exports[`Test locations test bin 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2589,7 +2594,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2609,7 +2614,7 @@ Program { exports[`Test locations test bin 2`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -2679,7 +2684,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2699,7 +2704,7 @@ Program { exports[`Test locations test bin nested (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -2804,7 +2809,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2824,7 +2829,7 @@ Program { exports[`Test locations test bin nested 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Bin { "kind": "bin", @@ -2929,7 +2934,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2949,7 +2954,7 @@ Program { exports[`Test locations test break 1`] = ` Program { - "children": Array [ + "children": [ Break { "kind": "break", "level": null, @@ -2968,7 +2973,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -2988,7 +2993,7 @@ Program { exports[`Test locations test cast 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -3016,7 +3021,7 @@ Program { "line": 1, "offset": 19, }, - "source": "$var = (int) \\"2112\\"", + "source": "$var = (int) "2112"", "start": Position { "column": 0, "line": 1, @@ -3034,14 +3039,14 @@ Program { "line": 1, "offset": 19, }, - "source": "\\"2112\\"", + "source": ""2112"", "start": Position { "column": 13, "line": 1, "offset": 13, }, }, - "raw": "\\"2112\\"", + "raw": ""2112"", "unicode": false, "value": "2112", }, @@ -3052,7 +3057,7 @@ Program { "line": 1, "offset": 19, }, - "source": "(int) \\"2112\\"", + "source": "(int) "2112"", "start": Position { "column": 7, "line": 1, @@ -3070,7 +3075,7 @@ Program { "line": 1, "offset": 19, }, - "source": "$var = (int) \\"2112\\"", + "source": "$var = (int) "2112"", "start": Position { "column": 0, "line": 1, @@ -3079,7 +3084,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3087,7 +3092,7 @@ Program { "line": 1, "offset": 19, }, - "source": "$var = (int) \\"2112\\"", + "source": "$var = (int) "2112"", "start": Position { "column": 0, "line": 1, @@ -3099,18 +3104,21 @@ Program { exports[`Test locations test class (inner statement) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -3195,7 +3203,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3215,14 +3223,16 @@ Program { exports[`Test locations test class 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -3256,7 +3266,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3276,7 +3286,7 @@ Program { exports[`Test locations test clone 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Clone { "kind": "clone", @@ -3328,7 +3338,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3348,9 +3358,9 @@ Program { exports[`Test locations test conststatement 1`] = ` Program { - "children": Array [ + "children": [ ConstantStatement { - "constants": Array [ + "constants": [ Constant { "kind": "constant", "loc": Location { @@ -3359,7 +3369,7 @@ Program { "line": 1, "offset": 31, }, - "source": "CONSTANT = \\"Hello world!\\"", + "source": "CONSTANT = "Hello world!"", "start": Position { "column": 6, "line": 1, @@ -3392,14 +3402,14 @@ Program { "line": 1, "offset": 31, }, - "source": "\\"Hello world!\\"", + "source": ""Hello world!"", "start": Position { "column": 17, "line": 1, "offset": 17, }, }, - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, @@ -3412,7 +3422,7 @@ Program { "line": 1, "offset": 32, }, - "source": "const CONSTANT = \\"Hello world!\\";", + "source": "const CONSTANT = "Hello world!";", "start": Position { "column": 0, "line": 1, @@ -3421,7 +3431,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3429,7 +3439,7 @@ Program { "line": 1, "offset": 32, }, - "source": "const CONSTANT = \\"Hello world!\\";", + "source": "const CONSTANT = "Hello world!";", "start": Position { "column": 0, "line": 1, @@ -3441,9 +3451,9 @@ Program { exports[`Test locations test conststatement multiple 1`] = ` Program { - "children": Array [ + "children": [ ConstantStatement { - "constants": Array [ + "constants": [ Constant { "kind": "constant", "loc": Location { @@ -3452,7 +3462,7 @@ Program { "line": 1, "offset": 31, }, - "source": "CONSTANT = \\"Hello world!\\"", + "source": "CONSTANT = "Hello world!"", "start": Position { "column": 6, "line": 1, @@ -3485,14 +3495,14 @@ Program { "line": 1, "offset": 31, }, - "source": "\\"Hello world!\\"", + "source": ""Hello world!"", "start": Position { "column": 17, "line": 1, "offset": 17, }, }, - "raw": "\\"Hello world!\\"", + "raw": ""Hello world!"", "unicode": false, "value": "Hello world!", }, @@ -3505,7 +3515,7 @@ Program { "line": 1, "offset": 70, }, - "source": "OTHER_CONSTANT = \\"Other hello world!\\"", + "source": "OTHER_CONSTANT = "Other hello world!"", "start": Position { "column": 33, "line": 1, @@ -3538,14 +3548,14 @@ Program { "line": 1, "offset": 70, }, - "source": "\\"Other hello world!\\"", + "source": ""Other hello world!"", "start": Position { "column": 50, "line": 1, "offset": 50, }, }, - "raw": "\\"Other hello world!\\"", + "raw": ""Other hello world!"", "unicode": false, "value": "Other hello world!", }, @@ -3558,7 +3568,7 @@ Program { "line": 1, "offset": 71, }, - "source": "const CONSTANT = \\"Hello world!\\", OTHER_CONSTANT = \\"Other hello world!\\";", + "source": "const CONSTANT = "Hello world!", OTHER_CONSTANT = "Other hello world!";", "start": Position { "column": 0, "line": 1, @@ -3567,7 +3577,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3575,7 +3585,7 @@ Program { "line": 1, "offset": 71, }, - "source": "const CONSTANT = \\"Hello world!\\", OTHER_CONSTANT = \\"Other hello world!\\";", + "source": "const CONSTANT = "Hello world!", OTHER_CONSTANT = "Other hello world!";", "start": Position { "column": 0, "line": 1, @@ -3587,7 +3597,7 @@ Program { exports[`Test locations test continue 1`] = ` Program { - "children": Array [ + "children": [ Continue { "kind": "continue", "level": null, @@ -3606,7 +3616,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3626,10 +3636,10 @@ Program { exports[`Test locations test declare 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -3698,7 +3708,7 @@ Program { "mode": "none", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3718,11 +3728,11 @@ Program { exports[`Test locations test declare block 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -3732,14 +3742,14 @@ Program { "line": 1, "offset": 35, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 24, "line": 1, "offset": 24, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -3751,7 +3761,7 @@ Program { "line": 1, "offset": 36, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 19, "line": 1, @@ -3761,7 +3771,7 @@ Program { "shortForm": false, }, ], - "directives": Array [ + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -3820,7 +3830,7 @@ Program { "line": 1, "offset": 38, }, - "source": "declare(ticks=1) { echo \\"something\\"; }", + "source": "declare(ticks=1) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -3830,7 +3840,7 @@ Program { "mode": "block", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3838,7 +3848,7 @@ Program { "line": 1, "offset": 38, }, - "source": "declare(ticks=1) { echo \\"something\\"; }", + "source": "declare(ticks=1) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -3850,10 +3860,10 @@ Program { exports[`Test locations test declare directive (multiple) 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -3978,7 +3988,7 @@ Program { "mode": "block", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -3998,10 +4008,10 @@ Program { exports[`Test locations test declare directive 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -4070,7 +4080,7 @@ Program { "mode": "none", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4090,12 +4100,12 @@ Program { exports[`Test locations test do 1`] = ` Program { - "children": Array [ + "children": [ Do { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -4181,7 +4191,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4201,9 +4211,9 @@ Program { exports[`Test locations test echo 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -4213,14 +4223,14 @@ Program { "line": 1, "offset": 16, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 5, "line": 1, "offset": 5, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -4232,7 +4242,7 @@ Program { "line": 1, "offset": 17, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 0, "line": 1, @@ -4242,7 +4252,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4250,7 +4260,7 @@ Program { "line": 1, "offset": 17, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 0, "line": 1, @@ -4262,7 +4272,7 @@ Program { exports[`Test locations test empty 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -4349,7 +4359,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4369,7 +4379,7 @@ Program { exports[`Test locations test encapsed heredoc 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", @@ -4393,7 +4403,7 @@ EOD;", Text EOD", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -4455,7 +4465,7 @@ EOD;", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4477,7 +4487,7 @@ EOD;", exports[`Test locations test encapsed heredoc assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -4537,7 +4547,7 @@ EOD", Text EOD", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -4600,7 +4610,7 @@ EOD;", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4622,7 +4632,7 @@ EOD;", exports[`Test locations test encapsed shell 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -4675,7 +4685,7 @@ Program { }, "raw": "\`command\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -4733,7 +4743,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4753,7 +4763,7 @@ Program { exports[`Test locations test encapsed shell multiline 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -4818,7 +4828,7 @@ command; command; \`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -4895,7 +4905,7 @@ command; }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -4919,7 +4929,7 @@ command; exports[`Test locations test encapsed string 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", @@ -4929,16 +4939,16 @@ Program { "line": 1, "offset": 21, }, - "source": "\\"string $var string\\";", + "source": ""string $var string";", "start": Position { "column": 0, "line": 1, "offset": 0, }, }, - "raw": "\\"string $var string\\"", + "raw": ""string $var string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -5060,7 +5070,7 @@ Program { "line": 1, "offset": 21, }, - "source": "\\"string $var string\\";", + "source": ""string $var string";", "start": Position { "column": 0, "line": 1, @@ -5069,7 +5079,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5077,7 +5087,7 @@ Program { "line": 1, "offset": 21, }, - "source": "\\"string $var string\\";", + "source": ""string $var string";", "start": Position { "column": 0, "line": 1, @@ -5089,7 +5099,7 @@ Program { exports[`Test locations test encapsed string assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -5117,7 +5127,7 @@ Program { "line": 1, "offset": 28, }, - "source": "$var = \\"string $var string\\";", + "source": "$var = "string $var string";", "start": Position { "column": 0, "line": 1, @@ -5133,16 +5143,16 @@ Program { "line": 1, "offset": 27, }, - "source": "\\"string $var string\\"", + "source": ""string $var string"", "start": Position { "column": 7, "line": 1, "offset": 7, }, }, - "raw": "\\"string $var string\\"", + "raw": ""string $var string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -5265,7 +5275,7 @@ Program { "line": 1, "offset": 28, }, - "source": "$var = \\"string $var string\\";", + "source": "$var = "string $var string";", "start": Position { "column": 0, "line": 1, @@ -5274,7 +5284,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5282,7 +5292,7 @@ Program { "line": 1, "offset": 28, }, - "source": "$var = \\"string $var string\\";", + "source": "$var = "string $var string";", "start": Position { "column": 0, "line": 1, @@ -5294,7 +5304,7 @@ Program { exports[`Test locations test encapsed string multiline 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -5322,9 +5332,9 @@ Program { "line": 3, "offset": 28, }, - "source": "$var = \\"string + "source": "$var = "string $var -string\\";", +string";", "start": Position { "column": 0, "line": 1, @@ -5340,20 +5350,20 @@ string\\";", "line": 3, "offset": 27, }, - "source": "\\"string + "source": ""string $var -string\\"", +string"", "start": Position { "column": 7, "line": 1, "offset": 7, }, }, - "raw": "\\"string + "raw": ""string $var -string\\"", +string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -5484,9 +5494,9 @@ string", "line": 3, "offset": 28, }, - "source": "$var = \\"string + "source": "$var = "string $var -string\\";", +string";", "start": Position { "column": 0, "line": 1, @@ -5495,7 +5505,7 @@ string\\";", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5503,9 +5513,9 @@ string\\";", "line": 3, "offset": 28, }, - "source": "$var = \\"string + "source": "$var = "string $var -string\\";", +string";", "start": Position { "column": 0, "line": 1, @@ -5517,7 +5527,7 @@ string\\";", exports[`Test locations test eval 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Eval { "kind": "eval", @@ -5527,7 +5537,7 @@ Program { "line": 1, "offset": 13, }, - "source": "eval(\\"code\\");", + "source": "eval("code");", "start": Position { "column": 0, "line": 1, @@ -5543,14 +5553,14 @@ Program { "line": 1, "offset": 11, }, - "source": "\\"code\\"", + "source": ""code"", "start": Position { "column": 5, "line": 1, "offset": 5, }, }, - "raw": "\\"code\\"", + "raw": ""code"", "unicode": false, "value": "code", }, @@ -5562,7 +5572,7 @@ Program { "line": 1, "offset": 13, }, - "source": "eval(\\"code\\");", + "source": "eval("code");", "start": Position { "column": 0, "line": 1, @@ -5571,7 +5581,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5579,7 +5589,7 @@ Program { "line": 1, "offset": 13, }, - "source": "eval(\\"code\\");", + "source": "eval("code");", "start": Position { "column": 0, "line": 1, @@ -5591,7 +5601,7 @@ Program { exports[`Test locations test exit 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Exit { "expression": Number { @@ -5643,7 +5653,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5663,18 +5673,21 @@ Program { exports[`Test locations test final class (inner statement) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": true, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -5759,7 +5772,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5779,14 +5792,16 @@ Program { exports[`Test locations test final class 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": true, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -5820,7 +5835,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -5840,10 +5855,10 @@ Program { exports[`Test locations test for 1`] = ` Program { - "children": Array [ + "children": [ For { "body": Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -5853,14 +5868,14 @@ Program { "line": 1, "offset": 45, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 34, "line": 1, "offset": 34, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -5872,7 +5887,7 @@ Program { "line": 1, "offset": 46, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 29, "line": 1, @@ -5881,7 +5896,7 @@ Program { }, "shortForm": false, }, - "increment": Array [ + "increment": [ Post { "kind": "post", "loc": Location { @@ -5918,7 +5933,7 @@ Program { }, }, ], - "init": Array [ + "init": [ Assign { "kind": "assign", "left": Variable { @@ -5979,7 +5994,7 @@ Program { "line": 1, "offset": 46, }, - "source": "for ($i = 1; $i <= 10; $i++) echo \\"something\\";", + "source": "for ($i = 1; $i <= 10; $i++) echo "something";", "start": Position { "column": 0, "line": 1, @@ -5987,7 +6002,7 @@ Program { }, }, "shortForm": false, - "test": Array [ + "test": [ Bin { "kind": "bin", "left": Variable { @@ -6043,7 +6058,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6051,7 +6066,7 @@ Program { "line": 1, "offset": 46, }, - "source": "for ($i = 1; $i <= 10; $i++) echo \\"something\\";", + "source": "for ($i = 1; $i <= 10; $i++) echo "something";", "start": Position { "column": 0, "line": 1, @@ -6063,12 +6078,12 @@ Program { exports[`Test locations test for block 1`] = ` Program { - "children": Array [ + "children": [ For { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6078,14 +6093,14 @@ Program { "line": 1, "offset": 47, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 36, "line": 1, "offset": 36, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -6097,7 +6112,7 @@ Program { "line": 1, "offset": 48, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 31, "line": 1, @@ -6114,7 +6129,7 @@ Program { "line": 1, "offset": 50, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 29, "line": 1, @@ -6122,7 +6137,7 @@ Program { }, }, }, - "increment": Array [ + "increment": [ Post { "kind": "post", "loc": Location { @@ -6159,7 +6174,7 @@ Program { }, }, ], - "init": Array [ + "init": [ Assign { "kind": "assign", "left": Variable { @@ -6220,7 +6235,7 @@ Program { "line": 1, "offset": 50, }, - "source": "for ($i = 1; $i <= 10; $i++) { echo \\"something\\"; }", + "source": "for ($i = 1; $i <= 10; $i++) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -6228,7 +6243,7 @@ Program { }, }, "shortForm": false, - "test": Array [ + "test": [ Bin { "kind": "bin", "left": Variable { @@ -6284,7 +6299,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6292,7 +6307,7 @@ Program { "line": 1, "offset": 50, }, - "source": "for ($i = 1; $i <= 10; $i++) { echo \\"something\\"; }", + "source": "for ($i = 1; $i <= 10; $i++) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -6304,10 +6319,10 @@ Program { exports[`Test locations test foreach 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6317,14 +6332,14 @@ Program { "line": 1, "offset": 41, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 30, "line": 1, "offset": 30, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -6336,7 +6351,7 @@ Program { "line": 1, "offset": 42, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 25, "line": 1, @@ -6353,7 +6368,7 @@ Program { "line": 1, "offset": 42, }, - "source": "foreach ($arr as $value) echo \\"something\\";", + "source": "foreach ($arr as $value) echo "something";", "start": Position { "column": 0, "line": 1, @@ -6399,7 +6414,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6407,7 +6422,7 @@ Program { "line": 1, "offset": 42, }, - "source": "foreach ($arr as $value) echo \\"something\\";", + "source": "foreach ($arr as $value) echo "something";", "start": Position { "column": 0, "line": 1, @@ -6419,12 +6434,12 @@ Program { exports[`Test locations test foreach block 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6434,14 +6449,14 @@ Program { "line": 1, "offset": 43, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 32, "line": 1, "offset": 32, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -6453,7 +6468,7 @@ Program { "line": 1, "offset": 44, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 27, "line": 1, @@ -6470,7 +6485,7 @@ Program { "line": 1, "offset": 46, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 25, "line": 1, @@ -6486,7 +6501,7 @@ Program { "line": 1, "offset": 46, }, - "source": "foreach ($arr as $value) { echo \\"something\\"; }", + "source": "foreach ($arr as $value) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -6532,7 +6547,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6540,7 +6555,7 @@ Program { "line": 1, "offset": 46, }, - "source": "foreach ($arr as $value) { echo \\"something\\"; }", + "source": "foreach ($arr as $value) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -6552,13 +6567,14 @@ Program { exports[`Test locations test function 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6568,14 +6584,14 @@ Program { "line": 1, "offset": 33, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 22, "line": 1, "offset": 22, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -6587,7 +6603,7 @@ Program { "line": 1, "offset": 34, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 17, "line": 1, @@ -6604,7 +6620,7 @@ Program { "line": 1, "offset": 36, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 15, "line": 1, @@ -6648,7 +6664,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6656,7 +6672,7 @@ Program { "line": 1, "offset": 36, }, - "source": "function foo() { echo \\"something\\"; }", + "source": "function foo() { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -6668,9 +6684,9 @@ Program { exports[`Test locations test global 1`] = ` Program { - "children": Array [ + "children": [ Global { - "items": Array [ + "items": [ Variable { "curly": false, "kind": "variable", @@ -6706,7 +6722,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6726,7 +6742,7 @@ Program { exports[`Test locations test goto #2 1`] = ` Program { - "children": Array [ + "children": [ Goto { "kind": "goto", "label": Identifier { @@ -6761,7 +6777,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6781,7 +6797,7 @@ Program { exports[`Test locations test goto 1`] = ` Program { - "children": Array [ + "children": [ Goto { "kind": "goto", "label": Identifier { @@ -6816,7 +6832,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -6836,11 +6852,11 @@ Program { exports[`Test locations test if/elseif/else 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6850,14 +6866,14 @@ Program { "line": 1, "offset": 87, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 76, "line": 1, "offset": 76, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -6869,7 +6885,7 @@ Program { "line": 1, "offset": 88, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 71, "line": 1, @@ -6879,7 +6895,7 @@ Program { "shortForm": false, }, "body": Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6889,14 +6905,14 @@ Program { "line": 1, "offset": 64, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 53, "line": 1, "offset": 53, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -6908,7 +6924,7 @@ Program { "line": 1, "offset": 65, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 48, "line": 1, @@ -6924,7 +6940,7 @@ Program { "line": 1, "offset": 88, }, - "source": "elseif ($a < $b) echo \\"something\\"; else echo \\"something\\";", + "source": "elseif ($a < $b) echo "something"; else echo "something";", "start": Position { "column": 31, "line": 1, @@ -6987,7 +7003,7 @@ Program { }, }, "body": Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -6997,14 +7013,14 @@ Program { "line": 1, "offset": 29, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 18, "line": 1, "offset": 18, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7016,7 +7032,7 @@ Program { "line": 1, "offset": 30, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 13, "line": 1, @@ -7032,7 +7048,7 @@ Program { "line": 1, "offset": 88, }, - "source": "if ($a > $b) echo \\"something\\"; elseif ($a < $b) echo \\"something\\"; else echo \\"something\\";", + "source": "if ($a > $b) echo "something"; elseif ($a < $b) echo "something"; else echo "something";", "start": Position { "column": 0, "line": 1, @@ -7095,7 +7111,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7103,7 +7119,7 @@ Program { "line": 1, "offset": 88, }, - "source": "if ($a > $b) echo \\"something\\"; elseif ($a < $b) echo \\"something\\"; else echo \\"something\\";", + "source": "if ($a > $b) echo "something"; elseif ($a < $b) echo "something"; else echo "something";", "start": Position { "column": 0, "line": 1, @@ -7115,13 +7131,13 @@ Program { exports[`Test locations test if/elseif/else block 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": If { "alternate": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -7131,14 +7147,14 @@ Program { "line": 1, "offset": 97, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 86, "line": 1, "offset": 86, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7150,7 +7166,7 @@ Program { "line": 1, "offset": 98, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 81, "line": 1, @@ -7167,7 +7183,7 @@ Program { "line": 1, "offset": 100, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 79, "line": 1, @@ -7176,9 +7192,9 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -7188,14 +7204,14 @@ Program { "line": 1, "offset": 70, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 59, "line": 1, "offset": 59, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7207,7 +7223,7 @@ Program { "line": 1, "offset": 71, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 54, "line": 1, @@ -7224,7 +7240,7 @@ Program { "line": 1, "offset": 73, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 52, "line": 1, @@ -7239,7 +7255,7 @@ Program { "line": 1, "offset": 100, }, - "source": "elseif ($a < $b) { echo \\"something\\"; } else { echo \\"something\\"; }", + "source": "elseif ($a < $b) { echo "something"; } else { echo "something"; }", "start": Position { "column": 35, "line": 1, @@ -7302,9 +7318,9 @@ Program { }, }, "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -7314,14 +7330,14 @@ Program { "line": 1, "offset": 31, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 20, "line": 1, "offset": 20, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7333,7 +7349,7 @@ Program { "line": 1, "offset": 32, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 15, "line": 1, @@ -7350,7 +7366,7 @@ Program { "line": 1, "offset": 34, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 13, "line": 1, @@ -7365,7 +7381,7 @@ Program { "line": 1, "offset": 100, }, - "source": "if ($a > $b) { echo \\"something\\"; } elseif ($a < $b) { echo \\"something\\"; } else { echo \\"something\\"; }", + "source": "if ($a > $b) { echo "something"; } elseif ($a < $b) { echo "something"; } else { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -7428,7 +7444,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7436,7 +7452,7 @@ Program { "line": 1, "offset": 100, }, - "source": "if ($a > $b) { echo \\"something\\"; } elseif ($a < $b) { echo \\"something\\"; } else { echo \\"something\\"; }", + "source": "if ($a > $b) { echo "something"; } elseif ($a < $b) { echo "something"; } else { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -7448,7 +7464,7 @@ Program { exports[`Test locations test include 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Include { "kind": "include", @@ -7458,7 +7474,7 @@ Program { "line": 1, "offset": 20, }, - "source": "include \\"something\\";", + "source": "include "something";", "start": Position { "column": 0, "line": 1, @@ -7476,14 +7492,14 @@ Program { "line": 1, "offset": 19, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 8, "line": 1, "offset": 8, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7495,7 +7511,7 @@ Program { "line": 1, "offset": 20, }, - "source": "include \\"something\\";", + "source": "include "something";", "start": Position { "column": 0, "line": 1, @@ -7504,7 +7520,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7512,7 +7528,7 @@ Program { "line": 1, "offset": 20, }, - "source": "include \\"something\\";", + "source": "include "something";", "start": Position { "column": 0, "line": 1, @@ -7524,9 +7540,10 @@ Program { exports[`Test locations test interface 1`] = ` Program { - "children": Array [ + "children": [ Interface { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "kind": "interface", "loc": Location { @@ -7561,7 +7578,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7581,7 +7598,7 @@ Program { exports[`Test locations test isset 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -7632,7 +7649,7 @@ Program { "offset": 7, }, }, - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -7670,7 +7687,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7690,7 +7707,7 @@ Program { exports[`Test locations test label #2 1`] = ` Program { - "children": Array [ + "children": [ Label { "kind": "label", "loc": Location { @@ -7725,7 +7742,7 @@ Program { }, }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -7735,14 +7752,14 @@ Program { "line": 1, "offset": 26, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 15, "line": 1, "offset": 15, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7754,7 +7771,7 @@ Program { "line": 1, "offset": 27, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 10, "line": 1, @@ -7764,7 +7781,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7772,7 +7789,7 @@ Program { "line": 1, "offset": 27, }, - "source": "longName: echo \\"something\\";", + "source": "longName: echo "something";", "start": Position { "column": 0, "line": 1, @@ -7784,7 +7801,7 @@ Program { exports[`Test locations test label 1`] = ` Program { - "children": Array [ + "children": [ Label { "kind": "label", "loc": Location { @@ -7819,7 +7836,7 @@ Program { }, }, Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -7829,14 +7846,14 @@ Program { "line": 1, "offset": 19, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 8, "line": 1, "offset": 8, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -7848,7 +7865,7 @@ Program { "line": 1, "offset": 20, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 3, "line": 1, @@ -7858,7 +7875,7 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -7866,7 +7883,7 @@ Program { "line": 1, "offset": 20, }, - "source": "a: echo \\"something\\";", + "source": "a: echo "something";", "start": Position { "column": 0, "line": 1, @@ -7878,12 +7895,12 @@ Program { exports[`Test locations test list 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -8061,7 +8078,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8081,12 +8098,12 @@ Program { exports[`Test locations test list short form 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -8264,7 +8281,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8284,7 +8301,7 @@ Program { exports[`Test locations test magic 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -8320,7 +8337,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8340,13 +8357,15 @@ Program { exports[`Test locations test method (public) 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -8365,6 +8384,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -8373,11 +8393,11 @@ Program { "line": 1, "offset": 39, }, - "source": "function method()", + "source": "public function method()", "start": Position { - "column": 19, + "column": 12, "line": 1, - "offset": 19, + "offset": 12, }, }, "name": Identifier { @@ -8407,6 +8427,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -8440,7 +8461,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8460,13 +8481,15 @@ Program { exports[`Test locations test method 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -8485,6 +8508,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -8527,6 +8551,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -8560,7 +8585,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8580,9 +8605,9 @@ Program { exports[`Test locations test namespace 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [], + "children": [], "kind": "namespace", "loc": Location { "end": Position { @@ -8590,18 +8615,18 @@ Program { "line": 1, "offset": 18, }, - "source": "namespace my\\\\name;", + "source": "namespace my\\name;", "start": Position { "column": 0, "line": 1, "offset": 0, }, }, - "name": "my\\\\name", + "name": "my\\name", "withBrackets": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8609,7 +8634,7 @@ Program { "line": 1, "offset": 18, }, - "source": "namespace my\\\\name;", + "source": "namespace my\\name;", "start": Position { "column": 0, "line": 1, @@ -8621,11 +8646,11 @@ Program { exports[`Test locations test namespace backets 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -8635,14 +8660,14 @@ Program { "line": 1, "offset": 36, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 25, "line": 1, "offset": 25, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -8654,7 +8679,7 @@ Program { "line": 1, "offset": 37, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 20, "line": 1, @@ -8671,18 +8696,18 @@ Program { "line": 1, "offset": 39, }, - "source": "namespace my\\\\name { echo \\"something\\"; }", + "source": "namespace my\\name { echo "something"; }", "start": Position { "column": 0, "line": 1, "offset": 0, }, }, - "name": "my\\\\name", + "name": "my\\name", "withBrackets": true, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8690,7 +8715,7 @@ Program { "line": 1, "offset": 39, }, - "source": "namespace my\\\\name { echo \\"something\\"; }", + "source": "namespace my\\name { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -8702,7 +8727,7 @@ Program { exports[`Test locations test negative number 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -8754,7 +8779,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8774,10 +8799,10 @@ Program { exports[`Test locations test new 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "loc": Location { "end": Position { @@ -8827,7 +8852,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8847,7 +8872,7 @@ Program { exports[`Test locations test new anonymous class 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -8884,7 +8909,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "loc": Location { "end": Position { @@ -8900,12 +8925,14 @@ Program { }, }, "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -8940,7 +8967,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -8960,7 +8987,7 @@ Program { exports[`Test locations test nowdoc 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Nowdoc { "kind": "nowdoc", @@ -9003,7 +9030,7 @@ EOD;", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9025,7 +9052,7 @@ EOD;", exports[`Test locations test nowdoc assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -9105,7 +9132,7 @@ EOD;", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9127,7 +9154,7 @@ EOD;", exports[`Test locations test number 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Number { "kind": "number", @@ -9162,7 +9189,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9182,7 +9209,7 @@ Program { exports[`Test locations test offsetlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -9433,7 +9460,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9463,11 +9490,13 @@ Program { exports[`Test locations test parameter 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "loc": Location { "end": Position { @@ -9500,6 +9529,7 @@ Program { "name": "foo", }, "nullable": true, + "readonly": false, "type": TypeReference { "kind": "typereference", "loc": Location { @@ -9538,8 +9568,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -9591,7 +9622,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9611,7 +9642,7 @@ Program { exports[`Test locations test post 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -9664,7 +9695,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9684,7 +9715,7 @@ Program { exports[`Test locations test pre 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Pre { "kind": "pre", @@ -9737,7 +9768,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9757,7 +9788,7 @@ Program { exports[`Test locations test print 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Print { "expression": String { @@ -9769,14 +9800,14 @@ Program { "line": 1, "offset": 17, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 6, "line": 1, "offset": 6, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -9787,7 +9818,7 @@ Program { "line": 1, "offset": 18, }, - "source": "print \\"something\\";", + "source": "print "something";", "start": Position { "column": 0, "line": 1, @@ -9802,7 +9833,7 @@ Program { "line": 1, "offset": 18, }, - "source": "print \\"something\\";", + "source": "print "something";", "start": Position { "column": 0, "line": 1, @@ -9811,7 +9842,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -9819,7 +9850,7 @@ Program { "line": 1, "offset": 18, }, - "source": "print \\"something\\";", + "source": "print "something";", "start": Position { "column": 0, "line": 1, @@ -9831,7 +9862,7 @@ Program { exports[`Test locations test propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -9876,7 +9907,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -9940,7 +9971,7 @@ Program { "name": "dump", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -10000,7 +10031,7 @@ Program { "name": "first", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -10056,7 +10087,7 @@ Program { "name": "map", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -10158,7 +10189,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10188,7 +10219,7 @@ Program { exports[`Test locations test retif 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -10311,7 +10342,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10331,7 +10362,7 @@ Program { exports[`Test locations test retif nested 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -10613,7 +10644,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10633,7 +10664,7 @@ Program { exports[`Test locations test return 1`] = ` Program { - "children": Array [ + "children": [ Return { "expr": Number { "kind": "number", @@ -10668,7 +10699,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10688,7 +10719,7 @@ Program { exports[`Test locations test silent 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -10726,7 +10757,7 @@ Program { "operator": "=", "right": Silent { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -10792,7 +10823,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10812,11 +10843,11 @@ Program { exports[`Test locations test silent 2`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Silent { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -10881,7 +10912,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10901,10 +10932,10 @@ Program { exports[`Test locations test single call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -10954,7 +10985,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -10974,7 +11005,7 @@ Program { exports[`Test locations test static 1`] = ` Program { - "children": Array [ + "children": [ Static { "kind": "static", "loc": Location { @@ -10990,7 +11021,7 @@ Program { "offset": 0, }, }, - "variables": Array [ + "variables": [ StaticVariable { "defaultValue": Number { "kind": "number", @@ -11045,7 +11076,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11065,7 +11096,7 @@ Program { exports[`Test locations test static multiple 1`] = ` Program { - "children": Array [ + "children": [ Static { "kind": "static", "loc": Location { @@ -11081,7 +11112,7 @@ Program { "offset": 0, }, }, - "variables": Array [ + "variables": [ StaticVariable { "defaultValue": Number { "kind": "number", @@ -11238,7 +11269,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11258,7 +11289,7 @@ Program { exports[`Test locations test staticlookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -11303,7 +11334,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -11367,7 +11398,7 @@ Program { "name": "dump", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -11427,7 +11458,7 @@ Program { "name": "first", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -11483,7 +11514,7 @@ Program { "name": "map", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -11585,7 +11616,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11615,7 +11646,7 @@ Program { exports[`Test locations test string double quotes 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": String { "isDoubleQuote": true, @@ -11626,14 +11657,14 @@ Program { "line": 1, "offset": 9, }, - "source": "\\"string\\";", + "source": ""string";", "start": Position { "column": 0, "line": 1, "offset": 0, }, }, - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -11644,7 +11675,7 @@ Program { "line": 1, "offset": 9, }, - "source": "\\"string\\";", + "source": ""string";", "start": Position { "column": 0, "line": 1, @@ -11653,7 +11684,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11661,7 +11692,7 @@ Program { "line": 1, "offset": 9, }, - "source": "\\"string\\";", + "source": ""string";", "start": Position { "column": 0, "line": 1, @@ -11673,7 +11704,7 @@ Program { exports[`Test locations test string single quotes 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": String { "isDoubleQuote": false, @@ -11711,7 +11742,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11731,10 +11762,10 @@ Program { exports[`Test locations test switch 1`] = ` Program { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -11785,7 +11816,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11805,15 +11836,15 @@ Program { exports[`Test locations test switch case 1`] = ` Program { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [ + "children": [ Case { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -11823,14 +11854,14 @@ Program { "line": 1, "offset": 38, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 27, "line": 1, "offset": 27, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -11842,7 +11873,7 @@ Program { "line": 1, "offset": 39, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 22, "line": 1, @@ -11876,7 +11907,7 @@ Program { "line": 1, "offset": 46, }, - "source": "echo \\"something\\"; break;", + "source": "echo "something"; break;", "start": Position { "column": 22, "line": 1, @@ -11891,7 +11922,7 @@ Program { "line": 1, "offset": 46, }, - "source": "case 0: echo \\"something\\"; break;", + "source": "case 0: echo "something"; break;", "start": Position { "column": 14, "line": 1, @@ -11924,7 +11955,7 @@ Program { "line": 1, "offset": 48, }, - "source": "{ case 0: echo \\"something\\"; break; }", + "source": "{ case 0: echo "something"; break; }", "start": Position { "column": 12, "line": 1, @@ -11939,7 +11970,7 @@ Program { "line": 1, "offset": 48, }, - "source": "switch ($i) { case 0: echo \\"something\\"; break; }", + "source": "switch ($i) { case 0: echo "something"; break; }", "start": Position { "column": 0, "line": 1, @@ -11967,7 +11998,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -11975,7 +12006,7 @@ Program { "line": 1, "offset": 48, }, - "source": "switch ($i) { case 0: echo \\"something\\"; break; }", + "source": "switch ($i) { case 0: echo "something"; break; }", "start": Position { "column": 0, "line": 1, @@ -11987,15 +12018,15 @@ Program { exports[`Test locations test switch default 1`] = ` Program { - "children": Array [ + "children": [ Switch { "body": Block { - "children": Array [ + "children": [ Case { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -12005,14 +12036,14 @@ Program { "line": 1, "offset": 39, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 28, "line": 1, "offset": 28, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -12024,7 +12055,7 @@ Program { "line": 1, "offset": 40, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 23, "line": 1, @@ -12041,7 +12072,7 @@ Program { "line": 1, "offset": 40, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 23, "line": 1, @@ -12056,7 +12087,7 @@ Program { "line": 1, "offset": 40, }, - "source": "default: echo \\"something\\";", + "source": "default: echo "something";", "start": Position { "column": 14, "line": 1, @@ -12073,7 +12104,7 @@ Program { "line": 1, "offset": 42, }, - "source": "{ default: echo \\"something\\"; }", + "source": "{ default: echo "something"; }", "start": Position { "column": 12, "line": 1, @@ -12088,7 +12119,7 @@ Program { "line": 1, "offset": 42, }, - "source": "switch ($i) { default: echo \\"something\\"; }", + "source": "switch ($i) { default: echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -12116,7 +12147,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12124,7 +12155,7 @@ Program { "line": 1, "offset": 42, }, - "source": "switch ($i) { default: echo \\"something\\"; }", + "source": "switch ($i) { default: echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -12136,7 +12167,7 @@ Program { exports[`Test locations test ternary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": RetIf { "falseExpr": String { @@ -12148,14 +12179,14 @@ Program { "line": 1, "offset": 21, }, - "source": "\\"no\\"", + "source": ""no"", "start": Position { "column": 17, "line": 1, "offset": 17, }, }, - "raw": "\\"no\\"", + "raw": ""no"", "unicode": false, "value": "no", }, @@ -12166,7 +12197,7 @@ Program { "line": 1, "offset": 22, }, - "source": "$valid ? \\"yes\\" : \\"no\\";", + "source": "$valid ? "yes" : "no";", "start": Position { "column": 0, "line": 1, @@ -12200,14 +12231,14 @@ Program { "line": 1, "offset": 14, }, - "source": "\\"yes\\"", + "source": ""yes"", "start": Position { "column": 9, "line": 1, "offset": 9, }, }, - "raw": "\\"yes\\"", + "raw": ""yes"", "unicode": false, "value": "yes", }, @@ -12219,7 +12250,7 @@ Program { "line": 1, "offset": 22, }, - "source": "$valid ? \\"yes\\" : \\"no\\";", + "source": "$valid ? "yes" : "no";", "start": Position { "column": 0, "line": 1, @@ -12228,7 +12259,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12236,7 +12267,7 @@ Program { "line": 1, "offset": 22, }, - "source": "$valid ? \\"yes\\" : \\"no\\";", + "source": "$valid ? "yes" : "no";", "start": Position { "column": 0, "line": 1, @@ -12248,7 +12279,7 @@ Program { exports[`Test locations test ternary no true expression 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": RetIf { "falseExpr": String { @@ -12260,14 +12291,14 @@ Program { "line": 1, "offset": 14, }, - "source": "\\"no\\"", + "source": ""no"", "start": Position { "column": 10, "line": 1, "offset": 10, }, }, - "raw": "\\"no\\"", + "raw": ""no"", "unicode": false, "value": "no", }, @@ -12278,7 +12309,7 @@ Program { "line": 1, "offset": 15, }, - "source": "$valid ?: \\"no\\";", + "source": "$valid ?: "no";", "start": Position { "column": 0, "line": 1, @@ -12312,7 +12343,7 @@ Program { "line": 1, "offset": 15, }, - "source": "$valid ?: \\"no\\";", + "source": "$valid ?: "no";", "start": Position { "column": 0, "line": 1, @@ -12321,7 +12352,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12329,7 +12360,7 @@ Program { "line": 1, "offset": 15, }, - "source": "$valid ?: \\"no\\";", + "source": "$valid ?: "no";", "start": Position { "column": 0, "line": 1, @@ -12341,9 +12372,9 @@ Program { exports[`Test locations test trait 1`] = ` Program { - "children": Array [ + "children": [ Trait { - "body": Array [], + "body": [], "kind": "trait", "loc": Location { "end": Position { @@ -12377,7 +12408,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12397,9 +12428,10 @@ Program { exports[`Test locations test traituse 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { "adaptations": null, "kind": "traituse", @@ -12416,7 +12448,7 @@ Program { "offset": 12, }, }, - "traits": Array [ + "traits": [ Name { "kind": "name", "loc": Location { @@ -12443,6 +12475,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -12476,7 +12509,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12496,13 +12529,14 @@ Program { exports[`Test locations test traituse adaptations 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { - "adaptations": Array [ + "adaptations": [ TraitPrecedence { - "instead": Array [ + "instead": [ Name { "kind": "name", "loc": Location { @@ -12712,7 +12746,7 @@ Program { "offset": 12, }, }, - "traits": Array [ + "traits": [ Name { "kind": "name", "loc": Location { @@ -12757,6 +12791,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -12790,7 +12825,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12810,9 +12845,10 @@ Program { exports[`Test locations test traituse multiple 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { "adaptations": null, "kind": "traituse", @@ -12829,7 +12865,7 @@ Program { "offset": 12, }, }, - "traits": Array [ + "traits": [ Name { "kind": "name", "loc": Location { @@ -12874,6 +12910,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -12907,7 +12944,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -12927,12 +12964,12 @@ Program { exports[`Test locations test try 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "loc": Location { "end": Position { @@ -12981,7 +13018,7 @@ Program { }, }, }, - "catches": Array [], + "catches": [], "kind": "try", "loc": Location { "end": Position { @@ -12998,7 +13035,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13018,10 +13055,10 @@ Program { exports[`Test locations test try/catch/finally 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -13038,7 +13075,7 @@ Program { }, }, "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -13054,10 +13091,10 @@ Program { }, }, }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [], + "children": [], "kind": "block", "loc": Location { "end": Position { @@ -13105,7 +13142,7 @@ Program { }, "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", "loc": Location { @@ -13143,7 +13180,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13163,7 +13200,7 @@ Program { exports[`Test locations test unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -13216,7 +13253,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13236,7 +13273,7 @@ Program { exports[`Test locations test unset 1`] = ` Program { - "children": Array [ + "children": [ Unset { "kind": "unset", "loc": Location { @@ -13252,7 +13289,7 @@ Program { "offset": 0, }, }, - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -13274,7 +13311,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13294,7 +13331,7 @@ Program { exports[`Test locations test variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Variable { "curly": false, @@ -13330,7 +13367,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13350,10 +13387,10 @@ Program { exports[`Test locations test variadic 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ variadic { "kind": "variadic", "loc": Location { @@ -13438,7 +13475,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13458,10 +13495,10 @@ Program { exports[`Test locations test while 1`] = ` Program { - "children": Array [ + "children": [ While { "body": Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -13471,14 +13508,14 @@ Program { "line": 1, "offset": 28, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 17, "line": 1, "offset": 17, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -13490,7 +13527,7 @@ Program { "line": 1, "offset": 29, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 12, "line": 1, @@ -13506,7 +13543,7 @@ Program { "line": 1, "offset": 29, }, - "source": "while(true) echo \\"something\\";", + "source": "while(true) echo "something";", "start": Position { "column": 0, "line": 1, @@ -13534,7 +13571,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13542,7 +13579,7 @@ Program { "line": 1, "offset": 29, }, - "source": "while(true) echo \\"something\\";", + "source": "while(true) echo "something";", "start": Position { "column": 0, "line": 1, @@ -13554,12 +13591,12 @@ Program { exports[`Test locations test while block 1`] = ` Program { - "children": Array [ + "children": [ While { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", @@ -13569,14 +13606,14 @@ Program { "line": 1, "offset": 30, }, - "source": "\\"something\\"", + "source": ""something"", "start": Position { "column": 19, "line": 1, "offset": 19, }, }, - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -13588,7 +13625,7 @@ Program { "line": 1, "offset": 31, }, - "source": "echo \\"something\\";", + "source": "echo "something";", "start": Position { "column": 14, "line": 1, @@ -13605,7 +13642,7 @@ Program { "line": 1, "offset": 33, }, - "source": "{ echo \\"something\\"; }", + "source": "{ echo "something"; }", "start": Position { "column": 12, "line": 1, @@ -13620,7 +13657,7 @@ Program { "line": 1, "offset": 33, }, - "source": "while(true) { echo \\"something\\"; }", + "source": "while(true) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -13648,7 +13685,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13656,7 +13693,7 @@ Program { "line": 1, "offset": 33, }, - "source": "while(true) { echo \\"something\\"; }", + "source": "while(true) { echo "something"; }", "start": Position { "column": 0, "line": 1, @@ -13668,7 +13705,7 @@ Program { exports[`Test locations test yield 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": null, @@ -13721,7 +13758,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -13741,7 +13778,7 @@ Program { exports[`Test locations test yield from 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": YieldFrom { "kind": "yieldfrom", @@ -13759,7 +13796,7 @@ Program { }, }, "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "loc": Location { "end": Position { @@ -13810,7 +13847,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { diff --git a/test/snapshot/__snapshots__/loop.test.js.snap b/test/snapshot/__snapshots__/loop.test.js.snap index a1b44faf3..459835953 100644 --- a/test/snapshot/__snapshots__/loop.test.js.snap +++ b/test/snapshot/__snapshots__/loop.test.js.snap @@ -2,11 +2,11 @@ exports[`Test loops statements (for, while) fix #122 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": ExpressionStatement { "expression": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -43,13 +43,13 @@ Program { "kind": "expressionstatement", }, Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"$k -> $v -\\"", + "raw": ""$k -> $v +"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -102,7 +102,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "VARIABLE", "kind": "error", @@ -145,16 +145,16 @@ Program { exports[`Test loops statements (for, while) fix #122 2`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"$k -> $v -\\"", + "raw": ""$k -> $v +"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -207,7 +207,7 @@ Program { "shortForm": false, }, "key": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -237,7 +237,7 @@ Program { }, }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -252,16 +252,16 @@ Program { exports[`Test loops statements (for, while) test do 1`] = ` Program { - "children": Array [ + "children": [ Do { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"something\\"", + "raw": ""something"", "unicode": false, "value": "something", }, @@ -280,17 +280,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test loops statements (for, while) test for 1`] = ` Program { - "children": Array [ + "children": [ For { "body": Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -300,7 +300,7 @@ Program { "kind": "echo", "shortForm": false, }, - "increment": Array [ + "increment": [ Post { "kind": "post", "type": "+", @@ -311,7 +311,7 @@ Program { }, }, ], - "init": Array [ + "init": [ Assign { "kind": "assign", "left": Variable { @@ -341,7 +341,7 @@ Program { ], "kind": "for", "shortForm": false, - "test": Array [ + "test": [ Bin { "kind": "bin", "left": Variable { @@ -364,9 +364,9 @@ Program { }, For { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Variable { "curly": false, "kind": "variable", @@ -394,30 +394,30 @@ Program { ], "kind": "block", }, - "increment": Array [], - "init": Array [], + "increment": [], + "init": [], "kind": "for", "shortForm": true, - "test": Array [], + "test": [], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test loops statements (for, while) test foreach 1`] = ` Program { - "children": Array [ + "children": [ Foreach { "body": Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"$k -> $v -\\"", + "raw": ""$k -> $v +"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -486,15 +486,15 @@ Program { }, Foreach { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"$a -> $b -\\"", + "raw": ""$a -> $b +"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -557,14 +557,14 @@ Program { "kind": "foreach", "shortForm": true, "source": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -596,7 +596,7 @@ Program { "kind": "entry", "unpack": false, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -627,7 +627,7 @@ Program { "shortForm": true, }, "value": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -656,23 +656,23 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test loops statements (for, while) test while test default form 1`] = ` Program { - "children": Array [ + "children": [ While { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"go\\"", + "raw": ""go"", "unicode": false, "value": "go", }, @@ -692,23 +692,23 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test loops statements (for, while) test while test short form 1`] = ` Program { - "children": Array [ + "children": [ While { "body": Block { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"short\\"", + "raw": ""short"", "unicode": false, "value": "short", }, @@ -728,7 +728,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/magic.test.js.snap b/test/snapshot/__snapshots__/magic.test.js.snap index c1575928f..696ee8e30 100644 --- a/test/snapshot/__snapshots__/magic.test.js.snap +++ b/test/snapshot/__snapshots__/magic.test.js.snap @@ -2,7 +2,7 @@ exports[`magic __CLASS__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -12,14 +12,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __DIR__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -29,14 +29,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __FILE__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -46,14 +46,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __FUNCTION__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -63,14 +63,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __LINE__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -80,14 +80,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __LINE__ lowercase 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -97,14 +97,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __METHOD__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -114,14 +114,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __NAMESPACE__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -131,14 +131,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`magic __TRAIT__ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Magic { "kind": "magic", @@ -148,7 +148,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/match.test.js.snap b/test/snapshot/__snapshots__/match.test.js.snap new file mode 100644 index 000000000..42ef068a5 --- /dev/null +++ b/test/snapshot/__snapshots__/match.test.js.snap @@ -0,0 +1,455 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`match can be nested 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "v", + }, + "operator": "=", + "right": Match { + "arms": [ + MatchArm { + "body": Match { + "arms": [ + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'Connect'", + "unicode": false, + "value": "Connect", + }, + "conds": [ + Number { + "kind": "number", + "value": "1", + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'Auth'", + "unicode": false, + "value": "Auth", + }, + "conds": [ + Number { + "kind": "number", + "value": "2", + }, + ], + "kind": "matcharm", + }, + ], + "cond": Variable { + "curly": false, + "kind": "variable", + "name": "err", + }, + "kind": "match", + }, + "conds": [ + NullKeyword { + "kind": "nullkeyword", + "raw": "null", + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'Ok'", + "unicode": false, + "value": "Ok", + }, + "conds": [ + Match { + "arms": [ + MatchArm { + "body": Number { + "kind": "number", + "value": "0", + }, + "conds": [ + Boolean { + "kind": "boolean", + "raw": "true", + "value": true, + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": Unary { + "kind": "unary", + "type": "-", + "what": Number { + "kind": "number", + "value": "1", + }, + }, + "conds": [ + Boolean { + "kind": "boolean", + "raw": "false", + "value": false, + }, + ], + "kind": "matcharm", + }, + ], + "cond": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "kind": "match", + }, + ], + "kind": "matcharm", + }, + ], + "cond": Call { + "arguments": [ + Number { + "kind": "number", + "value": "1", + }, + Number { + "kind": "number", + "value": "2", + }, + Number { + "kind": "number", + "value": "3", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "callMe", + "resolution": "uqn", + }, + }, + "kind": "match", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`match can be parsed 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Match { + "arms": [ + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'yes'", + "unicode": false, + "value": "yes", + }, + "conds": [ + Boolean { + "kind": "boolean", + "raw": "true", + "value": true, + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'no'", + "unicode": false, + "value": "no", + }, + "conds": [ + Boolean { + "kind": "boolean", + "raw": "false", + "value": false, + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": NullKeyword { + "kind": "nullkeyword", + "raw": "null", + }, + "conds": null, + "kind": "matcharm", + }, + ], + "cond": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "kind": "match", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`match can have hanging comma 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Match { + "arms": [ + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'ok'", + "unicode": false, + "value": "ok", + }, + "conds": [ + Boolean { + "kind": "boolean", + "raw": "true", + "value": true, + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": Throw { + "kind": "throw", + "what": New { + "arguments": [ + String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'Nope'", + "unicode": false, + "value": "Nope", + }, + ], + "kind": "new", + "what": Name { + "kind": "name", + "name": "Exception", + "resolution": "uqn", + }, + }, + }, + "conds": [ + Boolean { + "kind": "boolean", + "raw": "false", + "value": false, + }, + ], + "kind": "matcharm", + }, + ], + "cond": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "kind": "match", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`match can have lhs, functions 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Match { + "arms": [ + MatchArm { + "body": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'yes'", + "unicode": false, + "value": "yes", + }, + "conds": [ + Call { + "arguments": [ + Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "test", + "resolution": "uqn", + }, + }, + Call { + "arguments": [ + Variable { + "curly": false, + "kind": "variable", + "name": "b", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "abc", + "resolution": "uqn", + }, + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": NullKeyword { + "kind": "nullkeyword", + "raw": "null", + }, + "conds": null, + "kind": "matcharm", + }, + ], + "cond": Boolean { + "kind": "boolean", + "raw": "true", + "value": true, + }, + "kind": "match", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`match can have multiple values 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "test", + }, + "operator": "=", + "right": Match { + "arms": [ + MatchArm { + "body": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "run", + "resolution": "uqn", + }, + }, + "conds": [ + Number { + "kind": "number", + "value": "0", + }, + Number { + "kind": "number", + "value": "1", + }, + Number { + "kind": "number", + "value": "2", + }, + Number { + "kind": "number", + "value": "3", + }, + ], + "kind": "matcharm", + }, + MatchArm { + "body": NullKeyword { + "kind": "nullkeyword", + "raw": "null", + }, + "conds": null, + "kind": "matcharm", + }, + ], + "cond": Name { + "kind": "name", + "name": "trye", + "resolution": "uqn", + }, + "kind": "match", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; diff --git a/test/snapshot/__snapshots__/namespace.test.js.snap b/test/snapshot/__snapshots__/namespace.test.js.snap index 6a66bd0fc..c59e4055c 100644 --- a/test/snapshot/__snapshots__/namespace.test.js.snap +++ b/test/snapshot/__snapshots__/namespace.test.js.snap @@ -2,9 +2,9 @@ exports[`Test namespace statements allow trailing comma for grouped namespaces #177 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -25,20 +25,20 @@ Program { }, ], "kind": "usegroup", - "name": "Foo\\\\Bar", + "name": "Foo\\Bar", "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test namespace statements check silent mode 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -66,7 +66,7 @@ Program { "withBrackets": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": 105, "kind": "error", @@ -75,7 +75,7 @@ Program { "token": "'$var' (T_VARIABLE)", }, Error { - "expected": Array [ + "expected": [ "{", ";", ], @@ -91,7 +91,7 @@ Program { exports[`Test namespace statements fix #246 - doesn't work properly for \`FULL_QUALIFIED_NAME\` 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -102,11 +102,11 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", - "name": "\\\\Foo", + "name": "\\Foo", "resolution": "fqn", }, }, @@ -114,18 +114,18 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test namespace statements read usegroup location correctly with docs 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -142,7 +142,7 @@ Program { "offset": 44, }, }, - "name": "Some\\\\other\\\\test", + "name": "Some\\other\\test", "type": null, }, ], @@ -164,7 +164,8 @@ Program { "type": null, }, Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", @@ -181,8 +182,9 @@ Program { "offset": 184, }, }, - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "loc": Location { "end": Position { @@ -215,6 +217,7 @@ Program { "name": "test", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -222,9 +225,10 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Boolean { "kind": "boolean", @@ -278,6 +282,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -315,9 +320,10 @@ Program { "visibility": "", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -439,6 +445,7 @@ Program { "byref": true, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -449,9 +456,9 @@ Program { }, "source": null, "start": Position { - "column": 15, + "column": 8, "line": 16, - "offset": 267, + "offset": 260, }, }, "name": Identifier { @@ -494,7 +501,7 @@ Program { "name": "Bar", "resolution": "uqn", }, - "implements": Array [ + "implements": [ Name { "kind": "name", "loc": Location { @@ -535,8 +542,9 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", - "leadingComments": Array [ + "leadingComments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -554,7 +562,7 @@ Program { }, "offset": 68, "value": "/** - * @property \\\\Test\\\\test $test + * @property \\Test\\test $test */", }, ], @@ -604,11 +612,11 @@ Program { "offset": 7, }, }, - "name": "Test\\\\test\\\\test", + "name": "Test\\test\\test", "withBrackets": false, }, ], - "comments": Array [ + "comments": [ CommentBlock { "kind": "commentblock", "loc": Location { @@ -626,11 +634,11 @@ Program { }, "offset": 68, "value": "/** - * @property \\\\Test\\\\test $test + * @property \\Test\\test $test */", }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -650,11 +658,11 @@ Program { exports[`Test namespace statements read usegroup location correctly without docs 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -671,7 +679,7 @@ Program { "offset": 44, }, }, - "name": "Some\\\\other\\\\test", + "name": "Some\\other\\test", "type": null, }, ], @@ -693,7 +701,8 @@ Program { "type": null, }, Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", @@ -710,8 +719,9 @@ Program { "offset": 184, }, }, - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "loc": Location { "end": Position { @@ -744,6 +754,7 @@ Program { "name": "test", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -751,9 +762,10 @@ Program { "visibility": "public", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Boolean { "kind": "boolean", @@ -807,6 +819,7 @@ Program { "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -844,9 +857,10 @@ Program { "visibility": "", }, Method { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -968,6 +982,7 @@ Program { "byref": true, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "loc": Location { @@ -978,9 +993,9 @@ Program { }, "source": null, "start": Position { - "column": 15, + "column": 8, "line": 16, - "offset": 267, + "offset": 260, }, }, "name": Identifier { @@ -1023,7 +1038,7 @@ Program { "name": "Bar", "resolution": "uqn", }, - "implements": Array [ + "implements": [ Name { "kind": "name", "loc": Location { @@ -1064,6 +1079,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "loc": Location { "end": Position { @@ -1111,11 +1127,11 @@ Program { "offset": 7, }, }, - "name": "Test\\\\test\\\\test", + "name": "Test\\test\\test", "withBrackets": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", "loc": Location { "end": Position { @@ -1133,11 +1149,107 @@ Program { } `; +exports[`Test namespace statements test bare namespace separator 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Error { + "expected": "SCALAR", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '\\' (T_NS_SEPARATOR) on line 1", + "token": "'\\' (T_NS_SEPARATOR)", + }, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": "SCALAR", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '\\' (T_NS_SEPARATOR) on line 1", + "token": "'\\' (T_NS_SEPARATOR)", + }, + ], + "kind": "program", +} +`; + +exports[`Test namespace statements test keywords 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "enum", + "resolution": "rn", + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "\\foo\\trait\\class", + "resolution": "fqn", + }, + }, + "kind": "expressionstatement", + }, + UseGroup { + "items": [ + UseItem { + "alias": null, + "kind": "useitem", + "name": "a", + "type": null, + }, + UseItem { + "alias": null, + "kind": "useitem", + "name": "b", + "type": null, + }, + ], + "kind": "usegroup", + "name": "\\foo\\bar", + "type": null, + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + "operator": "=", + "right": Name { + "kind": "name", + "name": "bar", + "resolution": "rn", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + exports[`Test namespace statements test multiple namespace 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -1152,11 +1264,11 @@ Program { }, ], "kind": "namespace", - "name": "\\\\foo", + "name": "\\foo", "withBrackets": true, }, Namespace { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -1171,22 +1283,22 @@ Program { }, ], "kind": "namespace", - "name": Array [ + "name": [ "", ], "withBrackets": true, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test namespace statements test namespace error 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1214,7 +1326,7 @@ Program { "withBrackets": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": 105, "kind": "error", @@ -1223,7 +1335,7 @@ Program { "token": "'$var' (T_VARIABLE)", }, Error { - "expected": Array [ + "expected": [ "{", ";", ], @@ -1239,15 +1351,18 @@ Program { exports[`Test namespace statements test namespace keyword 1`] = ` Program { - "children": Array [ - Call { - "arguments": Array [], - "kind": "call", - "what": Name { - "kind": "name", - "name": "foo", - "resolution": undefined, + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "foo", + "resolution": "rn", + }, }, + "kind": "expressionstatement", }, ExpressionStatement { "expression": Assign { @@ -1267,25 +1382,25 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test namespace statements test single namespace 1`] = ` Program { - "children": Array [ + "children": [ Namespace { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "barBaz", }, "kind": "useitem", - "name": "bar\\\\baz", + "name": "bar\\baz", "type": null, }, ], @@ -1294,14 +1409,14 @@ Program { "type": null, }, UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "barBaz", }, "kind": "useitem", - "name": "bar\\\\baz", + "name": "bar\\baz", "type": null, }, UseItem { @@ -1310,7 +1425,7 @@ Program { "name": "bazBoo", }, "kind": "useitem", - "name": "baz\\\\boo", + "name": "baz\\boo", "type": null, }, ], @@ -1319,14 +1434,14 @@ Program { "type": "const", }, UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "barBaz", }, "kind": "useitem", - "name": "bar\\\\baz", + "name": "bar\\baz", "type": null, }, UseItem { @@ -1335,7 +1450,7 @@ Program { "name": "bazBoo", }, "kind": "useitem", - "name": "baz\\\\boo", + "name": "baz\\boo", "type": null, }, ], @@ -1344,7 +1459,7 @@ Program { "type": "function", }, UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", @@ -1365,11 +1480,11 @@ Program { }, ], "kind": "usegroup", - "name": "bar\\\\baz", + "name": "bar\\baz", "type": null, }, UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", @@ -1421,7 +1536,7 @@ Program { "operator": "=", "right": Name { "kind": "name", - "name": "\\\\barBaz", + "name": "\\barBaz", "resolution": "fqn", }, }, @@ -1438,7 +1553,7 @@ Program { "operator": "=", "right": Name { "kind": "name", - "name": "barBaz\\\\foo", + "name": "barBaz\\foo", "resolution": "qn", }, }, @@ -1467,17 +1582,17 @@ Program { "withBrackets": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test namespace statements work with declare statement 1`] = ` Program { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -1494,14 +1609,16 @@ Program { "mode": "none", }, Namespace { - "children": Array [ + "children": [ Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1514,7 +1631,7 @@ Program { "withBrackets": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/new.test.js.snap b/test/snapshot/__snapshots__/new.test.js.snap index 3981c17fe..58d7c35f8 100644 --- a/test/snapshot/__snapshots__/new.test.js.snap +++ b/test/snapshot/__snapshots__/new.test.js.snap @@ -2,7 +2,7 @@ exports[`new #348 - byref usage deprecated 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": AssignRef { "kind": "assignref", @@ -12,7 +12,7 @@ Program { "name": "a", }, "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -24,7 +24,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -39,18 +39,20 @@ Program { exports[`new anonymous 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -58,14 +60,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new anonymous class #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -76,7 +78,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -85,12 +87,14 @@ Program { ], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -99,14 +103,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new anonymous class #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -117,7 +121,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -126,13 +130,14 @@ Program { ], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": Name { "kind": "name", "name": "SomeClass", "resolution": "uqn", }, - "implements": Array [ + "implements": [ Name { "kind": "name", "name": "SomeInterface", @@ -142,6 +147,7 @@ Program { "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -150,14 +156,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new anonymous class 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -168,15 +174,17 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -185,25 +193,27 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new anonymous no parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -211,17 +221,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new anonymous with argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -230,12 +240,14 @@ Program { ], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -243,17 +255,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new anonymous with multiple argument 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -272,12 +284,14 @@ Program { ], "kind": "new", "what": Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": true, "isFinal": false, + "isReadonly": false, "kind": "class", "name": null, }, @@ -285,17 +299,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new no parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -306,17 +320,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new parent 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": ParentReference { "kind": "parentreference", @@ -326,17 +340,133 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`new result from function 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "operator": "=", + "right": New { + "arguments": [], + "kind": "new", + "what": Call { + "arguments": [ + String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'d'", + "unicode": false, + "value": "d", + }, + ], + "kind": "call", + "what": Call { + "arguments": [ + String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'c'", + "unicode": false, + "value": "c", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "b", + "resolution": "uqn", + }, + }, + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`new result from function with arguments 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "a", + }, + "operator": "=", + "right": New { + "arguments": [ + String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'e'", + "unicode": false, + "value": "e", + }, + ], + "kind": "new", + "what": Call { + "arguments": [ + String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'d'", + "unicode": false, + "value": "d", + }, + ], + "kind": "call", + "what": Call { + "arguments": [ + String { + "isDoubleQuote": false, + "kind": "string", + "raw": "'c'", + "unicode": false, + "value": "c", + }, + ], + "kind": "call", + "what": Name { + "kind": "name", + "name": "b", + "resolution": "uqn", + }, + }, + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`new self 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": SelfReference { "kind": "selfreference", @@ -346,80 +476,80 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new simple (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", - "name": "\\\\Foo", + "name": "\\Foo", "resolution": "fqn", }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new simple (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", - "name": "Foo\\\\Foo", + "name": "Foo\\Foo", "resolution": "qn", }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new simple (4) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", - "name": "\\\\Foo\\\\Foo", + "name": "\\Foo\\Foo", "resolution": "fqn", }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Name { "kind": "name", @@ -430,17 +560,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new static 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": StaticReference { "kind": "staticreference", @@ -450,28 +580,64 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`new static array 1`] = ` +Program { + "children": [ + Return { + "expr": New { + "arguments": [], + "kind": "new", + "what": OffsetLookup { + "kind": "offsetlookup", + "offset": Variable { + "curly": false, + "kind": "variable", + "name": "map", + }, + "what": StaticLookup { + "kind": "staticlookup", + "offset": Variable { + "curly": false, + "kind": "variable", + "name": "mapping", + }, + "what": SelfReference { + "kind": "selfreference", + "raw": "self", + }, + }, + }, + }, + "kind": "return", + }, + ], + "errors": [], "kind": "program", } `; exports[`new trailing comma 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"constructor\\"", + "raw": ""constructor"", "unicode": false, "value": "constructor", }, String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -486,17 +652,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [], + "arguments": [], "kind": "new", "what": Variable { "curly": false, @@ -507,28 +673,28 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`new with arguments 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": New { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"constructor\\"", + "raw": ""constructor"", "unicode": false, "value": "constructor", }, String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -543,7 +709,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/nowdoc.test.js.snap b/test/snapshot/__snapshots__/nowdoc.test.js.snap index 7c58d4d4d..73ee4fa13 100644 --- a/test/snapshot/__snapshots__/nowdoc.test.js.snap +++ b/test/snapshot/__snapshots__/nowdoc.test.js.snap @@ -2,9 +2,9 @@ exports[`nowdoc Flexible nowdoc syntax: 4 spaces of indentation 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "END", @@ -22,16 +22,16 @@ c", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc Flexible nowdoc syntax: with variables 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "END", @@ -51,16 +51,86 @@ c", "shortForm": false, }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`nowdoc Followed by string interpolation 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "x", + }, + "operator": "=", + "right": Nowdoc { + "kind": "nowdoc", + "label": "NOWDOC", + "raw": "<<<'NOWDOC' + ... + NOWDOC", + "value": "...", + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "y", + }, + "operator": "=", + "right": Encapsed { + "kind": "encapsed", + "raw": ""_$z"", + "type": "string", + "value": [ + EncapsedPart { + "curly": false, + "expression": String { + "isDoubleQuote": false, + "kind": "string", + "raw": "_", + "unicode": false, + "value": "_", + }, + "kind": "encapsedpart", + "syntax": null, + }, + EncapsedPart { + "curly": false, + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "z", + }, + "kind": "encapsedpart", + "syntax": "simple", + }, + ], + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], "kind": "program", } `; exports[`nowdoc empty 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "TEST", @@ -73,19 +143,19 @@ TEST", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc inside call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -116,18 +186,20 @@ EOD "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc inside class 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ ClassConstant { - "constants": Array [ + "attrGroups": [], + "constants": [ Constant { "kind": "constant", "name": Identifier { @@ -144,20 +216,25 @@ FOOBAR", }, }, ], + "final": false, "kind": "classconstant", + "nullable": false, + "type": null, "visibility": "", }, PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "baz", }, "nullable": false, + "readonly": false, "type": null, "value": Nowdoc { "kind": "nowdoc", @@ -177,6 +254,7 @@ FOOBAR", "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -184,21 +262,22 @@ FOOBAR", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc inside function 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Static { "kind": "static", - "variables": Array [ + "variables": [ StaticVariable { "defaultValue": Nowdoc { "kind": "nowdoc", @@ -230,16 +309,16 @@ LABEL", "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc only newline 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "TEST", @@ -253,16 +332,16 @@ TEST", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc simple 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "EOD", @@ -280,16 +359,16 @@ using heredoc syntax.", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc space between <<< and label 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "TEST", @@ -307,16 +386,16 @@ c", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc tab between <<< and label 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "TEST", @@ -334,16 +413,16 @@ c", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc with space between <<< and label 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "EOD", @@ -361,25 +440,25 @@ using heredoc syntax.", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`nowdoc with variables 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "EOT", "raw": "<<<'EOT' -My name is \\"$name\\". I am printing some $foo->foo. +My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': A EOT", - "value": "My name is \\"$name\\". I am printing some $foo->foo. + "value": "My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': A", }, @@ -388,7 +467,7 @@ This should print a capital 'A': A", "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/nullsavepropertylookup.test.js.snap b/test/snapshot/__snapshots__/nullsavepropertylookup.test.js.snap new file mode 100644 index 000000000..76bb3a145 --- /dev/null +++ b/test/snapshot/__snapshots__/nullsavepropertylookup.test.js.snap @@ -0,0 +1,109 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`nullsavepropertylookup call 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "call", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`nullsavepropertylookup multiple 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property_2", + }, + "what": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property_1", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`nullsavepropertylookup simple 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Identifier { + "kind": "identifier", + "name": "property", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`nullsavepropertylookup variable 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": NullSafePropertyLookup { + "kind": "nullsafepropertylookup", + "offset": Variable { + "curly": false, + "kind": "variable", + "name": "property", + }, + "what": Variable { + "curly": false, + "kind": "variable", + "name": "obj", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; diff --git a/test/snapshot/__snapshots__/number.test.js.snap b/test/snapshot/__snapshots__/number.test.js.snap index 3b5dda33f..608a99aad 100644 --- a/test/snapshot/__snapshots__/number.test.js.snap +++ b/test/snapshot/__snapshots__/number.test.js.snap @@ -2,7 +2,7 @@ exports[`Test numbers binary with 2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -24,7 +24,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -46,7 +46,7 @@ Program { exports[`Test numbers exponent empty 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -68,7 +68,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -90,7 +90,7 @@ Program { exports[`Test numbers exponent with letter 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -125,7 +125,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -140,7 +140,7 @@ Program { exports[`Test numbers hexa without hex 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -162,7 +162,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -182,9 +182,49 @@ Program { } `; +exports[`Test numbers multiple points 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "b", + }, + "operator": "=", + "right": Number { + "kind": "number", + "value": "1.0", + }, + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": Number { + "kind": "number", + "value": ".5", + }, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": ";", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '.5' (T_DNUMBER), expecting ';' on line 1", + "token": "'.5' (T_DNUMBER)", + }, + ], + "kind": "program", +} +`; + exports[`Test numbers test common cases 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Number { "kind": "number", @@ -357,14 +397,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test numbers underscore #1 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -386,7 +426,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -408,7 +448,7 @@ Program { exports[`Test numbers underscore #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -430,7 +470,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -452,7 +492,7 @@ Program { exports[`Test numbers underscore #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -485,7 +525,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -507,7 +547,7 @@ Program { exports[`Test numbers underscore #4 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -529,7 +569,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -551,7 +591,7 @@ Program { exports[`Test numbers underscore #5 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -573,7 +613,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", @@ -595,7 +635,7 @@ Program { exports[`Test numbers variant (for coverage) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -630,7 +670,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": ";", "kind": "error", diff --git a/test/snapshot/__snapshots__/offsetlookup.test.js.snap b/test/snapshot/__snapshots__/offsetlookup.test.js.snap index 1f43f2c57..f2de7e5ed 100644 --- a/test/snapshot/__snapshots__/offsetlookup.test.js.snap +++ b/test/snapshot/__snapshots__/offsetlookup.test.js.snap @@ -2,10 +2,10 @@ exports[`offsetlookup call (curly) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": OffsetLookup { "kind": "offsetlookup", @@ -24,17 +24,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": OffsetLookup { "kind": "offsetlookup", @@ -53,14 +53,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup inside propertylookup (curly) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -202,14 +202,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup inside propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -351,21 +351,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup multiple (curly) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"second\\"", + "raw": ""second"", "unicode": false, "value": "second", }, @@ -374,7 +374,7 @@ Program { "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"first\\"", + "raw": ""first"", "unicode": false, "value": "first", }, @@ -388,21 +388,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"second\\"", + "raw": ""second"", "unicode": false, "value": "second", }, @@ -411,7 +411,7 @@ Program { "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"first\\"", + "raw": ""first"", "unicode": false, "value": "first", }, @@ -425,21 +425,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup simple (curly) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"index\\"", + "raw": ""index"", "unicode": false, "value": "index", }, @@ -452,21 +452,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"index\\"", + "raw": ""index"", "unicode": false, "value": "index", }, @@ -479,14 +479,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup variable (curly) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -504,14 +504,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`offsetlookup variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -529,7 +529,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/parentreference.test.js.snap b/test/snapshot/__snapshots__/parentreference.test.js.snap index 8c058bed2..ec202a126 100644 --- a/test/snapshot/__snapshots__/parentreference.test.js.snap +++ b/test/snapshot/__snapshots__/parentreference.test.js.snap @@ -2,17 +2,20 @@ exports[`parentreference argument (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": ParentReference { "kind": "parentreference", "raw": "PARENT", @@ -21,8 +24,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -35,24 +39,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference argument 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": ParentReference { "kind": "parentreference", "raw": "parent", @@ -61,8 +68,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -75,17 +83,17 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -102,14 +110,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference constant 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -125,31 +133,35 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference return type declarations (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -165,31 +177,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference return type declarations 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -205,17 +221,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference uppercase 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -232,14 +248,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`parentreference variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -256,7 +272,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/php5.test.js.snap b/test/snapshot/__snapshots__/php5.test.js.snap index 9c968d8c3..e8fcd25a5 100644 --- a/test/snapshot/__snapshots__/php5.test.js.snap +++ b/test/snapshot/__snapshots__/php5.test.js.snap @@ -2,25 +2,31 @@ exports[`Test syntax parsing without PHP7 support special keywords should fail 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ Method { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": null, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": null, "byref": false, "isAbstract": false, "isFinal": false, + "isReadonly": false, "isStatic": false, "kind": "method", "name": Identifier { @@ -37,6 +43,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -48,7 +55,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": "IDENTIFIER", "kind": "error", @@ -71,7 +78,7 @@ Program { "token": "'list' (T_LIST)", }, Error { - "expected": Array [ + "expected": [ ",", ")", ], @@ -95,7 +102,7 @@ Program { "token": "'list' (T_LIST)", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, @@ -106,7 +113,7 @@ Program { "token": "'list' (T_LIST)", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, @@ -117,7 +124,7 @@ Program { "token": "'('", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, @@ -128,7 +135,7 @@ Program { "token": "')'", }, Error { - "expected": Array [ + "expected": [ 198, 222, 182, diff --git a/test/snapshot/__snapshots__/php73.test.js.snap b/test/snapshot/__snapshots__/php73.test.js.snap index 1cfd229b9..f90e6f427 100644 --- a/test/snapshot/__snapshots__/php73.test.js.snap +++ b/test/snapshot/__snapshots__/php73.test.js.snap @@ -2,12 +2,12 @@ exports[`Test syntax parsing with PHP 73 support https://wiki.php.net/rfc/list_reference_assignment 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -47,7 +47,7 @@ Program { "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -84,14 +84,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test syntax parsing with PHP 73 support https://wiki.php.net/rfc/trailing-comma-function-calls 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -102,7 +102,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -114,7 +114,7 @@ Program { "name": "arrayTwo", }, Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -166,7 +166,7 @@ Program { }, "operator": "=", "right": New { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": false, "kind": "string", @@ -194,7 +194,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": false, "kind": "string", @@ -228,7 +228,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": false, "kind": "string", @@ -255,7 +255,7 @@ Program { }, Unset { "kind": "unset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -270,10 +270,10 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Isset { "kind": "isset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -297,52 +297,62 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test syntax parsing with PHP 73 support https://wiki.php.net/rfc/trailing-comma-function-calls#errors 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "a", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "b", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": null, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -356,7 +366,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ undefined, ], "kind": "call", @@ -370,7 +380,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ String { "isDoubleQuote": false, "kind": "string", @@ -408,7 +418,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ undefined, ], "kind": "call", @@ -449,7 +459,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": 222, "kind": "error", diff --git a/test/snapshot/__snapshots__/post.test.js.snap b/test/snapshot/__snapshots__/post.test.js.snap index c8104fc7a..ad233a369 100644 --- a/test/snapshot/__snapshots__/post.test.js.snap +++ b/test/snapshot/__snapshots__/post.test.js.snap @@ -2,7 +2,7 @@ exports[`post ++ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -16,14 +16,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post ++ and + unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -42,14 +42,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post ++ and - unary (with parens) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -68,14 +68,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post ++ and - unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -93,14 +93,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post ++ and parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -115,14 +115,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post -- 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -136,14 +136,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post -- and + unary (with parens) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -162,14 +162,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post -- and + unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -187,14 +187,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post -- and parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Post { "kind": "post", @@ -209,14 +209,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`post -- and unary - 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -235,7 +235,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/pre.test.js.snap b/test/snapshot/__snapshots__/pre.test.js.snap index 9f6d9b031..aa1a5f8d3 100644 --- a/test/snapshot/__snapshots__/pre.test.js.snap +++ b/test/snapshot/__snapshots__/pre.test.js.snap @@ -2,7 +2,7 @@ exports[`pre ++ 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Pre { "kind": "pre", @@ -16,14 +16,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre ++ and + unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -42,14 +42,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre ++ and - unary (with parens) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -68,14 +68,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre ++ and - unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -93,14 +93,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre ++ and parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Pre { "kind": "pre", @@ -115,14 +115,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre -- 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Pre { "kind": "pre", @@ -136,14 +136,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre -- and + unary (with parens) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -162,14 +162,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre -- and + unary 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -187,14 +187,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre -- and parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Pre { "kind": "pre", @@ -209,14 +209,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`pre -- and unary - 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -235,7 +235,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/print.test.js.snap b/test/snapshot/__snapshots__/print.test.js.snap index a78252d25..3008dfbf8 100644 --- a/test/snapshot/__snapshots__/print.test.js.snap +++ b/test/snapshot/__snapshots__/print.test.js.snap @@ -2,13 +2,13 @@ exports[`print simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Print { "expression": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -17,7 +17,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/property.test.js.snap b/test/snapshot/__snapshots__/property.test.js.snap index 3de2c8f74..59f1edd5f 100644 --- a/test/snapshot/__snapshots__/property.test.js.snap +++ b/test/snapshot/__snapshots__/property.test.js.snap @@ -2,20 +2,23 @@ exports[`property private 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -28,6 +31,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -35,27 +39,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property private with value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -71,6 +78,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -78,27 +86,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property protected 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -111,6 +122,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -118,27 +130,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property protected with value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -154,6 +169,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -161,27 +177,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property public 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -194,6 +213,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -201,27 +221,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property public static 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": true, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -234,6 +257,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -241,27 +265,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property public static with value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": true, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -277,6 +304,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -284,27 +312,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property public with value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -320,6 +351,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -327,27 +359,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property var 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -360,6 +395,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -367,27 +403,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property var with value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -403,6 +442,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -410,30 +450,33 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with array value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -470,6 +513,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -477,27 +521,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with bin value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Bin { "kind": "bin", @@ -527,6 +574,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -534,27 +582,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with bin value 2 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Bin { "kind": "bin", @@ -578,6 +629,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -585,27 +637,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with boolean value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Boolean { "kind": "boolean", @@ -622,6 +677,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -629,27 +685,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with constant value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Name { "kind": "name", @@ -666,6 +725,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -673,32 +733,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with double quotes string value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -712,6 +775,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -719,27 +783,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with heredoc value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Encapsed { "kind": "encapsed", @@ -748,7 +815,7 @@ Program { hello world EOD", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -774,6 +841,7 @@ EOD", "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -781,27 +849,30 @@ EOD", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with nowdoc value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Nowdoc { "kind": "nowdoc", @@ -821,6 +892,7 @@ EOD", "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -828,30 +900,33 @@ EOD", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with short array value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -888,6 +963,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -895,27 +971,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with single quotes string value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": String { "isDoubleQuote": false, @@ -934,6 +1013,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -941,27 +1021,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property with string number value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": Number { "kind": "number", @@ -977,6 +1060,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -984,27 +1068,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`property without value 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "property", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -1017,6 +1104,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -1024,7 +1112,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/propertylookup.test.js.snap b/test/snapshot/__snapshots__/propertylookup.test.js.snap index af0bc6967..30644b74b 100644 --- a/test/snapshot/__snapshots__/propertylookup.test.js.snap +++ b/test/snapshot/__snapshots__/propertylookup.test.js.snap @@ -2,10 +2,10 @@ exports[`propertylookup call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -23,14 +23,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertylookup fix 128 - Don't have curly for propertylookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -68,14 +68,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertylookup multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -99,14 +99,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertylookup simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -123,14 +123,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertylookup variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -148,7 +148,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/propertystatement.test.js.snap b/test/snapshot/__snapshots__/propertystatement.test.js.snap index ef77f39e4..3e3d14d9c 100644 --- a/test/snapshot/__snapshots__/propertystatement.test.js.snap +++ b/test/snapshot/__snapshots__/propertystatement.test.js.snap @@ -2,40 +2,47 @@ exports[`propertystatement multiple (var) 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "dsn", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "username", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "password", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -48,6 +55,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -55,47 +63,54 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertystatement multiple 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "dsn", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "username", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "password", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -108,6 +123,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -115,27 +131,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertystatement simple (var) 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "dsn", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -148,6 +167,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -155,27 +175,30 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`propertystatement simple 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ PropertyStatement { "isStatic": false, "kind": "propertystatement", - "properties": Array [ + "properties": [ Property { + "attrGroups": [], "kind": "property", "name": Identifier { "kind": "identifier", "name": "dsn", }, "nullable": false, + "readonly": false, "type": null, "value": null, }, @@ -188,6 +211,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -195,7 +219,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/return.test.js.snap b/test/snapshot/__snapshots__/return.test.js.snap index a40dff545..4ecdcf07a 100644 --- a/test/snapshot/__snapshots__/return.test.js.snap +++ b/test/snapshot/__snapshots__/return.test.js.snap @@ -2,26 +2,26 @@ exports[`return no expression 1`] = ` Program { - "children": Array [ + "children": [ Return { "expr": null, "kind": "return", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`return should fail when no ';' at end 1`] = ` Program { - "children": Array [ + "children": [ Return { "expr": undefined, "kind": "return", }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -36,19 +36,19 @@ Program { exports[`return simple 1`] = ` Program { - "children": Array [ + "children": [ Return { "expr": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, "kind": "return", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/scalar.test.js.snap b/test/snapshot/__snapshots__/scalar.test.js.snap index 2b43a7895..675598606 100644 --- a/test/snapshot/__snapshots__/scalar.test.js.snap +++ b/test/snapshot/__snapshots__/scalar.test.js.snap @@ -1,8 +1,66 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Test scalar statements implicit octal 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + "operator": "=", + "right": Number { + "kind": "number", + "value": "0123", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test scalar statements php 8.1 explicit octal 1`] = ` +Program { + "children": [ + ExpressionStatement { + "expression": Assign { + "kind": "assign", + "left": Variable { + "curly": false, + "kind": "variable", + "name": "var", + }, + "operator": "=", + "right": Bin { + "kind": "bin", + "left": Number { + "kind": "number", + "value": "0o123", + }, + "right": Number { + "kind": "number", + "value": "0o001_234", + }, + "type": "+", + }, + }, + "kind": "expressionstatement", + }, + ], + "errors": [], + "kind": "program", +} +`; + exports[`Test scalar statements test constants #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -21,14 +79,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test scalar statements test constants #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -54,14 +112,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test scalar statements test constants 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -98,14 +156,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test scalar statements test dereferencable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -128,7 +186,7 @@ Program { "value": "5", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -158,7 +216,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -167,7 +225,7 @@ Program { "name": "foo", }, "what": New { - "arguments": Array [], + "arguments": [], "kind": "new", "parenthesizedExpression": true, "what": Name { @@ -197,7 +255,7 @@ Program { "value": "5", }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "parenthesizedExpression": true, "what": Name { @@ -220,7 +278,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [ + "arguments": [ Number { "kind": "number", "value": "5", @@ -228,22 +286,26 @@ Program { ], "kind": "call", "what": Closure { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "a", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Return { "expr": Bin { "kind": "bin", @@ -269,21 +331,21 @@ Program { "nullable": false, "parenthesizedExpression": true, "type": null, - "uses": Array [], + "uses": [], }, }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test scalar statements test dereferencable_scalar #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -294,7 +356,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -313,14 +375,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test scalar statements test dereferencable_scalar #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -333,7 +395,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"test\\"", + "raw": ""test"", "unicode": false, "value": "test", }, @@ -341,14 +403,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test scalar statements test dereferencable_scalar 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -359,7 +421,7 @@ Program { }, "operator": "=", "right": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -378,7 +440,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/selfreference.test.js.snap b/test/snapshot/__snapshots__/selfreference.test.js.snap index 5aad7363a..6b9940145 100644 --- a/test/snapshot/__snapshots__/selfreference.test.js.snap +++ b/test/snapshot/__snapshots__/selfreference.test.js.snap @@ -2,17 +2,20 @@ exports[`selfreference argument (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": SelfReference { "kind": "selfreference", "raw": "SELF", @@ -21,8 +24,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -35,24 +39,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`selfreference argument 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": SelfReference { "kind": "selfreference", "raw": "self", @@ -61,8 +68,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -75,17 +83,17 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`selfreference call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -102,14 +110,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`selfreference constant 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -125,31 +133,80 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`selfreference return static type declarations 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "arg", + }, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": "foo", + }, + "nullable": false, + "type": TypeReference { + "kind": "typereference", + "name": "static", + "raw": "static", + }, + }, + ], + "errors": [], "kind": "program", } `; exports[`selfreference return type declarations (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -165,31 +222,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`selfreference return type declarations 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -205,17 +266,17 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`selfreference uppercase 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -232,14 +293,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`selfreference variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -256,7 +317,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/silent.test.js.snap b/test/snapshot/__snapshots__/silent.test.js.snap index cfecb2dc5..c201e323d 100644 --- a/test/snapshot/__snapshots__/silent.test.js.snap +++ b/test/snapshot/__snapshots__/silent.test.js.snap @@ -2,11 +2,11 @@ exports[`silent simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Silent { "expr": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -19,7 +19,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/statement.test.js.snap b/test/snapshot/__snapshots__/statement.test.js.snap index 29b34a740..e5440f414 100644 --- a/test/snapshot/__snapshots__/statement.test.js.snap +++ b/test/snapshot/__snapshots__/statement.test.js.snap @@ -2,11 +2,11 @@ exports[`Test statements halt statements test fallback 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [ + "children": [ Halt { "after": " } @@ -42,7 +42,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -57,7 +57,7 @@ Program { exports[`Test statements halt statements test halt statement 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -81,21 +81,21 @@ Program { "kind": "halt", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test statements test declare 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [ + "children": [ Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -139,8 +139,8 @@ Program { "kind": "expressionstatement", }, Declare { - "children": Array [], - "directives": Array [ + "children": [], + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -201,7 +201,7 @@ Program { "kind": "expressionstatement", }, Declare { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -219,7 +219,7 @@ Program { "kind": "expressionstatement", }, ], - "directives": Array [ + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -236,7 +236,7 @@ Program { "mode": "block", }, Declare { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -254,7 +254,7 @@ Program { "kind": "expressionstatement", }, ], - "directives": Array [ + "directives": [ DeclareDirective { "key": Identifier { "kind": "identifier", @@ -264,7 +264,7 @@ Program { "value": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"UTF-8\\"", + "raw": ""UTF-8"", "unicode": false, "value": "UTF-8", }, @@ -290,20 +290,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test statements test global 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Global { - "items": Array [ + "items": [ Variable { "curly": false, "kind": "variable", @@ -330,14 +331,14 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test statements test goto label 1`] = ` Program { - "children": Array [ + "children": [ Label { "kind": "label", "name": Identifier { @@ -365,22 +366,23 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test statements test inner statements 1`] = ` Program { - "children": Array [ + "children": [ If { "alternate": null, "body": Block { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -393,12 +395,14 @@ Program { "type": null, }, Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": true, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -406,12 +410,14 @@ Program { }, }, Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": true, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -419,12 +425,14 @@ Program { }, }, Class { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "implements": null, "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -432,7 +440,7 @@ Program { }, }, Trait { - "body": Array [], + "body": [], "kind": "trait", "name": Identifier { "kind": "identifier", @@ -440,7 +448,8 @@ Program { }, }, Interface { - "body": Array [], + "attrGroups": [], + "body": [], "extends": null, "kind": "interface", "name": Identifier { @@ -460,21 +469,22 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test statements test static 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ Static { "kind": "static", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -508,7 +518,7 @@ Program { }, Static { "kind": "static", - "variables": Array [ + "variables": [ StaticVariable { "defaultValue": Number { "kind": "number", @@ -524,20 +534,20 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test statements test try 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -551,10 +561,10 @@ Program { "kind": "block", }, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -567,13 +577,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -606,7 +616,7 @@ Program { "kind": "variable", "name": "err", }, - "what": Array [ + "what": [ Name { "kind": "name", "name": "FooError", @@ -623,7 +633,7 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/static.test.js.snap b/test/snapshot/__snapshots__/static.test.js.snap index baf5161d2..680d1d484 100644 --- a/test/snapshot/__snapshots__/static.test.js.snap +++ b/test/snapshot/__snapshots__/static.test.js.snap @@ -2,10 +2,10 @@ exports[`static assign 1`] = ` Program { - "children": Array [ + "children": [ Static { "kind": "static", - "variables": Array [ + "variables": [ StaticVariable { "defaultValue": Number { "kind": "number", @@ -21,17 +21,17 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`static multiple 1`] = ` Program { - "children": Array [ + "children": [ Static { "kind": "static", - "variables": Array [ + "variables": [ StaticVariable { "defaultValue": Number { "kind": "number", @@ -71,17 +71,17 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`static simple 1`] = ` Program { - "children": Array [ + "children": [ Static { "kind": "static", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -90,7 +90,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/staticlookup.test.js.snap b/test/snapshot/__snapshots__/staticlookup.test.js.snap index 7b5e1425e..d9f0377bd 100644 --- a/test/snapshot/__snapshots__/staticlookup.test.js.snap +++ b/test/snapshot/__snapshots__/staticlookup.test.js.snap @@ -2,10 +2,10 @@ exports[`staticlookup call (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -23,17 +23,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticlookup call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -51,14 +51,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticlookup multiple (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -84,14 +84,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticlookup multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -117,14 +117,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticlookup simple (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -142,14 +142,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticlookup simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -167,7 +167,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/staticreference.test.js.snap b/test/snapshot/__snapshots__/staticreference.test.js.snap index 8dd63e8c1..e6eab019e 100644 --- a/test/snapshot/__snapshots__/staticreference.test.js.snap +++ b/test/snapshot/__snapshots__/staticreference.test.js.snap @@ -2,10 +2,10 @@ exports[`staticreference call 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -22,14 +22,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticreference constant 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -45,17 +45,17 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticreference uppercase 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -72,14 +72,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`staticreference variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -96,7 +96,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/string.test.js.snap b/test/snapshot/__snapshots__/string.test.js.snap index 5d3d87aa9..3b4f9cc83 100644 --- a/test/snapshot/__snapshots__/string.test.js.snap +++ b/test/snapshot/__snapshots__/string.test.js.snap @@ -54,14 +54,14 @@ Program { exports[`Test strings check infinite on $ using backquotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\`$", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -81,7 +81,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "\`", "kind": "error", @@ -96,14 +96,14 @@ Program { exports[`Test strings check infinite on $ using doublequotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"$", + "raw": ""$", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -123,12 +123,12 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { - "expected": "\\"", + "expected": """, "kind": "error", "line": 1, - "message": "Parse Error : syntax error, expecting '\\"' on line 1", + "message": "Parse Error : syntax error, expecting '"' on line 1", "token": "the end of file (EOF)", }, ], @@ -138,14 +138,14 @@ Program { exports[`Test strings check infinite on $ with arrow 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\` -> $", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -165,7 +165,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "\`", "kind": "error", @@ -180,14 +180,14 @@ Program { exports[`Test strings check infinite on \${ using backquotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\`\${", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": true, "expression": Variable { @@ -205,7 +205,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -234,14 +234,14 @@ Program { exports[`Test strings check infinite on \${ using doublequotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"\${", + "raw": ""\${", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": true, "expression": Variable { @@ -259,7 +259,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -275,10 +275,10 @@ Program { "token": "the end of file (EOF)", }, Error { - "expected": "\\"", + "expected": """, "kind": "error", "line": 1, - "message": "Parse Error : syntax error, expecting '\\"' on line 1", + "message": "Parse Error : syntax error, expecting '"' on line 1", "token": "the end of file (EOF)", }, ], @@ -288,14 +288,14 @@ Program { exports[`Test strings check infinite on \${ with arrow 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\` -> \${", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -325,7 +325,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "EXPR", "kind": "error", @@ -354,14 +354,14 @@ Program { exports[`Test strings check infinite on { using backquotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\`{", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -381,7 +381,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "\`", "kind": "error", @@ -396,14 +396,14 @@ Program { exports[`Test strings check infinite on { using doublequotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"{", + "raw": ""{", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -423,12 +423,12 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { - "expected": "\\"", + "expected": """, "kind": "error", "line": 1, - "message": "Parse Error : syntax error, expecting '\\"' on line 1", + "message": "Parse Error : syntax error, expecting '"' on line 1", "token": "the end of file (EOF)", }, ], @@ -438,14 +438,14 @@ Program { exports[`Test strings check infinite on { with arrow 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\` -> {", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -465,7 +465,7 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { "expected": "\`", "kind": "error", @@ -480,14 +480,14 @@ Program { exports[`Test strings check infinite on {$ using backquotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\`{$", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -505,9 +505,9 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { - "expected": Array [ + "expected": [ "{", "$", 222, @@ -538,14 +538,14 @@ Program { exports[`Test strings check infinite on {$ using doublequotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"{$", + "raw": ""{$", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -563,9 +563,9 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { - "expected": Array [ + "expected": [ "{", "$", 222, @@ -583,10 +583,10 @@ Program { "token": "the end of file (EOF)", }, Error { - "expected": "\\"", + "expected": """, "kind": "error", "line": 1, - "message": "Parse Error : syntax error, expecting '\\"' on line 1", + "message": "Parse Error : syntax error, expecting '"' on line 1", "token": "the end of file (EOF)", }, ], @@ -596,14 +596,14 @@ Program { exports[`Test strings check infinite on {$ with arrow 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "raw": "\` -> {$", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -633,9 +633,9 @@ Program { "shortForm": false, }, ], - "errors": Array [ + "errors": [ Error { - "expected": Array [ + "expected": [ "{", "$", 222, @@ -666,7 +666,7 @@ Program { exports[`Test strings double quotes 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -679,7 +679,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\n\\"", + "raw": ""\\n"", "unicode": false, "value": " ", @@ -699,7 +699,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\r\\"", + "raw": ""\\r"", "unicode": false, "value": " ", @@ -719,7 +719,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\t\\"", + "raw": ""\\t"", "unicode": false, "value": " ", }, @@ -738,7 +738,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\v\\"", + "raw": ""\\v"", "unicode": false, "value": " ", }, @@ -757,7 +757,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\e\\"", + "raw": ""\\e"", "unicode": false, "value": "", }, @@ -776,7 +776,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\f\\"", + "raw": ""\\f"", "unicode": false, "value": " ", }, @@ -795,9 +795,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\\\\\\\"", + "raw": ""\\\\"", "unicode": false, - "value": "\\\\", + "value": "\\", }, }, "kind": "expressionstatement", @@ -814,7 +814,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\$\\"", + "raw": ""\\$"", "unicode": false, "value": "$", }, @@ -833,9 +833,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\\\"\\"", + "raw": ""\\""", "unicode": false, - "value": "\\"", + "value": """, }, }, "kind": "expressionstatement", @@ -852,7 +852,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\141\\"", + "raw": ""\\141"", "unicode": false, "value": "a", }, @@ -871,7 +871,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\7FF\\"", + "raw": ""\\7FF"", "unicode": false, "value": "FF", }, @@ -890,7 +890,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\x61\\"", + "raw": ""\\x61"", "unicode": false, "value": "a", }, @@ -909,7 +909,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\x0Z\\"", + "raw": ""\\x0Z"", "unicode": false, "value": "Z", }, @@ -928,9 +928,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\xZZ\\"", + "raw": ""\\xZZ"", "unicode": false, - "value": "\\\\xZZ", + "value": "\\xZZ", }, }, "kind": "expressionstatement", @@ -947,7 +947,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\u{0061}\\"", + "raw": ""\\u{0061}"", "unicode": false, "value": "a", }, @@ -966,9 +966,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\u{}\\"", + "raw": ""\\u{}"", "unicode": false, - "value": "\\\\u{}", + "value": "\\u{}", }, }, "kind": "expressionstatement", @@ -985,7 +985,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\u{0FFF}\\"", + "raw": ""\\u{0FFF}"", "unicode": false, "value": "࿿", }, @@ -1004,9 +1004,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\u{0ZZZ}\\"", + "raw": ""\\u{0ZZZ}"", "unicode": false, - "value": "\\\\u{0ZZZ}", + "value": "\\u{0ZZZ}", }, }, "kind": "expressionstatement", @@ -1023,7 +1023,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"cat\\\\u{1F639}\\"", + "raw": ""cat\\u{1F639}"", "unicode": false, "value": "cat😹", }, @@ -1042,7 +1042,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\u{D83D}\\\\u{DCA9}\\"", + "raw": ""\\u{D83D}\\u{DCA9}"", "unicode": false, "value": "💩", }, @@ -1061,7 +1061,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"💩\\"", + "raw": ""💩"", "unicode": false, "value": "💩", }, @@ -1080,9 +1080,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\u{ZZZZ}\\\\u{ZZZZ}\\"", + "raw": ""\\u{ZZZZ}\\u{ZZZZ}"", "unicode": false, - "value": "\\\\u{ZZZZ}\\\\u{ZZZZ}", + "value": "\\u{ZZZZ}\\u{ZZZZ}", }, }, "kind": "expressionstatement", @@ -1099,7 +1099,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"🌟\\"", + "raw": ""🌟"", "unicode": false, "value": "🌟", }, @@ -1118,7 +1118,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"'\\"", + "raw": ""'"", "unicode": false, "value": "'", }, @@ -1137,9 +1137,9 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\'\\"", + "raw": ""\\'"", "unicode": false, - "value": "\\\\'", + "value": "\\'", }, }, "kind": "expressionstatement", @@ -1156,31 +1156,31 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\n | \\\\r | \\\\t | \\\\v | \\\\e | \\\\f | \\\\\\\\ | \\\\$ | \\\\\\" | \\\\141 | \\\\x61 | \\\\u{0061}\\"", + "raw": ""\\n | \\r | \\t | \\v | \\e | \\f | \\\\ | \\$ | \\" | \\141 | \\x61 | \\u{0061}"", "unicode": false, "value": " | - | | |  | | \\\\ | $ | \\" | a | a | a", + | | |  | | \\ | $ | " | a | a | a", }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings encapsed variable / curly constant 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"Hello \${ obj }\\"", + "raw": ""Hello \${ obj }"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1214,21 +1214,21 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings encapsed variable / curly varname 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"Hello \${obj}->name !\\"", + "raw": ""Hello \${obj}->name !"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1270,21 +1270,21 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings encapsed variable / offsetlookup 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"\${$parts[$i]}\\\\n\\"", + "raw": ""\${$parts[$i]}\\n"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": true, "expression": Variable { @@ -1312,7 +1312,7 @@ Program { "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "\\\\n", + "raw": "\\n", "unicode": false, "value": "", }, @@ -1326,20 +1326,20 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #101 case 1 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"encapsed {$var}\\"", + "raw": ""encapsed {$var}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1367,20 +1367,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #101 case 2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"encapsed {$arr[0]}\\"", + "raw": ""encapsed {$arr[0]}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1415,20 +1415,20 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #101 case 3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"encapsed \${var}\\"", + "raw": ""encapsed \${var}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1456,14 +1456,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #123 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1477,23 +1477,23 @@ Program { "isDoubleQuote": false, "kind": "string", "raw": "'Avoid converting - chars, but \\\\' or \\\\\\\\ is ok.'", + chars, but \\' or \\\\ is ok.'", "unicode": false, "value": "Avoid converting - chars, but ' or \\\\ is ok.", + chars, but ' or \\ is ok.", }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #124 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1505,9 +1505,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"He drank some $juices[koolaid1] juice.\\"", + "raw": ""He drank some $juices[koolaid1] juice."", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1555,28 +1555,28 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #144 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Encapsed { "kind": "encapsed", - "raw": "\\"encapsed \\\\\\" {$var}\\"", + "raw": ""encapsed \\" {$var}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "encapsed \\\\\\" ", + "raw": "encapsed \\" ", "unicode": false, - "value": "encapsed \\" ", + "value": "encapsed " ", }, "kind": "encapsedpart", "syntax": null, @@ -1596,14 +1596,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #149 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1616,7 +1616,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "b\\"foo\\\\nbar\\"", + "raw": "b"foo\\nbar"", "unicode": true, "value": "foo bar", @@ -1625,14 +1625,14 @@ bar", "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings fix #251 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1644,9 +1644,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"string \${juices['FOO']} string\\"", + "raw": ""string \${juices['FOO']} string"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1697,14 +1697,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings implement #116 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1717,7 +1717,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"foo\\\\nbar\\"", + "raw": ""foo\\nbar"", "unicode": false, "value": "foo bar", @@ -1726,33 +1726,33 @@ bar", "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings single (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings single 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": String { "isDoubleQuote": false, @@ -1764,14 +1764,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings single quotes 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1803,7 +1803,7 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "raw": "'\\\\''", + "raw": "'\\''", "unicode": false, "value": "'", }, @@ -1822,7 +1822,7 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "raw": "'\\\\'\\\\'\\\\''", + "raw": "'\\'\\'\\''", "unicode": false, "value": "'''", }, @@ -1841,7 +1841,7 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "raw": "'\\\\'foo'", + "raw": "'\\'foo'", "unicode": false, "value": "'foo", }, @@ -1860,7 +1860,7 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "raw": "'foo\\\\''", + "raw": "'foo\\''", "unicode": false, "value": "foo'", }, @@ -1879,7 +1879,7 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "raw": "'foo\\\\'foo'", + "raw": "'foo\\'foo'", "unicode": false, "value": "foo'foo", }, @@ -1898,22 +1898,22 @@ Program { "right": String { "isDoubleQuote": false, "kind": "string", - "raw": "'\\\\\\\\\\\\''", + "raw": "'\\\\\\''", "unicode": false, - "value": "\\\\'", + "value": "\\'", }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test backquotes 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1927,7 +1927,7 @@ Program { "kind": "encapsed", "raw": "\`ls $cwd\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -1968,7 +1968,7 @@ Program { "kind": "encapsed", "raw": "\`ls \${$cwd}\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2013,7 +2013,7 @@ Program { "kind": "encapsed", "raw": "\`ls {$cwd}\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2054,7 +2054,7 @@ Program { "kind": "encapsed", "raw": "\`$var\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -2083,7 +2083,7 @@ Program { "kind": "encapsed", "raw": "\`\${var}\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": true, "expression": Variable { @@ -2112,7 +2112,7 @@ Program { "kind": "encapsed", "raw": "\`{$var}\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -2141,7 +2141,7 @@ Program { "kind": "encapsed", "raw": "\`\`", "type": "shell", - "value": Array [], + "value": [], }, }, "kind": "expressionstatement", @@ -2157,17 +2157,17 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\`\\\\\`\`", + "raw": "\`\\\`\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "\\\\\`", + "raw": "\\\`", "unicode": false, - "value": "\\\\\`", + "value": "\\\`", }, "kind": "encapsedpart", "syntax": null, @@ -2190,7 +2190,7 @@ Program { "kind": "encapsed", "raw": "\`{\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2221,7 +2221,7 @@ Program { "kind": "encapsed", "raw": "\`-{\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2252,7 +2252,7 @@ Program { "kind": "encapsed", "raw": "\`-$\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2283,7 +2283,7 @@ Program { "kind": "encapsed", "raw": "\`$\`", "type": "shell", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2302,29 +2302,29 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test binary with double quotes 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "b\\"\\\\colors contains >$colors<\\\\n\\"", + "raw": "b"\\colors contains >$colors<\\n"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "\\\\colors contains >", + "raw": "\\colors contains >", "unicode": false, - "value": "\\\\colors contains >", + "value": "\\colors contains >", }, "kind": "encapsedpart", "syntax": null, @@ -2344,7 +2344,7 @@ Program { "expression": String { "isDoubleQuote": false, "kind": "string", - "raw": "<\\\\n", + "raw": "<\\n", "unicode": false, "value": "<", }, @@ -2358,14 +2358,14 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test double quotes 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2378,7 +2378,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"$\\"", + "raw": ""$"", "unicode": false, "value": "$", }, @@ -2397,7 +2397,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"{\\"", + "raw": ""{"", "unicode": false, "value": "{", }, @@ -2416,7 +2416,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"-$-\\"", + "raw": ""-$-"", "unicode": false, "value": "-$-", }, @@ -2435,7 +2435,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"-{\\"", + "raw": ""-{"", "unicode": false, "value": "-{", }, @@ -2453,9 +2453,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"$b\\"", + "raw": ""$b"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -2482,9 +2482,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"{$b}\\"", + "raw": ""{$b}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": Variable { @@ -2511,9 +2511,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"\${$b}\\"", + "raw": ""\${$b}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": true, "expression": Variable { @@ -2544,9 +2544,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"-$b?\\"", + "raw": ""-$b?"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2597,9 +2597,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"-{$b}\\"", + "raw": ""-{$b}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2638,9 +2638,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"-\${$b}\\"", + "raw": ""-\${$b}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2684,7 +2684,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\"", + "raw": """", "unicode": false, "value": "", }, @@ -2703,24 +2703,24 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"\\\\\\"\\"", + "raw": ""\\""", "unicode": false, - "value": "\\"", + "value": """, }, }, "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test empty nowdoc & heredoc contents 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", "label": "HDOC", @@ -2728,14 +2728,14 @@ Program { HDOC ", "type": "heredoc", - "value": Array [], + "value": [], }, ], "kind": "echo", "shortForm": false, }, Echo { - "expressions": Array [ + "expressions": [ Nowdoc { "kind": "nowdoc", "label": "NDOC", @@ -2749,14 +2749,14 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test encapsed elements 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -2777,7 +2777,7 @@ $test[1] $test->foo EOFX", "type": "heredoc", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": PropertyLookup { @@ -2935,21 +2935,21 @@ EOFX", "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test encapsed variable 1`] = ` Program { - "children": Array [ + "children": [ Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"Hello $obj->name !\\"", + "raw": ""Hello $obj->name !"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -2998,12 +2998,12 @@ Program { "shortForm": false, }, Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"Hello $obj->foo->bar !\\"", + "raw": ""Hello $obj->foo->bar !"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -3052,12 +3052,12 @@ Program { "shortForm": false, }, Echo { - "expressions": Array [ + "expressions": [ Encapsed { "kind": "encapsed", - "raw": "\\"Hello $obj[1]->foo !\\"", + "raw": ""Hello $obj[1]->foo !"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -3106,14 +3106,14 @@ Program { "shortForm": false, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test strings test heredoc end of doc 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -3129,7 +3129,7 @@ Program { "raw": "<<", 1, diff --git a/test/snapshot/__snapshots__/trait.test.js.snap b/test/snapshot/__snapshots__/trait.test.js.snap index 783befbb3..eec7a3c38 100644 --- a/test/snapshot/__snapshots__/trait.test.js.snap +++ b/test/snapshot/__snapshots__/trait.test.js.snap @@ -2,9 +2,9 @@ exports[`trait trait name as identifier 1`] = ` Program { - "children": Array [ + "children": [ Trait { - "body": Array [], + "body": [], "kind": "trait", "name": Identifier { "kind": "identifier", @@ -12,7 +12,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/traitprecedence.test.js.snap b/test/snapshot/__snapshots__/traitprecedence.test.js.snap index e2e53bb17..112fc3282 100644 --- a/test/snapshot/__snapshots__/traitprecedence.test.js.snap +++ b/test/snapshot/__snapshots__/traitprecedence.test.js.snap @@ -2,13 +2,14 @@ exports[`traitprecedence simple 1`] = ` Program { - "children": Array [ + "children": [ Class { - "body": Array [ + "attrGroups": [], + "body": [ TraitUse { - "adaptations": Array [ + "adaptations": [ TraitPrecedence { - "instead": Array [ + "instead": [ Name { "kind": "name", "name": "A", @@ -27,7 +28,7 @@ Program { }, }, TraitPrecedence { - "instead": Array [ + "instead": [ Name { "kind": "name", "name": "B", @@ -47,7 +48,7 @@ Program { }, ], "kind": "traituse", - "traits": Array [ + "traits": [ Name { "kind": "name", "name": "A", @@ -70,6 +71,7 @@ Program { "isAbstract": false, "isAnonymous": false, "isFinal": false, + "isReadonly": false, "kind": "class", "name": Identifier { "kind": "identifier", @@ -77,7 +79,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/try.test.js.snap b/test/snapshot/__snapshots__/try.test.js.snap index 8f0f836b9..b89c6a8fb 100644 --- a/test/snapshot/__snapshots__/try.test.js.snap +++ b/test/snapshot/__snapshots__/try.test.js.snap @@ -2,13 +2,13 @@ exports[`boolean finally 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -22,10 +22,10 @@ Program { "kind": "block", }, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -38,13 +38,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -63,7 +63,7 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", "name": "Exception", @@ -75,21 +75,21 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean fully qualified name #2 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -102,13 +102,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -127,10 +127,10 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", - "name": "\\\\Exception\\\\Foo", + "name": "\\Exception\\Foo", "resolution": "fqn", }, ], @@ -139,21 +139,21 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean fully qualified name 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -166,13 +166,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -191,10 +191,10 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", - "name": "\\\\Exception", + "name": "\\Exception", "resolution": "fqn", }, ], @@ -203,21 +203,21 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean multiple catch #2 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -230,13 +230,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -255,7 +255,7 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", "name": "MyException", @@ -263,17 +263,17 @@ Program { }, Name { "kind": "name", - "name": "Foo\\\\Exception", + "name": "Foo\\Exception", "resolution": "qn", }, Name { "kind": "name", - "name": "\\\\Exception", + "name": "\\Exception", "resolution": "fqn", }, Name { "kind": "name", - "name": "\\\\Exception\\\\Foo", + "name": "\\Exception\\Foo", "resolution": "fqn", }, Name { @@ -287,21 +287,21 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean multiple catch 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -314,13 +314,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -339,7 +339,7 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", "name": "MyException", @@ -356,21 +356,86 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`boolean multiple catch without variable 1`] = ` +Program { + "children": [ + Try { + "always": null, + "body": Block { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "call", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "kind": "block", + }, + "catches": [ + Catch { + "body": Block { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "do_something", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "kind": "block", + }, + "kind": "catch", + "variable": null, + "what": [ + Name { + "kind": "name", + "name": "MyException", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "MyOtherException", + "resolution": "uqn", + }, + ], + }, + ], + "kind": "try", + }, + ], + "errors": [], "kind": "program", } `; exports[`boolean qualified name 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -383,13 +448,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -408,10 +473,10 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", - "name": "Foo\\\\Exception", + "name": "Foo\\Exception", "resolution": "qn", }, ], @@ -420,21 +485,21 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean relative name 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -447,13 +512,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -472,7 +537,7 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ Name { "kind": "name", "name": "Exception", @@ -484,21 +549,21 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`boolean simple 1`] = ` Program { - "children": Array [ + "children": [ Try { "always": null, "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -511,13 +576,13 @@ Program { ], "kind": "block", }, - "catches": Array [ + "catches": [ Catch { "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -536,7 +601,67 @@ Program { "kind": "variable", "name": "e", }, - "what": Array [ + "what": [ + Name { + "kind": "name", + "name": "Exception", + "resolution": "uqn", + }, + ], + }, + ], + "kind": "try", + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`boolean without variable 1`] = ` +Program { + "children": [ + Try { + "always": null, + "body": Block { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "call", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "kind": "block", + }, + "catches": [ + Catch { + "body": Block { + "children": [ + ExpressionStatement { + "expression": Call { + "arguments": [], + "kind": "call", + "what": Name { + "kind": "name", + "name": "do_something", + "resolution": "uqn", + }, + }, + "kind": "expressionstatement", + }, + ], + "kind": "block", + }, + "kind": "catch", + "variable": null, + "what": [ Name { "kind": "name", "name": "Exception", @@ -548,7 +673,7 @@ Program { "kind": "try", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/typereference.test.js.snap b/test/snapshot/__snapshots__/typereference.test.js.snap index 2a23f38d7..2bf7a4023 100644 --- a/test/snapshot/__snapshots__/typereference.test.js.snap +++ b/test/snapshot/__snapshots__/typereference.test.js.snap @@ -2,17 +2,20 @@ exports[`typereference array (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "array", @@ -22,8 +25,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -36,24 +40,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference array (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "array", @@ -63,8 +70,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -77,31 +85,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference array (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -118,31 +130,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference array (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -159,24 +175,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference bool (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "bool", @@ -186,8 +205,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -200,24 +220,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference bool (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "bool", @@ -227,8 +250,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -241,31 +265,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference bool (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -282,31 +310,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference bool (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -323,24 +355,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference callable (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "callable", @@ -350,8 +385,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -364,24 +400,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference callable (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "callable", @@ -391,8 +430,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -405,31 +445,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference callable (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -446,31 +490,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference callable (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -487,35 +535,39 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference class (2) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", - "name": "Foo\\\\Foo", + "name": "Foo\\Foo", "resolution": "qn", }, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -528,31 +580,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference class (3) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -569,31 +625,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference class (4) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -605,29 +665,32 @@ Program { "nullable": false, "type": Name { "kind": "name", - "name": "Foo\\\\Foo", + "name": "Foo\\Foo", "resolution": "qn", }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference class 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": Name { "kind": "name", "name": "Foo", @@ -637,8 +700,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -651,24 +715,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference float (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "float", @@ -678,8 +745,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -692,24 +760,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference float (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "float", @@ -719,8 +790,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -733,31 +805,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference float (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -774,31 +850,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference float (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -815,24 +895,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference int (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "int", @@ -842,8 +925,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -856,24 +940,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference int (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "int", @@ -883,8 +970,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -897,31 +985,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference int (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -938,31 +1030,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference int (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -979,24 +1075,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference iterable (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "iterable", @@ -1006,8 +1105,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1020,24 +1120,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference iterable (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "iterable", @@ -1047,8 +1150,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1061,31 +1165,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference iterable (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1102,31 +1210,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference iterable (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1143,24 +1255,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference object (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "object", @@ -1170,8 +1285,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1184,24 +1300,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference object (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "object", @@ -1211,8 +1330,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1225,31 +1345,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference object (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1266,31 +1390,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference object (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1307,24 +1435,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference string (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "string", @@ -1334,8 +1465,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1348,24 +1480,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference string (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "string", @@ -1375,8 +1510,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1389,31 +1525,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference string (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1430,31 +1570,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference string (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1471,24 +1615,27 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference void (argument) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "void", @@ -1498,8 +1645,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1512,24 +1660,27 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference void (argument) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": TypeReference { "kind": "typereference", "name": "void", @@ -1539,8 +1690,9 @@ Program { "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1553,31 +1705,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference void (return type declarations) (uppercase) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1594,31 +1750,35 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`typereference void (return type declarations) 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [ + "arguments": [ Parameter { + "attrGroups": [], "byref": false, + "flags": 0, "kind": "parameter", "name": Identifier { "kind": "identifier", "name": "arg", }, "nullable": false, + "readonly": false, "type": null, "value": null, "variadic": false, }, ], + "attrGroups": [], "body": Block { - "children": Array [], + "children": [], "kind": "block", }, "byref": false, @@ -1635,7 +1795,7 @@ Program { }, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/unary.test.js.snap b/test/snapshot/__snapshots__/unary.test.js.snap index 6d1e0a92f..8a029bc00 100644 --- a/test/snapshot/__snapshots__/unary.test.js.snap +++ b/test/snapshot/__snapshots__/unary.test.js.snap @@ -2,7 +2,7 @@ exports[`Test unary boolean 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -16,14 +16,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary multiple (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Pre { "kind": "pre", @@ -37,14 +37,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary multiple (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -63,14 +63,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary multiple (4) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -89,14 +89,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary multiple (5) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -126,14 +126,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary multiple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -151,14 +151,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary multiple 2`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -176,14 +176,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary number (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -196,14 +196,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary number (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -216,14 +216,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary number (4) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -236,14 +236,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary number 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -256,14 +256,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -278,14 +278,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -300,14 +300,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (4) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -322,14 +322,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (5) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -344,14 +344,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (6) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -366,14 +366,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (7) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -388,14 +388,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (8) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -410,14 +410,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (9) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -431,14 +431,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens (10) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -452,14 +452,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary parens 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -474,14 +474,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -495,14 +495,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary string (2) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -510,7 +510,7 @@ Program { "what": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -518,14 +518,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary string (3) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -533,7 +533,7 @@ Program { "what": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -541,14 +541,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary string (4) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -556,7 +556,7 @@ Program { "what": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -564,14 +564,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test unary string 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Unary { "kind": "unary", @@ -579,7 +579,7 @@ Program { "what": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"string\\"", + "raw": ""string"", "unicode": false, "value": "string", }, @@ -587,7 +587,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/union.test.js.snap b/test/snapshot/__snapshots__/union.test.js.snap new file mode 100644 index 000000000..0b7b3e73a --- /dev/null +++ b/test/snapshot/__snapshots__/union.test.js.snap @@ -0,0 +1,597 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Test unions intersection mixed with union 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "baz", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [ + Error { + "expected": undefined, + "kind": "error", + "line": 1, + "message": "Unexpect token "|", "|" and "&" can not be mixed on line 1", + "token": undefined, + }, + ], + "kind": "program", +} +`; + +exports[`Test unions intersection with reference 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": true, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions intersection with three types 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "baz", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions intersection with variadic 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": true, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions simple intersection 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": IntersectionType { + "kind": "intersectiontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions simple union 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions union mixed with intersection 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "baz", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [ + Error { + "expected": undefined, + "kind": "error", + "line": 1, + "message": "Unexpect token "&", "|" and "&" can not be mixed on line 1", + "token": undefined, + }, + ], + "kind": "program", +} +`; + +exports[`Test unions union with reference 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": true, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions union with three types 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "baz", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; + +exports[`Test unions union with variadic 1`] = ` +Program { + "children": [ + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": Identifier { + "kind": "identifier", + "name": "test", + }, + "nullable": false, + "readonly": false, + "type": UnionType { + "kind": "uniontype", + "name": null, + "types": [ + Name { + "kind": "name", + "name": "foo", + "resolution": "uqn", + }, + Name { + "kind": "name", + "name": "bar", + "resolution": "uqn", + }, + ], + }, + "value": null, + "variadic": true, + }, + ], + "attrGroups": [], + "body": Block { + "children": [], + "kind": "block", + }, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ], + "errors": [], + "kind": "program", +} +`; diff --git a/test/snapshot/__snapshots__/unset.test.js.snap b/test/snapshot/__snapshots__/unset.test.js.snap index db77298ee..6a4fb6d91 100644 --- a/test/snapshot/__snapshots__/unset.test.js.snap +++ b/test/snapshot/__snapshots__/unset.test.js.snap @@ -2,10 +2,10 @@ exports[`unset multiple 1`] = ` Program { - "children": Array [ + "children": [ Unset { "kind": "unset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -24,17 +24,17 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`unset simple 1`] = ` Program { - "children": Array [ + "children": [ Unset { "kind": "unset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -43,17 +43,17 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`unset trailing comma #2 1`] = ` Program { - "children": Array [ + "children": [ Unset { "kind": "unset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -67,17 +67,17 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`unset trailing comma 1`] = ` Program { - "children": Array [ + "children": [ Unset { "kind": "unset", - "variables": Array [ + "variables": [ Variable { "curly": false, "kind": "variable", @@ -86,7 +86,7 @@ Program { ], }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/usegroup.test.js.snap b/test/snapshot/__snapshots__/usegroup.test.js.snap index 7dd4df868..c7d089fdb 100644 --- a/test/snapshot/__snapshots__/usegroup.test.js.snap +++ b/test/snapshot/__snapshots__/usegroup.test.js.snap @@ -2,22 +2,22 @@ exports[`usegroup multiple 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "Another", }, "kind": "useitem", - "name": "My\\\\Full\\\\Classname", + "name": "My\\Full\\Classname", "type": null, }, UseItem { "alias": null, "kind": "useitem", - "name": "My\\\\Full\\\\NSname", + "name": "My\\Full\\NSname", "type": null, }, ], @@ -26,35 +26,35 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`usegroup multiple 2 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "Another", }, "kind": "useitem", - "name": "My\\\\Full\\\\Classname", + "name": "My\\Full\\Classname", "type": null, }, UseItem { "alias": null, "kind": "useitem", - "name": "My\\\\Full\\\\NSname", + "name": "My\\Full\\NSname", "type": null, }, UseItem { "alias": null, "kind": "useitem", - "name": "\\\\Full\\\\NSname\\\\With\\\\Leading\\\\Backslash", + "name": "\\Full\\NSname\\With\\Leading\\Backslash", "type": null, }, ], @@ -63,16 +63,16 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`usegroup nested 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -96,20 +96,20 @@ Program { }, ], "kind": "usegroup", - "name": "some\\\\my_namespace", + "name": "some\\my_namespace", "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`usegroup nested 2 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -130,20 +130,20 @@ Program { }, ], "kind": "usegroup", - "name": "some\\\\my_namespace", + "name": "some\\my_namespace", "type": "function", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`usegroup nested 3 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -164,27 +164,55 @@ Program { }, ], "kind": "usegroup", - "name": "some\\\\my_namespace", + "name": "some\\my_namespace", "type": "const", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`usegroup nested 4 1`] = ` +Program { + "children": [ + UseGroup { + "items": [ + UseItem { + "alias": null, + "kind": "useitem", + "name": "SubnamespaceOne\\ClassA", + "type": null, + }, + UseItem { + "alias": null, + "kind": "useitem", + "name": "SubnamespaceOne\\ClassB", + "type": null, + }, + ], + "kind": "usegroup", + "name": "Vendor\\Package\\SomeNamespace", + "type": null, + }, + ], + "errors": [], "kind": "program", } `; exports[`usegroup simple 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "Another", }, "kind": "useitem", - "name": "My\\\\Full\\\\Classname", + "name": "My\\Full\\Classname", "type": null, }, ], @@ -193,7 +221,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/useitem.test.js.snap b/test/snapshot/__snapshots__/useitem.test.js.snap index 8184e2bbb..7e6a5b3f8 100644 --- a/test/snapshot/__snapshots__/useitem.test.js.snap +++ b/test/snapshot/__snapshots__/useitem.test.js.snap @@ -2,13 +2,13 @@ exports[`useitem importing a class 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", - "name": "some\\\\my_namespace\\\\ClassC", + "name": "some\\my_namespace\\ClassC", "type": null, }, ], @@ -17,23 +17,23 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem importing a class with type 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "C", }, "kind": "useitem", - "name": "some\\\\my_namespace\\\\ClassC", + "name": "some\\my_namespace\\ClassC", "type": null, }, ], @@ -42,20 +42,20 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem importing a constant 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", - "name": "My\\\\Full\\\\CONSTANT", + "name": "My\\Full\\CONSTANT", "type": null, }, ], @@ -64,23 +64,23 @@ Program { "type": "const", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem importing a constant with type 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "MY_CONST", }, "kind": "useitem", - "name": "My\\\\Full\\\\CONSTANT", + "name": "My\\Full\\CONSTANT", "type": null, }, ], @@ -89,20 +89,20 @@ Program { "type": "const", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem importing a function 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", - "name": "My\\\\Full\\\\functionName", + "name": "My\\Full\\functionName", "type": null, }, ], @@ -111,23 +111,23 @@ Program { "type": "function", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem importing a function with type 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "func", }, "kind": "useitem", - "name": "My\\\\Full\\\\functionName", + "name": "My\\Full\\functionName", "type": null, }, ], @@ -136,20 +136,245 @@ Program { "type": "function", }, ], - "errors": Array [], + "errors": [], + "kind": "program", +} +`; + +exports[`useitem invalid use 1`] = ` +Program { + "children": [ + UseGroup { + "items": [ + UseItem { + "alias": null, + "kind": "useitem", + "name": "", + "type": null, + }, + ], + "kind": "usegroup", + "name": null, + "type": "function", + }, + ExpressionStatement { + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "foo", + }, + "kind": "expressionstatement", + }, + UseGroup { + "items": [ + UseItem { + "alias": null, + "kind": "useitem", + "name": "FOO", + "type": null, + }, + UseItem { + "alias": null, + "kind": "useitem", + "name": "BAR", + "type": null, + }, + ], + "kind": "usegroup", + "name": "", + "type": "const", + }, + UseGroup { + "items": [ + UseItem { + "alias": null, + "kind": "useitem", + "name": "foo", + "type": null, + }, + ], + "kind": "usegroup", + "name": "some", + "type": null, + }, + ExpressionStatement { + "expression": Variable { + "curly": false, + "kind": "variable", + "name": "error", + }, + "kind": "expressionstatement", + }, + ExpressionStatement { + "expression": undefined, + "kind": "expressionstatement", + }, + _Function { + "arguments": [ + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": null, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + Parameter { + "attrGroups": [], + "byref": false, + "flags": 0, + "kind": "parameter", + "name": null, + "nullable": false, + "readonly": false, + "type": null, + "value": null, + "variadic": false, + }, + ], + "attrGroups": [], + "body": null, + "byref": false, + "kind": "function", + "name": Identifier { + "kind": "identifier", + "name": false, + }, + "nullable": false, + "type": null, + }, + ExpressionStatement { + "expression": undefined, + "kind": "expressionstatement", + }, + ], + "errors": [ + Error { + "expected": 105, + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '$foo' (T_VARIABLE), expecting T_STRING on line 1", + "token": "'$foo' (T_VARIABLE)", + }, + Error { + "expected": ";", + "kind": "error", + "line": 1, + "message": "Parse Error : syntax error, unexpected '$foo' (T_VARIABLE), expecting ';' on line 1", + "token": "'$foo' (T_VARIABLE)", + }, + Error { + "expected": "}", + "kind": "error", + "line": 8, + "message": "Parse Error : syntax error, unexpected '$error' (T_VARIABLE), expecting '}' on line 8", + "token": "'$error' (T_VARIABLE)", + }, + Error { + "expected": ";", + "kind": "error", + "line": 8, + "message": "Parse Error : syntax error, unexpected '$error' (T_VARIABLE), expecting ';' on line 8", + "token": "'$error' (T_VARIABLE)", + }, + Error { + "expected": ";", + "kind": "error", + "line": 8, + "message": "Parse Error : syntax error, unexpected ',', expecting ';' on line 8", + "token": "','", + }, + Error { + "expected": "EXPR", + "kind": "error", + "line": 8, + "message": "Parse Error : syntax error, unexpected ',' on line 8", + "token": "','", + }, + Error { + "expected": ";", + "kind": "error", + "line": 9, + "message": "Parse Error : syntax error, unexpected 'function' (T_FUNCTION), expecting ';' on line 9", + "token": "'function' (T_FUNCTION)", + }, + Error { + "expected": "(", + "kind": "error", + "line": 9, + "message": "Parse Error : syntax error, unexpected '$bar' (T_VARIABLE), expecting '(' on line 9", + "token": "'$bar' (T_VARIABLE)", + }, + Error { + "expected": "(", + "kind": "error", + "line": 9, + "message": "Parse Error : syntax error, unexpected ',', expecting '(' on line 9", + "token": "','", + }, + Error { + "expected": 222, + "kind": "error", + "line": 9, + "message": "Parse Error : syntax error, unexpected ',', expecting T_VARIABLE on line 9", + "token": "','", + }, + Error { + "expected": 222, + "kind": "error", + "line": 10, + "message": "Parse Error : syntax error, unexpected '}', expecting T_VARIABLE on line 10", + "token": "'}'", + }, + Error { + "expected": [ + ",", + ")", + ], + "kind": "error", + "line": 10, + "message": "Parse Error : syntax error, unexpected '}' on line 10", + "token": "'}'", + }, + Error { + "expected": ")", + "kind": "error", + "line": 10, + "message": "Parse Error : syntax error, unexpected '}', expecting ')' on line 10", + "token": "'}'", + }, + Error { + "expected": "{", + "kind": "error", + "line": 10, + "message": "Parse Error : syntax error, unexpected '}', expecting '{' on line 10", + "token": "'}'", + }, + Error { + "expected": "EXPR", + "kind": "error", + "line": 10, + "message": "Parse Error : syntax error, unexpected '}' on line 10", + "token": "'}'", + }, + ], "kind": "program", } `; exports[`useitem simple 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", - "name": "My\\\\Full\\\\NSname", + "name": "My\\Full\\NSname", "type": null, }, ], @@ -158,16 +383,16 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem simple 2 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": null, "kind": "useitem", @@ -180,23 +405,23 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`useitem with type 1`] = ` Program { - "children": Array [ + "children": [ UseGroup { - "items": Array [ + "items": [ UseItem { "alias": Identifier { "kind": "identifier", "name": "Another", }, "kind": "useitem", - "name": "My\\\\Full\\\\Classname", + "name": "My\\Full\\Classname", "type": null, }, ], @@ -205,7 +430,7 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/variable.test.js.snap b/test/snapshot/__snapshots__/variable.test.js.snap index d346e27c6..309f8dd3b 100644 --- a/test/snapshot/__snapshots__/variable.test.js.snap +++ b/test/snapshot/__snapshots__/variable.test.js.snap @@ -2,7 +2,7 @@ exports[`Test variables Chained encapsed vars 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -14,9 +14,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"{$a->foo()[$bar[$foo]]}\\"", + "raw": ""{$a->foo()[$bar[$foo]]}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -35,7 +35,7 @@ Program { }, }, "what": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -60,14 +60,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables Check errors should be ? 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -86,9 +86,9 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { - "expected": Array [ + "expected": [ "{", "$", 222, @@ -105,7 +105,7 @@ Program { exports[`Test variables Check errors should fail $foo->bar::! 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -129,9 +129,9 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { - "expected": Array [ + "expected": [ 105, 222, "$", @@ -149,7 +149,7 @@ Program { exports[`Test variables Check errors should fail foo::bar::baz 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -173,7 +173,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -188,7 +188,7 @@ Program { exports[`Test variables Check errors should fail on double static lookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -219,7 +219,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -234,7 +234,7 @@ Program { exports[`Test variables Check errors should fail on property lookup on static lookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -265,7 +265,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [ + "errors": [ Error { "expected": undefined, "kind": "error", @@ -280,10 +280,10 @@ Program { exports[`Test variables Class constants 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -301,7 +301,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -319,7 +319,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -352,7 +352,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": PropertyLookup { "kind": "propertylookup", @@ -387,7 +387,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -400,7 +400,7 @@ Program { "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"baz\\"", + "raw": ""baz"", "unicode": false, "value": "baz", }, @@ -429,14 +429,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables Dynamic variables 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -453,7 +453,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -480,7 +480,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -503,7 +503,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -514,7 +514,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -536,7 +536,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -552,7 +552,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"bar\\"", + "raw": ""bar"", "unicode": false, "value": "bar", }, @@ -560,14 +560,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables Encaps var offset 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -579,9 +579,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"{$a[1]}\\"", + "raw": ""{$a[1]}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -615,9 +615,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"{$a[\\"a\\"]}\\"", + "raw": ""{$a["a"]}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -625,7 +625,7 @@ Program { "offset": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"a\\"", + "raw": ""a"", "unicode": false, "value": "a", }, @@ -654,9 +654,9 @@ Program { "operator": "=", "right": Encapsed { "kind": "encapsed", - "raw": "\\"{$a[$b]}\\"", + "raw": ""{$a[$b]}"", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": OffsetLookup { @@ -681,14 +681,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables Variable chains 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": OffsetLookup { "kind": "offsetlookup", @@ -720,19 +720,19 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables array destructuring 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", "left": List { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -776,14 +776,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables default variables 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -796,7 +796,7 @@ Program { "right": String { "isDoubleQuote": true, "kind": "string", - "raw": "\\"foo\\"", + "raw": ""foo"", "unicode": false, "value": "foo", }, @@ -844,14 +844,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables fix #167 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -862,7 +862,7 @@ Program { }, "operator": "=", "right": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": StaticLookup { "kind": "staticlookup", @@ -896,7 +896,7 @@ Program { }, ExpressionStatement { "expression": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": OffsetLookup { "kind": "offsetlookup", @@ -925,14 +925,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables fix #185 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1099,7 +1099,7 @@ Program { "name": "bar", }, "what": New { - "arguments": Array [], + "arguments": [], "kind": "new", "parenthesizedExpression": true, "what": Name { @@ -1121,7 +1121,7 @@ Program { "name": "wrap", }, "what": Call { - "arguments": Array [ + "arguments": [ PropertyLookup { "kind": "propertylookup", "offset": Identifier { @@ -1146,14 +1146,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables fix 248 - broken ast for \`$$$$$\` 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -1235,14 +1235,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables fix 248 - test curly 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": PropertyLookup { "kind": "propertylookup", @@ -1315,16 +1315,16 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables fix 253 - can't be parsed \`global\` with multiple \`$\` 1`] = ` Program { - "children": Array [ + "children": [ Global { - "items": Array [ + "items": [ Variable { "curly": false, "kind": "variable", @@ -1338,14 +1338,14 @@ Program { "kind": "global", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables simple variable #2 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1368,14 +1368,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables simple variable #3 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1409,14 +1409,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables simple variable #4 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1443,14 +1443,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables simple variable 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -1469,14 +1469,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`Test variables valid offset lookup 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": StaticLookup { "kind": "staticlookup", @@ -1502,7 +1502,7 @@ Program { }, }, "what": Call { - "arguments": Array [ + "arguments": [ Variable { "curly": false, "kind": "variable", @@ -1520,7 +1520,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/yield.test.js.snap b/test/snapshot/__snapshots__/yield.test.js.snap index 6d7330769..826653218 100644 --- a/test/snapshot/__snapshots__/yield.test.js.snap +++ b/test/snapshot/__snapshots__/yield.test.js.snap @@ -2,7 +2,7 @@ exports[`yield assign (key and value) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -30,14 +30,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield assign (parens) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -61,14 +61,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield assign 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Assign { "kind": "assign", @@ -91,25 +91,26 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield expression as generator key 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": Encapsed { "kind": "encapsed", - "raw": "\\"bar {$test}\\" ", + "raw": ""bar {$test}" ", "type": "string", - "value": Array [ + "value": [ EncapsedPart { "curly": false, "expression": String { @@ -155,18 +156,19 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield inside function 1`] = ` Program { - "children": Array [ + "children": [ _Function { - "arguments": Array [], + "arguments": [], + "attrGroups": [], "body": Block { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": null, @@ -192,14 +194,14 @@ Program { "type": null, }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield null 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": null, @@ -209,14 +211,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield simple (key and value) 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": Variable { @@ -234,14 +236,14 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yield simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": Yield { "key": null, @@ -255,7 +257,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/__snapshots__/yieldfrom.test.js.snap b/test/snapshot/__snapshots__/yieldfrom.test.js.snap index ff926c74f..b75e85d8b 100644 --- a/test/snapshot/__snapshots__/yieldfrom.test.js.snap +++ b/test/snapshot/__snapshots__/yieldfrom.test.js.snap @@ -2,12 +2,12 @@ exports[`yieldfrom array 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": YieldFrom { "kind": "yieldfrom", "value": Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -36,21 +36,21 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yieldfrom new 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": YieldFrom { "kind": "yieldfrom", "value": New { - "arguments": Array [ + "arguments": [ Array { - "items": Array [ + "items": [ Entry { "byRef": false, "key": null, @@ -87,19 +87,19 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yieldfrom return 1`] = ` Program { - "children": Array [ + "children": [ Return { "expr": YieldFrom { "kind": "yieldfrom", "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -111,19 +111,19 @@ Program { "kind": "return", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; exports[`yieldfrom simple 1`] = ` Program { - "children": Array [ + "children": [ ExpressionStatement { "expression": YieldFrom { "kind": "yieldfrom", "value": Call { - "arguments": Array [], + "arguments": [], "kind": "call", "what": Name { "kind": "name", @@ -135,7 +135,7 @@ Program { "kind": "expressionstatement", }, ], - "errors": Array [], + "errors": [], "kind": "program", } `; diff --git a/test/snapshot/acid.test.js b/test/snapshot/acid.test.js index 480ccb875..f3bde007b 100644 --- a/test/snapshot/acid.test.js +++ b/test/snapshot/acid.test.js @@ -170,8 +170,8 @@ THE END ... parser: { extractDoc: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/array.test.js b/test/snapshot/array.test.js index 232e1eb5b..a8d498df7 100644 --- a/test/snapshot/array.test.js +++ b/test/snapshot/array.test.js @@ -4,14 +4,14 @@ describe("Array without keys", () => { it("deference array", () => { expect( parser.parseEval( - ["$a = [", '"a", "b"', "]($foo)[$foo->bar()[1]]->foo()"].join("\r") - ) + ["$a = [", '"a", "b"', "]($foo)[$foo->bar()[1]]->foo()"].join("\r"), + ), ).toMatchSnapshot(); }); it("of strings", () => { expect( - parser.parseEval('array("item1", "item2", "item3")') + parser.parseEval('array("item1", "item2", "item3")'), ).toMatchSnapshot(); }); @@ -29,7 +29,7 @@ describe("Array without keys", () => { it("of objects", () => { expect( - parser.parseEval("[new foo(), new stdClass(), new bar()]") + parser.parseEval("[new foo(), new stdClass(), new bar()]"), ).toMatchSnapshot(); }); @@ -40,7 +40,7 @@ describe("Array without keys", () => { array("item1", "item2"), array("item3", "item4"), array("item5", "item6") - )`) + )`), ).toMatchSnapshot(); }); @@ -50,7 +50,7 @@ describe("Array without keys", () => { }); it("test short form / keys", function () { expect( - parser.parseEval('[0 => &$foo, $bar => "foobar"];') + parser.parseEval('[0 => &$foo, $bar => "foobar"];'), ).toMatchSnapshot(); }); }); @@ -106,8 +106,8 @@ describe("Array without keys", () => { it("non empty array", () => { expect( parser.parseEval( - "$var = [true, 1, 1.1, 'test', \"test\", [1, 2, 3], new Foo(), call(), null];" - ) + "$var = [true, 1, 1.1, 'test', \"test\", [1, 2, 3], new Foo(), call(), null];", + ), ).toMatchSnapshot(); }); @@ -121,7 +121,7 @@ $var = array(...$arr1, ...$arr2, 111); $var = [...$arr1, ...$arr1]; $var = [...getArr(), 'c']; $var = [...new ArrayIterator(['a', 'b', 'c'])]; -`) +`), ).toMatchSnapshot(); }); @@ -138,7 +138,7 @@ $var = [...new ArrayIterator(['a', 'b', 'c'])]; expect( parser.parseEval(` $var = [1, 'test', &$var, 'test' => &$var]; -`) +`), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/arrowfunc.test.js b/test/snapshot/arrowfunc.test.js index 91acb4658..1031e0cda 100644 --- a/test/snapshot/arrowfunc.test.js +++ b/test/snapshot/arrowfunc.test.js @@ -18,7 +18,7 @@ describe("arrow function", () => { parser: { version: "7.3", // disable the php 7.4 support }, - }) + }), ).toMatchSnapshot(); }); it("error / fn fails on php7.4", () => { @@ -28,7 +28,7 @@ describe("arrow function", () => { version: "7.4", // enable the php 7.4 support suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); it("error / empty not allowed", () => { @@ -37,7 +37,17 @@ describe("arrow function", () => { parser: { suppressErrors: true, }, - }) + }), + ).toMatchSnapshot(); + }); + it("error / arrow functions before PHP 7.4", () => { + expect( + parser.parseEval(`$fn1 = fn($x) => $x + $y;`, { + parser: { + version: "7.3", + suppressErrors: true, + }, + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/ast.test.js b/test/snapshot/ast.test.js index eab876122..812d6c3cc 100644 --- a/test/snapshot/ast.test.js +++ b/test/snapshot/ast.test.js @@ -29,8 +29,8 @@ describe("Test AST structure", function () { withPositions: true, withSource: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -48,7 +48,7 @@ describe("Test AST structure", function () { }); it("test inline", function () { expect( - parser.parseCode("Hello \n !") + parser.parseCode("Hello \n !"), ).toMatchSnapshot(); }); @@ -56,6 +56,14 @@ describe("Test AST structure", function () { expect(parser.parseCode("\r\n !")).toMatchSnapshot(); }); + it("test invalid namespace separator", function () { + expect( + parser.parseCode("\r\n !", { + parser: { suppressErrors: true }, + }), + ).toMatchSnapshot(); + }); + it("test magics", function () { expect(parser.parseEval("echo __FILE__, __DIR__;")).toMatchSnapshot(); }); @@ -73,7 +81,7 @@ describe("Test AST structure", function () { isset($foo, $bar); unset($var); empty($var); - `) + `), ).toMatchSnapshot(); }); @@ -89,7 +97,7 @@ describe("Test AST structure", function () { parser.parseEval(` die("bye"); exit(-1); - `) + `), ).toMatchSnapshot(); }); @@ -104,7 +112,7 @@ describe("Test AST structure", function () { include_once (PATH . "/file.php"); require "req.php"; require_once "file.php"; - `) + `), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/attributes.test.js b/test/snapshot/attributes.test.js new file mode 100644 index 000000000..843001e80 --- /dev/null +++ b/test/snapshot/attributes.test.js @@ -0,0 +1,318 @@ +const parser = require("../main"); + +describe("Parse Attributes", () => { + it("can parse class attributes", () => { + expect( + parser.parseEval(` + #[Deprecated] + #[replace("use NewClass")] + class DepClass {} + `), + ).toMatchSnapshot(); + }); + it("can parse method attributes", () => { + expect( + parser.parseEval(` + class Test { + #[Pure] + function m() {} + } + `), + ).toMatchSnapshot(); + }); + it("can parse param attributes", () => { + expect( + parser.parseEval(` + function f( + #[Unsigned] + int $n) {} + `), + ).toMatchSnapshot(); + }); + it("can parse params with comments", () => { + expect( + parser.parseEval( + `// Line 1 + #[ Pure ( ) /* Pure */ ] + // Line 3 + #[ + // Try using b + Deprecated + ] + function a(#[ Unsigned ] $a) {} + `, + { + parser: { + extractDoc: true, + }, + }, + ), + ).toMatchSnapshot(); + }); + it("can parse parms with array values", () => { + expect( + parser.parseEval(` + #[List(["a"=>1, 'b' => Test::class, 'c'=>[]])] + function a() {} + `), + ).toMatchSnapshot(); + }); + it("can parse params with argument labels", () => { + expect( + parser.parseEval(` + #[MyAttribute(value: 1234)] + function a() {} + `), + ).toMatchSnapshot(); + }); + it("can parse params with mathematical expressions", () => { + expect( + parser.parseEval( + ` + #[Att1(-20 * (+10 / 5) % 2 + 8 ** 2 - +-2)] + class A {} + `, + { parser: { extractDoc: true } }, + ), + ).toMatchSnapshot(); + }); + it("can parse params with bitwise operations", () => { + expect( + parser.parseEval( + ` + #[Att1(Att1::FOO | Att1::BAR)] + #[Att2(Att2::FOO & Att2::BAR)] + #[Att3(Att3::FOO ^ Att3::BAR)] + #[Att4(~ Att4::BAR)] + #[Att5(Att5::BAR >> 1)] + #[Att6(Att6::BAR << 1)] + class A {} + `, + { parser: { extractDoc: true } }, + ), + ).toMatchSnapshot(); + }); + it("can parse params with logical operations", () => { + expect( + parser.parseEval( + ` + #[Att1(Att1::FOO || Att1::BAR)] + #[Att2(Att2::FOO && Att2::BAR)] + #[Att3(Att3::FOO or Att3::BAR)] + #[Att4(Att4::FOO and Att4::BAR)] + #[Att5(Att5::FOO xor Att5::BAR)] + #[Att6(!Att6::FOO)] + class A {} + `, + { parser: { extractDoc: true } }, + ), + ).toMatchSnapshot(); + }); + it("can parse params with string concatenation", () => { + expect( + parser.parseEval( + ` + #[Att1(Att1::FOO . Att1::BAR)] + #[Att1(Att1::FOO.Att1::BAR)] + #[Att2("a" . "b")] + #[Att2("a"."b")] + #[Att2('a' . "b")] + #[Att2('a'."b")] + #[Att2("a" . 'b')] + #[Att2("a".'b')] + #[Att2('a' . 'b')] + #[Att2('a'.'b')] + #[Att1(Att1::FOO . "b")] + #[Att1(Att1::FOO."b")] + #[Att1(Att1::FOO . 'b')] + #[Att1(Att1::FOO.'b')] + #[Att1("a" . Att1::BAR)] + #[Att1("a".Att1::BAR)] + #[Att1('a' . Att1::BAR)] + #[Att1('a'.Att1::BAR)] + #[Att1(Att1::FOO + .Att1::BAR + )] + #[Att1(Att1::FOO. + Att1::BAR + )] + class A {} + `, + { parser: { extractDoc: true } }, + ), + ).toMatchSnapshot(); + }); + it("can parse params with end characters", () => { + expect( + parser.parseEval(` + #[End(["])}>"])] + class End {} + `), + ).toMatchSnapshot(); + }); + it("can parse multi-line attributes", () => { + expect( + parser.parseEval(` + #[ + One(), + Two(), + Three() + ] + #[Four] + class Multi {} + `), + ).toMatchSnapshot(); + }); + it("can parse anonymous function attributes", () => { + expect( + parser.parseEval(` + $a = #[Pure] fn() => true; + $b = #[A] function() {}; + `), + ).toMatchSnapshot(); + }); + it("can't parse anonymous function attributes in PHP < 8", () => { + expect(() => + parser.parseEval( + ` + $a = #[Pure] fn() => true; + `, + { + parser: { + version: "7.4", + }, + }, + ), + ).toThrow(SyntaxError); + }); + it("can parse class property attributes", () => { + expect( + parser.parseEval(` + class A { + #[B] + public B $b; + #[C] + private C $c; + #[D] + protected $d; + } + `), + ).toMatchSnapshot(); + }); + it("can parse class const attributes", () => { + expect( + parser.parseEval(` + class A { + #[B] + const B = 1; + } + `), + ).toMatchSnapshot(); + }); + it("can parse anon-class attributes", () => { + expect(parser.parseEval(`$a = new #[T] class {};`)).toMatchSnapshot(); + }); + it("can't parse anon-class attributes in PHP < 8", () => { + expect(() => + parser.parseEval(`$a = new #[T] class {};`, { + parser: { + version: "7.4", + }, + }), + ).toThrow(SyntaxError); + }); + it("can parse interface attributes", () => { + expect( + parser.parseEval(` + #[A] + interface b { + #[C] + const D = 0; + #[E] + public function f(); + } + `), + ).toMatchSnapshot(); + }); + it("can parse attributes in inner statements", () => { + expect( + parser.parseEval(` + namespace A { + function b() { + return #[C] fn() => #[Pure] function() {}; + } + }`), + ).toMatchSnapshot(); + }); + it("can parse attributes with namespace", () => { + expect( + parser.parseEval(` + #[\\JetBrains\\PhpStorm\\Pure] + function b() {} + `), + ).toMatchSnapshot(); + }); + + it("doesnt repeat attributes from previous function", () => { + expect( + parser.parseEval(` + class a { + #[Att1] + function b(){} + function c(){} + function d(){} + } + `), + ).toMatchSnapshot(); + }); + + it("parses attributes as comments for PHP < 8", () => { + expect( + parser.parseEval( + ` + #[Att1] + class a { + #[Att2] + function b(){} + } + `, + { + parser: { + version: "7.4", + extractDoc: true, + }, + }, + ), + ).toMatchSnapshot(); + }); + + it("parses this complicated edge case", () => { + expect( + parser.parseEval( + ` + use Symfony\\Component\\Validator\\Constraints as Assert; + + class ValueModel + { + #[ + Assert\\NotBlank(allowNull: false, groups: ['foo']), + Assert\\Length(max: 255, groups: ['foo']), + ] + public ?string $value = null; + }`, + ), + ).toMatchSnapshot(); + }); + + it("doesnt parse attributes for assignments", () => { + expect( + parser.parseEval( + ` + #[Att1] + $a = 1; + `, + { parser: { extractDoc: true } }, + ), + ).toMatchSnapshot(); + }); +}); diff --git a/test/snapshot/bin.test.js b/test/snapshot/bin.test.js index 164cb91f9..b8c7e1df4 100644 --- a/test/snapshot/bin.test.js +++ b/test/snapshot/bin.test.js @@ -96,7 +96,7 @@ describe("bin", () => { }); it("multiple instanceof static", () => { expect( - parser.parseEval("$foo instanceof static && $bar instanceof self;") + parser.parseEval("$foo instanceof static && $bar instanceof self;"), ).toMatchSnapshot(); }); diff --git a/test/snapshot/block.test.js b/test/snapshot/block.test.js index 71d0503cd..43dbe72ef 100644 --- a/test/snapshot/block.test.js +++ b/test/snapshot/block.test.js @@ -39,7 +39,7 @@ describe("block", () => { parser: { extractDoc: true, }, - }) + }), ).toMatchSnapshot(); }); it("check empty php blocks", function () { @@ -58,8 +58,8 @@ SOME HTML OUTPUT parser: { extractDoc: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -76,8 +76,8 @@ SOME HTML OUTPUT parser: { extractDoc: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/break.test.js b/test/snapshot/break.test.js index 3c75c5ad5..d4db2ec99 100644 --- a/test/snapshot/break.test.js +++ b/test/snapshot/break.test.js @@ -24,7 +24,7 @@ describe("break", () => { expect( parser.parseEval("break", { parser: { suppressErrors: true }, - }) + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/byref.test.js b/test/snapshot/byref.test.js index a95f03af5..6a062130a 100644 --- a/test/snapshot/byref.test.js +++ b/test/snapshot/byref.test.js @@ -16,12 +16,12 @@ describe("byref", () => { parser: { version: "5.6", }, - }) + }), ).toMatchSnapshot(); expect(() => { parser.parseEval("$a =& new foo();"); }).toThrow( - "Parse Error : syntax error, unexpected 'new' (T_NEW) on line 1" + "Parse Error : syntax error, unexpected 'new' (T_NEW) on line 1", ); }); it("call result", () => { @@ -41,12 +41,12 @@ describe("byref", () => { }); it("foreach (key/value)", () => { expect( - parser.parseEval("foreach ($arr as $key => &$val) { }") + parser.parseEval("foreach ($arr as $key => &$val) { }"), ).toMatchSnapshot(); }); it("closure", () => { expect( - parser.parseEval("$var = function () use (&$message) { };") + parser.parseEval("$var = function () use (&$message) { };"), ).toMatchSnapshot(); }); // https://github.com/php/php-src/blob/php-7.4.0beta4/Zend/zend_language_parser.y#L1165 @@ -95,12 +95,12 @@ describe("byref", () => { }); it("staticlookup #7", () => { expect( - parser.parseEval("$var = &parent::getElementByPath();") + parser.parseEval("$var = &parent::getElementByPath();"), ).toMatchSnapshot(); }); it("staticlookup #8", () => { expect( - parser.parseEval(" $var = &self::getElementByPath();") + parser.parseEval(" $var = &self::getElementByPath();"), ).toMatchSnapshot(); }); // https://github.com/php/php-src/blob/php-7.4.0beta4/Zend/zend_language_parser.y#L1169 diff --git a/test/snapshot/call.test.js b/test/snapshot/call.test.js index bd500ad45..0ab555383 100644 --- a/test/snapshot/call.test.js +++ b/test/snapshot/call.test.js @@ -49,6 +49,18 @@ describe("Test call", function () { }); expect(ast).toMatchSnapshot(); }); + it("nullsafepropertylookup", function () { + const ast = parser.parseEval("$obj?->call();", { + parser: { debug: false }, + }); + expect(ast).toMatchSnapshot(); + }); + it("nullsafepropertylookup (2)", function () { + const ast = parser.parseEval("$obj?->property?->call();", { + parser: { debug: false }, + }); + expect(ast).toMatchSnapshot(); + }); it("staticlookup", function () { const ast = parser.parseEval("$obj::call();", { parser: { debug: false }, @@ -72,7 +84,7 @@ describe("Test call", function () { "class Foo { function foo() { parent::call(); } }", { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -81,7 +93,7 @@ describe("Test call", function () { "class Foo { function foo() { self::call(); } }", { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -90,7 +102,7 @@ describe("Test call", function () { "class Foo { function foo() { static::call(); } }", { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -165,7 +177,7 @@ describe("Test call", function () { "get_class($obj)::$property::$property::$property;", { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -186,7 +198,7 @@ describe("Test call", function () { "get_class($var)::${$property}::${$property}::${$property};", { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -232,4 +244,72 @@ describe("Test call", function () { }); expect(ast).toMatchSnapshot(); }); + it("named arguments in php 8.0", function () { + const astErr = parser.parseEval(`foo(a: $a);`, { + parser: { + version: "8.0", + debug: false, + }, + }); + expect(astErr).toMatchSnapshot(); + }); + it("named arguments are not supported in php 7.2", function () { + expect(() => + parser.parseEval(`foo(a: $a);`, { + parser: { + version: "7.2", + debug: false, + }, + }), + ).toThrow("PHP 8+ is required to use named arguments"); + }); + it("doesnt confused static methods with named arguments", function () { + const astErr = parser.parseEval(`foo(a::bar());`, { + parser: { + version: "8.0", + debug: false, + }, + }); + expect(astErr).toMatchSnapshot(); + }); + it("keyword as named argument", function () { + const astErr = parser.parseEval(`foo(array: $a);`, { + parser: { + version: "8.0", + debug: false, + }, + }); + expect(astErr).toMatchSnapshot(); + }); + it("mix of unnamed and named arguments", function () { + const astErr = parser.parseEval(`foo(50, num: 100, start_index: 0);`, { + parser: { + version: "8.0", + debug: false, + }, + }); + expect(astErr).toMatchSnapshot(); + }); + it("comments", function () { + const astErr = parser.parseEval( + `foo(array // comment + (100, 0));`, + { + parser: { + extractDoc: true, + debug: false, + }, + }, + ); + expect(astErr).toMatchSnapshot(); + }); + it("handles spread operator at call site", function () { + expect( + parser.parseEval(` + foo(...$bar); + foo($bar, ...$baz); + foo(...$bar, ...$baz); + `), + ).toMatchSnapshot(); + }); }); diff --git a/test/snapshot/class.test.js b/test/snapshot/class.test.js index 138a9e897..ac0d31a0d 100644 --- a/test/snapshot/class.test.js +++ b/test/snapshot/class.test.js @@ -13,7 +13,7 @@ describe("Test classes", function () { $this->fooBaz(); } } - `) + `), ).toMatchSnapshot(); }); @@ -24,7 +24,24 @@ describe("Test classes", function () { public ?int $prop = null; protected static float|string $y; } - `) + `), + ).toMatchSnapshot(); + }); + + it("Implement readonly property", function () { + expect( + parser.parseEval( + ` + class User { + public readonly int $uid; + } + `, + { + parser: { + version: "8.1", + }, + }, + ), ).toMatchSnapshot(); }); @@ -60,7 +77,7 @@ describe("Test classes", function () { * Some informations */ abstract protected function &foo() : bar; - }`) + }`), ).toMatchSnapshot(); }); @@ -95,8 +112,8 @@ describe("Test classes", function () { `, { parser: { extractDoc: true }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -110,8 +127,8 @@ describe("Test classes", function () { }`, { parser: { suppressErrors: true }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -125,10 +142,96 @@ describe("Test classes", function () { $this->constructor = null; self::$constructor = null; } - }`) + }`), ).toMatchSnapshot(); }); + it("Test promoted class properties php 8", function () { + const ast = parser.parseEval( + ` + class __proto__ { + public function constructor(public int $id, private $name, int $c, protected ServerRequestInterface $req) {} + }`, + { + parser: { + version: "8.0", + suppressErrors: true, + }, + }, + ); + expect(ast).toMatchSnapshot(); + }); + + it("Test promoted readonly class properties", function () { + const ast = parser.parseEval( + ` + class Bob { + public function __construct(public readonly int $id) {} + } + class Bob2 { + public function __construct(readonly public int $id) {} + } +`, + { + parser: { + version: "8.1", + }, + }, + ); + expect(ast).toMatchSnapshot(); + }); + + it("Test that readonly method parameters are throwing errors", function () { + const ast = parser.parseEval( + ` + class Bob { + public function foo(public readonly int $id) {} + }`, + { + parser: { + version: "8.1", + suppressErrors: true, + }, + }, + ); + expect(ast).toMatchSnapshot(); + }); + + it("Test promoted nullable properties php 8", function () { + const ast = parser.parseEval( + ` + class __proto__ { + public function constructor(public ?string $maybe, private ?int $opt) {} + }`, + { + parser: { + version: "8.0", + suppressErrors: true, + }, + }, + ); + expect(ast).toMatchSnapshot(); + }); + + describe("readonly class in PHP8.2", function () { + [ + "readonly", + "readonly abstract", + "abstract readonly", + "final readonly", + "readonly final", + ].forEach(function (token) { + it("should support " + token, function () { + expect( + parser.parseEval(` + ${token} class Foo { + } + `), + ).toMatchSnapshot(); + }); + }); + }); + it("empty", function () { expect(parser.parseEval("class Foo {}")).toMatchSnapshot(); }); @@ -141,7 +244,7 @@ describe("Test classes", function () { expect( parser.parseEval(`final abstract class foo {}`, { parser: { suppressErrors: true }, - }) + }), ).toMatchSnapshot(); }); @@ -149,7 +252,57 @@ describe("Test classes", function () { expect( parser.parseEval(`abstract final class foo {}`, { parser: { suppressErrors: true }, - }) + }), + ).toMatchSnapshot(); + }); + + it("8.4 allow new without parenthesis", () => { + const code = `new People()->name();`; + const test_parser = parser.create({ + parser: { + version: "8.4", + }, + }); + expect(test_parser.parseEval(code)).toMatchSnapshot(); + }); + + it("new without parenthesis throw errors in PHP < 8.4", () => { + const code = `new People()->name();`; + expect(() => { + parser.parseEval(code); + }).toThrowErrorMatchingSnapshot(); + }); + + it("knows where a function definiton starts", function () { + const phpCode = ` +class b { + // prettier-ignore + public static function a() {} +} + `; + const ast = parser.parseEval(phpCode, { + ast: { + withPositions: true, + withSource: true, + }, + }); + const funcStart = ast.children[0].body[0].loc.start.offset; + const funcEnd = ast.children[0].body[0].loc.end.offset; + expect(phpCode.substr(funcStart, funcEnd - funcStart)).toEqual( + "public static function a() {}", + ); + expect(ast.children[0].body[0].loc.source).toEqual( + "public static function a()", + ); + }); + + it("handles property types with a leading \\", function () { + expect( + parser.parseEval(` + class Foo { + public \\Bar $baz; + } + `), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/classconstant.test.js b/test/snapshot/classconstant.test.js index aea228c3c..287845a7d 100644 --- a/test/snapshot/classconstant.test.js +++ b/test/snapshot/classconstant.test.js @@ -3,31 +3,76 @@ const parser = require("../main"); describe("classconstant", () => { it("simple", () => { expect( - parser.parseEval('class Foo { const CONSTANT = "Hello world!"; }') + parser.parseEval('class Foo { const CONSTANT = "Hello world!"; }'), ).toMatchSnapshot(); }); + it("simple using 8.3", () => { + expect( + parser.parseEval(`class Foo { const CONSTANT = "Hello world!"; }`, { + parser: { version: 803 }, + }), + ).toMatchSnapshot(); + }); + it("multiple", () => { expect( parser.parseEval( - 'class Foo { const CONSTANT = "Hello world!", OTHER_CONSTANT = "Other hello world!"; }' - ) + 'class Foo { const CONSTANT = "Hello world!", OTHER_CONSTANT = "Other hello world!"; }', + ), ).toMatchSnapshot(); }); + + it("multiple 8.3", () => { + expect( + parser.parseEval( + 'class Foo { const NAME_1 = "Hello world!", NAME_2 = "Other hello world!"; }', + { + parser: { version: 803 }, + }, + ), + ).toMatchSnapshot(); + }); + it("public", () => { expect( - parser.parseEval('class Foo { public const CONSTANT = "Hello world!"; }') + parser.parseEval('class Foo { public const CONSTANT = "Hello world!"; }'), ).toMatchSnapshot(); }); it("protected", () => { expect( parser.parseEval( - 'class Foo { protected const CONSTANT = "Hello world!"; }' - ) + 'class Foo { protected const CONSTANT = "Hello world!"; }', + ), ).toMatchSnapshot(); }); it("private", () => { expect( - parser.parseEval('class Foo { private const CONSTANT = "Hello world!"; }') + parser.parseEval( + 'class Foo { private const CONSTANT = "Hello world!"; }', + ), ).toMatchSnapshot(); }); + it("final", () => { + expect( + parser.parseEval( + 'class Foo { final public const CONSTANT = "Hello world!"; }', + ), + ).toMatchSnapshot(); + }); + it("type hinted (supported)", () => { + expect( + parser.parseEval( + 'class Foo { public const string CONSTANT = "Hello world!"; }', + { parser: { version: 803 } }, + ), + ).toMatchSnapshot(); + }); + it("type hinted (unsupported)", () => { + expect(() => + parser.parseEval( + 'class Foo { public const string CONSTANT = "Hello world!"; }', + { parser: { version: 802 } }, + ), + ).toThrowErrorMatchingSnapshot(); + }); }); diff --git a/test/snapshot/classreference.test.js b/test/snapshot/classreference.test.js index 44d3f4756..c4687e687 100644 --- a/test/snapshot/classreference.test.js +++ b/test/snapshot/classreference.test.js @@ -15,7 +15,7 @@ describe("classreference", function () { }); it("argument type (2)", function () { expect( - parser.parseEval("function foo(Foo\\Foo $arg) {}") + parser.parseEval("function foo(Foo\\Foo $arg) {}"), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/closure.test.js b/test/snapshot/closure.test.js index 9c8500a62..5dfa6395f 100644 --- a/test/snapshot/closure.test.js +++ b/test/snapshot/closure.test.js @@ -3,7 +3,7 @@ const parser = require("../main"); describe("closure", () => { it("simple", () => { expect( - parser.parseEval('$var = function() { echo "something"; };') + parser.parseEval('$var = function() { echo "something"; };'), ).toMatchSnapshot(); }); it("empty", () => { @@ -11,59 +11,59 @@ describe("closure", () => { }); it("argument", () => { expect( - parser.parseEval('$var = function($arg) { echo "something"; };') + parser.parseEval('$var = function($arg) { echo "something"; };'), ).toMatchSnapshot(); }); it("argument by ref", () => { expect( - parser.parseEval('$var = function(&$arg) { echo "something"; };') + parser.parseEval('$var = function(&$arg) { echo "something"; };'), ).toMatchSnapshot(); }); it("arguments", () => { expect( parser.parseEval( - '$var = function($arg, $arg, $arg) { echo "something"; };' - ) + '$var = function($arg, $arg, $arg) { echo "something"; };', + ), ).toMatchSnapshot(); }); it("use", () => { expect( parser.parseEval( - '$var = function() use ($message) { echo "something"; };' - ) + '$var = function() use ($message) { echo "something"; };', + ), ).toMatchSnapshot(); }); it("use multiple", () => { expect( parser.parseEval( - '$var = function() use ($message, $message1, $message2) { echo "something"; };' - ) + '$var = function() use ($message, $message1, $message2) { echo "something"; };', + ), ).toMatchSnapshot(); }); it("use by ref", () => { expect( parser.parseEval( - '$var = function() use (&$message) { echo "something"; };' - ) + '$var = function() use (&$message) { echo "something"; };', + ), ).toMatchSnapshot(); }); it("argument and use", () => { expect( parser.parseEval( - '$var = function($arg) use ($use) { echo "something"; };' - ) + '$var = function($arg) use ($use) { echo "something"; };', + ), ).toMatchSnapshot(); }); it("arguments and uses", () => { expect( parser.parseEval( - '$var = function($arg, $arg, $arg) use ($use, $use, $use) { echo "something"; };' - ) + '$var = function($arg, $arg, $arg) use ($use, $use, $use) { echo "something"; };', + ), ).toMatchSnapshot(); }); it("inside call", () => { expect( - parser.parseEval(`call(function ($arg) { return $arg; });`) + parser.parseEval(`call(function ($arg) { return $arg; });`), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/comment.test.js b/test/snapshot/comment.test.js index 19d0c2cc9..a20ddf4d6 100644 --- a/test/snapshot/comment.test.js +++ b/test/snapshot/comment.test.js @@ -21,8 +21,29 @@ bar() /* inner */ ; withPositions: true, withSource: true, }, - } - ) + }, + ), + ).toMatchSnapshot(); + }); + + it("fix call comments", function () { + expect( + parser.parseEval( + ` +call(array // comment +()); + `, + { + parser: { + extractDoc: true, + // debug: true + }, + ast: { + withPositions: true, + withSource: true, + }, + }, + ), ).toMatchSnapshot(); }); @@ -43,7 +64,7 @@ bar() /* inner */ ; parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -61,7 +82,7 @@ bar() /* inner */ ; extractDoc: true, // debug: true }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -80,7 +101,7 @@ bar() /* inner */ ; extractDoc: true, // debug: true }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -99,7 +120,7 @@ bar() /* inner */ ; extractDoc: true, // debug: true }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -143,7 +164,7 @@ class FooClass extractDoc: true, // debug: true }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -162,7 +183,7 @@ class FooClass extractDoc: true, // debug: true }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -180,7 +201,7 @@ class FooClass parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -201,7 +222,7 @@ class FooClass parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -223,7 +244,7 @@ class FooClass parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -242,7 +263,7 @@ class FooClass parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -271,7 +292,7 @@ class FooClass parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); diff --git a/test/snapshot/constantstatement.test.js b/test/snapshot/constantstatement.test.js index 71dc3a6cc..f7d9718ec 100644 --- a/test/snapshot/constantstatement.test.js +++ b/test/snapshot/constantstatement.test.js @@ -3,14 +3,14 @@ const parser = require("../main"); describe("constantstatement", () => { it("simple", () => { expect( - parser.parseEval('const CONSTANT = "Hello world!";') + parser.parseEval('const CONSTANT = "Hello world!";'), ).toMatchSnapshot(); }); it("multiple", () => { expect( parser.parseEval( - 'const CONSTANT = "Hello world!", OTHER_CONSTANT = "Other hello world!";' - ) + 'const CONSTANT = "Hello world!", OTHER_CONSTANT = "Other hello world!";', + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/continue.test.js b/test/snapshot/continue.test.js index 82626d802..39ea5e648 100644 --- a/test/snapshot/continue.test.js +++ b/test/snapshot/continue.test.js @@ -24,7 +24,7 @@ describe("continue", () => { expect( parser.parseEval("continue", { parser: { suppressErrors: true }, - }) + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/declare.test.js b/test/snapshot/declare.test.js index 24778f096..5c4808532 100644 --- a/test/snapshot/declare.test.js +++ b/test/snapshot/declare.test.js @@ -9,7 +9,7 @@ describe("declare", function () { }); it("encoding", function () { expect( - parser.parseEval("declare(encoding='ISO-8859-1');") + parser.parseEval("declare(encoding='ISO-8859-1');"), ).toMatchSnapshot(); }); it("nested", function () { @@ -17,7 +17,7 @@ describe("declare", function () { }); it("mode short", function () { expect( - parser.parseEval('declare(ticks=1): echo "something"; enddeclare;') + parser.parseEval('declare(ticks=1): echo "something"; enddeclare;'), ).toMatchSnapshot(); }); it("multiple", function () { diff --git a/test/snapshot/encapsed.test.js b/test/snapshot/encapsed.test.js index 4668bdc80..3e95f60e4 100644 --- a/test/snapshot/encapsed.test.js +++ b/test/snapshot/encapsed.test.js @@ -9,17 +9,25 @@ describe("encapsed", function () { ["offsetlookup (2) (simple syntax)", '"string $array[koolaid1] string";'], ["offsetlookup (3) (simple syntax)", '"string $array[0][0] string";'], ["propertylookup (simple syntax)", '"string $obj->property string";'], + [ + "nullsafepropertylookup (simple syntax)", + '"string $obj?->property string";', + ], ["variable with space opening before curly", '"string { $var} string";'], ["variable with before closing curly", '"string {$var } string";'], ["variable (complex syntax)", '"string {$var} string";'], ["propertylookup (complex syntax)", '"string {$obj->property} string";'], + [ + "nullsafepropertylookup (complex syntax)", + '"string {$obj?->property} string";', + ], ["offsetlookup (complex syntax)", '"string {$array["key"]} string";'], ["offsetlookup 2 (complex syntax)", '"string {$array[4][3]} string";'], ["offsetlookup 3 (complex syntax)", '"string {$arr[foo][3]} string";'], ["offsetlookup 4 (complex syntax)", '"string {$arr["foo"][3]} string";'], [ - "propertylookup and offsetlookup (complex syntax)", - '"string {$obj->values[3]->name} string";', + "nullsafepropertylookup and offsetlookup (complex syntax)", + '"string {$obj?->values[3]?->name} string";', ], ["value of the var (complex syntax)", '"string {${$name}} string";'], [ @@ -50,22 +58,42 @@ describe("encapsed", function () { "propertylookup by variable (complex syntax)", '"string {$obj->$var} string";', ], + [ + "nullsafepropertylookup by variable (complex syntax)", + '"string {$obj?->$var} string";', + ], [ "propertylookup by variable (2) (complex syntax)", '"string {$obj->{$array[1]}} string";', ], + [ + "nullsafepropertylookup by variable (2) (complex syntax)", + '"string {$obj?->{$array[1]}} string";', + ], [ "propertylookup with multiple call (complex syntax)", '"string {$obj->call()->call()} string";', ], + [ + "nullsafepropertylookup with multiple call (complex syntax)", + '"string {$obj?->call()?->call()} string";', + ], [ "multiple propertylookup (complex syntax)", '"string {$obj->property->property} string";', ], + [ + "multiple nullsafepropertylookup (complex syntax)", + '"string {$obj?->property?->property} string";', + ], [ "propertylookup with comments (complex syntax)", '"string {$var->foo->bar /* Comment */ } string";', ], + [ + "nullsafepropertylookup with comments (complex syntax)", + '"string {$var?->foo?->bar /* Comment */ } string";', + ], [ "newline before closing curly (complex syntax)", '"string {$var\n} string";', @@ -97,6 +125,7 @@ describe("encapsed", function () { ["curly #3", '"string {$call()} string";'], ["no curly", '"string $$juice string";'], ["propertylookup", '$this->{"set{$type}"};'], + ["nullsafepropertylookup", '$this?->{"set{$type}"};'], ])("%s", function (_, code) { expect(parser.parseEval(code)).toMatchSnapshot(); }); diff --git a/test/snapshot/enum.test.js b/test/snapshot/enum.test.js new file mode 100644 index 000000000..8b3c1a8e8 --- /dev/null +++ b/test/snapshot/enum.test.js @@ -0,0 +1,114 @@ +const parser = require("../main"); + +describe("Test enums", function () { + it("empty", function () { + expect(parser.parseEval("enum Foo {}")).toMatchSnapshot(); + }); + + it("non-empty", function () { + expect( + parser.parseEval(` + enum Suit { + case Hearts; + case Diamonds; + case Clubs; + case Spades; + } + `), + ).toMatchSnapshot(); + }); + + it("may have a backing type", function () { + expect( + parser.parseEval(` + enum Suit: string { + case Hearts = 'H'; + case Diamonds = 'D'; + case Clubs = 'C'; + case Spades = 'S'; + } + `), + ).toMatchSnapshot(); + }); + + it("can alias cases", function () { + expect( + parser.parseEval(` + enum Foo { + case Bar; + public const Baz = self::Bar; + } + `), + ).toMatchSnapshot(); + }); + + it("can implement interfaces", function () { + expect( + parser.parseEval(` + enum Foo implements Bar, Baz {} + `), + ).toMatchSnapshot(); + }); + + it("can use traits", function () { + expect( + parser.parseEval(` + enum Foo { + use Bar, Baz { + Baz::hello insteadof Bar; + Baz::world as earth; + } + use Bax; + } + `), + ).toMatchSnapshot(); + }); + + it("can have functions", function () { + expect( + parser.parseEval(` + enum Foo: int { + case MyCase = 1; + + public function bar(): void {} + + protected static function baz() { + echo self::MyCase->value; + } + } + `), + ).toMatchSnapshot(); + }); + + it("cannot have properties", function () { + expect(() => { + parser.parseEval(` + enum Foo { + public int $bar; + protected $baz; + } + `); + }).toThrowErrorMatchingSnapshot(); + }); + + it("doesn't confuse enums with identifiers", function () { + expect( + parser.parseEval(` + class Enum { function enum () {} } + interface Enum {} + trait Enum {} + function enum() {} + class Enum extends Foo {} + class Enum implements Foo {} + class Enum exTends Foo {} + enum extendsFoo {} + `), + ).toMatchSnapshot(); + }); + + it("can't be parsed with PHP < 8", function () { + expect(() => { + parser.parseEval("enum Foo {}", { parser: { version: "8.0" } }); + }).toThrowErrorMatchingSnapshot(); + }); +}); diff --git a/test/snapshot/expr.test.js b/test/snapshot/expr.test.js index ba5cf8e6b..89dcb2b41 100644 --- a/test/snapshot/expr.test.js +++ b/test/snapshot/expr.test.js @@ -16,7 +16,7 @@ describe("Test expressions", function () { 1 ** 3; 1 << 3; 1 >> 3; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -39,7 +39,7 @@ describe("Test expressions", function () { $a <= $b; $a <=> $b; $a instanceof $b; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -60,7 +60,7 @@ describe("Test expressions", function () { $a ^= $b; $a <<= $b; $a >>= $b; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -71,7 +71,7 @@ describe("Test expressions", function () { $a ?? false; $a > 5 ? true : false; $a ?: false; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -89,7 +89,7 @@ describe("Test expressions", function () { yield from foo(); // keys 0-2 yield 1 => $a; // key 1 } - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -101,7 +101,7 @@ describe("Test expressions", function () { ~$var; !$var; -$var; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -121,7 +121,7 @@ describe("Test expressions", function () { (array)$var; (object)$var; (unset)$var; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -152,7 +152,7 @@ describe("Test expressions", function () { return expr; }, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -163,7 +163,7 @@ describe("Test expressions", function () { exit(1); die(); exit; - ` + `, ); expect(ast).toMatchSnapshot(); }); @@ -180,7 +180,7 @@ describe("Test expressions", function () { ast: { withPositions: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -216,7 +216,7 @@ describe("Test expressions", function () { `, { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -228,8 +228,8 @@ describe("Test expressions", function () { new foo; $a = (new foo)[0]; `, - { parser: { debug: false } } - ) + { parser: { debug: false } }, + ), ).toMatchSnapshot(); }); @@ -246,8 +246,8 @@ describe("Test expressions", function () { new static(); new parent(); `, - { parser: { debug: false } } - ) + { parser: { debug: false } }, + ), ).toMatchSnapshot(); }); @@ -260,8 +260,8 @@ describe("Test expressions", function () { new static(); new parent(); `, - { parser: { debug: false } } - ) + { parser: { debug: false } }, + ), ).toMatchSnapshot(); }); @@ -271,8 +271,8 @@ describe("Test expressions", function () { ` $a = new foo[0]; `, - { parser: { suppressErrors: true } } - ) + { parser: { suppressErrors: true } }, + ), ).toMatchSnapshot(); }); @@ -286,18 +286,18 @@ describe("Test expressions", function () { `, { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); it("chaining calls (derefenceable)", function () { expect( - parser.parseEval(`($a->b)::call()->foo[10]->bar;`) + parser.parseEval(`($a->b)::call()->foo[10]->bar;`), ).toMatchSnapshot(); expect(parser.parseEval(`array(1, 2, 3)[0]->foo;`)).toMatchSnapshot(); expect( - parser.parseEval(`($a++)($foo)->bar{$baz}::foo();`) + parser.parseEval(`($a++)($foo)->bar{$baz}::foo();`), ).toMatchSnapshot(); // expect error : expect( @@ -305,7 +305,7 @@ describe("Test expressions", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); // should pass expect(parser.parseEval(`bar()::foo()::baz();`)).toMatchSnapshot(); diff --git a/test/snapshot/foreach.test.js b/test/snapshot/foreach.test.js index fe3051c51..939f3bfe5 100644 --- a/test/snapshot/foreach.test.js +++ b/test/snapshot/foreach.test.js @@ -7,7 +7,7 @@ describe("foreach", function () { foreach ($array as $var) { echo $a; } - `) + `), ).toMatchSnapshot(); }); @@ -17,7 +17,7 @@ foreach ($array as $var) { foreach ($array as &$var) { echo $a; } - `) + `), ).toMatchSnapshot(); }); @@ -27,7 +27,7 @@ foreach ($array as &$var) { foreach ($array as list($a, $b)) { echo $a; } - `) + `), ).toMatchSnapshot(); }); @@ -37,7 +37,7 @@ foreach ($array as list($a, $b)) { foreach ($array as [$a, $b]) { echo $a; } - `) + `), ).toMatchSnapshot(); }); @@ -47,7 +47,7 @@ foreach ($array as [$a, $b]) { foreach ($array as $v => list($a, $b)) { echo $v; } - `) + `), ).toMatchSnapshot(); }); @@ -57,7 +57,7 @@ foreach ($array as $v => list($a, $b)) { foreach ($array as $v => [$a, $b]) { echo $v; } - `) + `), ).toMatchSnapshot(); }); @@ -67,7 +67,7 @@ foreach ($array as $v => [$a, $b]) { foreach ([...$var, 2, 3, 4] as $value) { print_r($value); } - `) + `), ).toMatchSnapshot(); }); @@ -77,7 +77,7 @@ foreach ([...$var, 2, 3, 4] as $value) { foreach (array(...$var, 2, 3, 4) as $value) { print_r($value); } - `) + `), ).toMatchSnapshot(); }); @@ -87,7 +87,7 @@ foreach (array(...$var, 2, 3, 4) as $value) { foreach ([[...$var], 2, 3, 4] as $value) { print_r($value); } - `) + `), ).toMatchSnapshot(); }); @@ -97,7 +97,7 @@ foreach ([[...$var], 2, 3, 4] as $value) { foreach (array(array(...$var), 2, 3, 4) as $value) { print_r($value); } - `) + `), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/function.test.js b/test/snapshot/function.test.js index 2fa18a1a3..77d58e1df 100644 --- a/test/snapshot/function.test.js +++ b/test/snapshot/function.test.js @@ -9,11 +9,71 @@ describe("Function tests", function () { return true; }; $b = foo(...[1, null, 1, 2, 3]); + `, + ); + expect(ast).toMatchSnapshot(); + }); + + it("test function union types", function () { + const ast = parser.parseEval( + ` + function foo(int|float $a = 1, Foo|Bar $b) : string|int {} + `, + ); + expect(ast).toMatchSnapshot(); + }); + + it("test short function union types", function () { + const ast = parser.parseEval( ` + fn (int|float $a = 1, Foo|Bar $b) : string|int => ""; + `, ); expect(ast).toMatchSnapshot(); }); + it("test function intersection types", function () { + const ast = parser.parseEval( + ` + function foo(int&float $a = 1, Foo&Bar $b) : string&int {} + `, + ); + expect(ast).toMatchSnapshot(); + }); + + it("test short function intersection types", function () { + const ast = parser.parseEval( + ` + fn (int&float $a = 1, Foo&Bar $b) : string&int => ""; + `, + ); + expect(ast).toMatchSnapshot(); + }); + + it("array pass by reference are not confused with intersection", function () { + expect( + parser.parseEval( + ` + function foo(array &$params) { + // inner comment + } + `, + ), + ).toMatchSnapshot(); + }); + + it("spread array pass by reference are not intersection", function () { + expect( + parser.parseEval( + ` + function &foo(array &$params) { + // inner comment + } + `, + ), + ).toMatchSnapshot(); + }); + it("implement #113 : typehint nodes", function () { expect( parser.parseEval( @@ -21,8 +81,8 @@ describe("Function tests", function () { function &foo(int $a = 1, float $b = 1, bool $c = 1, string $d, callable $e, int\\bar $f, ?array &...$params) : ?object { // inner comment } - ` - ) + `, + ), ).toMatchSnapshot(); }); @@ -35,18 +95,27 @@ describe("Function tests", function () { parser: { extractDoc: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); - it("test variadic error", function () { - const astErr = parser.parseEval(`$b = foo(...[1, 2, 3], $a);`, { - parser: { - suppressErrors: true, - }, - }); - expect(astErr).toMatchSnapshot(); + it("test variadic call error", function () { + expect(() => + parser.parseEval(`$b = foo(...[1, 2, 3], $a);`), + ).toThrowErrorMatchingSnapshot(); + }); + + it("test variadic function error 1", function () { + expect(() => + parser.parseEval(`function foo(...$bar, $baz) {}`), + ).toThrowErrorMatchingSnapshot(); + }); + + it("test variadic function error 2", function () { + expect(() => + parser.parseEval(`function foo(...$bar, ...$baz) {}`), + ).toThrowErrorMatchingSnapshot(); }); it("test reserved word for function name error", function () { @@ -73,4 +142,136 @@ describe("Function tests", function () { }); expect(astErr).toMatchSnapshot(); }); + + it("test danging comma in function php 8.0", function () { + const astErr = parser.parseEval( + `function ( + $a, + $b, + $c, + ) {}`, + { + parser: { + version: "8.0", + }, + }, + ); + expect(astErr).toMatchSnapshot(); + }); + + it("test without danging comma in closure use-block php 8.0", function () { + const ast = parser.parseEval("$test = function () use ($one) {}", { + parser: { + version: "8.0", + }, + }); + expect(ast).toMatchSnapshot(); + }); + + it("test danging comma in closure use-block php 8.0", function () { + const ast = parser.parseEval("$test = function () use ($one,) {}", { + parser: { + version: "8.0", + }, + }); + expect(ast).toMatchSnapshot(); + }); + + it("test without danging comma in closure use-block with refs php 8.0", function () { + const ast = parser.parseEval("$test = function () use (&$one) {}", { + parser: { + version: "8.0", + }, + }); + expect(ast).toMatchSnapshot(); + }); + + it("test danging comma in closure use-block with refs php 8.0", function () { + const ast = parser.parseEval("$test = function () use (&$one) {}", { + parser: { + version: "8.0", + }, + }); + expect(ast).toMatchSnapshot(); + }); + + it("test danging comma in closure use-block with multiple php 8.0", function () { + const ast = parser.parseEval("$test = function () use ($one, $two,) {}", { + parser: { + version: "8.0", + }, + }); + expect(ast).toMatchSnapshot(); + }); + + it("test danging comma in closure use-block with multiple/refs php 8.0", function () { + const ast = parser.parseEval( + "$test = function ($one, $two) use ($three, &$four,) {}", + { + parser: { + version: "8.0", + }, + }, + ); + expect(ast).toMatchSnapshot(); + }); + + it("test double danging comma in closure use-block php 8.0", function () { + const astErr = parser.parseEval("$test = function () use ($one, ,) {}", { + parser: { + version: "8.0", + suppressErrors: true, + }, + }); + expect(astErr).toMatchSnapshot(); + }); + + it("Test readonly function properties are only for class constructor", function () { + const ast = parser.parseEval( + ` + function fun(public readonly int $id) {} + `, + { + parser: { + version: "8.1", + suppressErrors: true, + }, + }, + ); + expect(ast).toMatchSnapshot(); + }); + + test("first class callable support", function () { + expect( + parser.parseEval( + ` + $callable = strlen(...); + $callable = $item->doSomething(...); + $callable = $item::doSomething(...); + $callable = Foo::doSomething(...); + `, + { + parser: { + version: "8.1", + }, + }, + ), + ).toMatchSnapshot(); + }); + + test("first class callable support requires PHP 8.1+", function () { + expect( + parser.parseEval( + ` + $callable = strlen(...); + `, + { + parser: { + suppressErrors: true, + version: "8.0", + }, + }, + ), + ).toMatchSnapshot(); + }); }); diff --git a/test/snapshot/graceful.test.js b/test/snapshot/graceful.test.js index 576fbf8d3..a55d2cca9 100644 --- a/test/snapshot/graceful.test.js +++ b/test/snapshot/graceful.test.js @@ -17,8 +17,8 @@ describe("Test graceful mode", function () { "$foo = ", // 3. <-- missing expr "}", // 4. "}", // 5. <-- extra '}' token here - ].join("\n") - ) + ].join("\n"), + ), ).toMatchSnapshot(); }); @@ -35,7 +35,7 @@ describe("Test graceful mode", function () { test.parseEval(` final final interface foo { abstract function func() - `) + `), ).toMatchSnapshot(); }); @@ -44,7 +44,7 @@ describe("Test graceful mode", function () { test.parseEval(` final final class foo { abstract function func() - `) + `), ).toMatchSnapshot(); }); @@ -53,19 +53,19 @@ describe("Test graceful mode", function () { test.parseEval(` final final trait foo { abstract function func() - `) + `), ).toMatchSnapshot(); }); it("interface", function () { expect( - test.parseEval("interface foo implement baz {}") + test.parseEval("interface foo implement baz {}"), ).toMatchSnapshot(); }); it("trait", function () { expect( - test.parseEval("trait foo extends bar implement baz {}") + test.parseEval("trait foo extends bar implement baz {}"), ).toMatchSnapshot(); }); @@ -74,7 +74,7 @@ describe("Test graceful mode", function () { test.parseEval(` $foo->bar($arg, ); $foo = new bar($baz, ,$foo); - `) + `), ).toMatchSnapshot(); }); @@ -83,7 +83,7 @@ describe("Test graceful mode", function () { test.parseEval(` $controller->expects($this->once()) -> - `) + `), ).toMatchSnapshot(); }); diff --git a/test/snapshot/heredoc.test.js b/test/snapshot/heredoc.test.js index 61f41bc37..801949d37 100644 --- a/test/snapshot/heredoc.test.js +++ b/test/snapshot/heredoc.test.js @@ -9,7 +9,7 @@ Example of string spanning multiple lines using heredoc syntax. EOD; - `) + `), ).toMatchSnapshot(); }); @@ -21,7 +21,7 @@ Example of string spanning multiple lines using heredoc syntax. EOD; - `) + `), ).toMatchSnapshot(); }); @@ -33,7 +33,7 @@ Example of string spanning multiple lines using heredoc syntax. EOD; - `) + `), ).toMatchSnapshot(); }); @@ -45,7 +45,7 @@ My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; - `) + `), ).toMatchSnapshot(); }); @@ -56,7 +56,7 @@ var_dump(array(<< list;")).toMatchSnapshot(); }); + + it("test #1003 - null-safe operator with reserved keyword", function () { + expect(parser.parseCode("class;")).toMatchSnapshot(); + }); }); diff --git a/test/snapshot/list.test.js b/test/snapshot/list.test.js index 3f61ae428..44289c621 100644 --- a/test/snapshot/list.test.js +++ b/test/snapshot/list.test.js @@ -18,8 +18,8 @@ describe("Test list expressions", function () { ast: { withPositions: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -37,6 +37,21 @@ describe("Test list expressions", function () { expect(ast).toMatchSnapshot(); }); + it("handles nested shorthand lists (fix #512)", () => { + expect(parser.parseEval("[$a, [$b, $c]] = [1,[2,3]]")).toMatchSnapshot(); + }); + + it("handles comments in nested shorthand lists", () => { + expect( + parser.parseEval( + "[/*a*/$a/*b*/, /*c*/ [/*d*/$b/*e*/, /*f*/$c/*g*/]/*h*/]/*i*/ = [1,[2,3]] /*j*/", + { + parser: { extractDoc: true }, + }, + ), + ).toMatchSnapshot(); + }); + it("list without trailing commas", () => { expect(parser.parseEval("['foo', 'bar'] = $a")).toMatchSnapshot(); }); @@ -67,19 +82,19 @@ describe("Test list expressions", function () { it("array with empty values", () => { expect( - parser.parseEval("[,,,'foo',,, 'bar',,,'baz'] = $a") + parser.parseEval("[,,,'foo',,, 'bar',,,'baz'] = $a"), ).toMatchSnapshot(); }); it("array with empty values #2", () => { expect( - parser.parseEval("[,,,'foo',,, 'bar',,,'baz',] = $a") + parser.parseEval("[,,,'foo',,, 'bar',,,'baz',] = $a"), ).toMatchSnapshot(); }); it("array with empty values #3", () => { expect( - parser.parseEval("[,,,'foo',,, 'bar',,,'baz',,] = $a") + parser.parseEval("[,,,'foo',,, 'bar',,,'baz',,] = $a"), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/location.test.js b/test/snapshot/location.test.js index 030467e40..8759f01cf 100644 --- a/test/snapshot/location.test.js +++ b/test/snapshot/location.test.js @@ -215,7 +215,7 @@ string";`, withPositions: true, withSource: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -226,7 +226,7 @@ string";`, withPositions: true, withSource: true, }, - }) + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/loop.test.js b/test/snapshot/loop.test.js index 4ccb3bb5c..dd9601ecc 100644 --- a/test/snapshot/loop.test.js +++ b/test/snapshot/loop.test.js @@ -8,7 +8,7 @@ describe("Test loops statements (for, while)", function () { while(true) { echo "go"; } - `) + `), ).toMatchSnapshot(); }); @@ -18,7 +18,7 @@ describe("Test loops statements (for, while)", function () { while(true): echo "short"; endwhile; - `) + `), ).toMatchSnapshot(); }); }); @@ -33,8 +33,8 @@ describe("Test loops statements (for, while)", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -52,8 +52,8 @@ describe("Test loops statements (for, while)", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -73,8 +73,8 @@ describe("Test loops statements (for, while)", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); it("fix #122", function () { @@ -87,8 +87,8 @@ describe("Test loops statements (for, while)", function () { `, { parser: { suppressErrors: true }, - } - ) + }, + ), ).toMatchSnapshot(); expect( parser.parseEval( @@ -98,8 +98,8 @@ describe("Test loops statements (for, while)", function () { `, { parser: { suppressErrors: true }, - } - ) + }, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/match.test.js b/test/snapshot/match.test.js new file mode 100644 index 000000000..4ccd0bbbc --- /dev/null +++ b/test/snapshot/match.test.js @@ -0,0 +1,62 @@ +const parser = require("../main"); + +describe("match", () => { + it("can be parsed", () => { + const ast = parser.parseEval(` + $test = match($a) { + true => 'yes', + false => 'no', + default => null + }; + `); + expect(ast).toMatchSnapshot(); + }); + + it("can have lhs, functions", () => { + const ast = parser.parseEval(` + $test = match(true) { + test($a), abc($b) => 'yes', + default => null + }; + `); + expect(ast).toMatchSnapshot(); + }); + + it("can have multiple values", () => { + const ast = parser.parseEval(` + $test = match(trye) { + 0,1,2,3 => run(), + default => null + }; + `); + expect(ast).toMatchSnapshot(); + }); + it("can have hanging comma", () => { + const ast = parser.parseEval(` + $test = match($test) { + true, => 'ok', + false => throw new Exception('Nope'), + }; + `); + expect(ast).toMatchSnapshot(); + }); + it("does not support older php than 8", () => { + expect(() => { + new parser({ parser: { version: 704 } }).parseEval(` + $test = match($test) { + true => 'ok', + false => 'Nope!', + }; + `); + }).toThrow(SyntaxError); + }); + it("can be nested", () => { + const ast = parser.parseEval(` + $v = match(callMe(1,2,3)) { + null => match($err) { 1 => 'Connect', 2 => 'Auth'}, + match($a) {true => 0, false => -1} => 'Ok' + }; + `); + expect(ast).toMatchSnapshot(); + }); +}); diff --git a/test/snapshot/namespace.test.js b/test/snapshot/namespace.test.js index 525d33fb0..b39f1602d 100644 --- a/test/snapshot/namespace.test.js +++ b/test/snapshot/namespace.test.js @@ -5,7 +5,7 @@ describe("Test namespace statements", function () { expect( parser.parseEval(` $obj = new \\Foo(); - `) + `), ).toMatchSnapshot(); }); it("allow trailing comma for grouped namespaces #177", function () { @@ -15,7 +15,7 @@ describe("Test namespace statements", function () { Foo, Bar, Baz, - };`) + };`), ).toMatchSnapshot(); }); it("test single namespace", function () { @@ -43,8 +43,8 @@ describe("Test namespace statements", function () { parser: { debug: false, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -63,8 +63,8 @@ describe("Test namespace statements", function () { parser: { debug: false, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -79,8 +79,36 @@ describe("Test namespace statements", function () { parser: { debug: false, }, - } - ) + }, + ), + ).toMatchSnapshot(); + }); + + it("test keywords", function () { + expect( + parser.parseEval( + ` + namespace\\enum(); + \\foo\\trait\\class(); + use \\foo\\bar\\{ a, b }; + $var = namespace\\bar; + `, + { + parser: { + debug: false, + }, + }, + ), + ).toMatchSnapshot(); + }); + + it("test bare namespace separator", function () { + expect( + parser.parseEval(`\\`, { + parser: { + suppressErrors: true, + }, + }), ).toMatchSnapshot(); }); @@ -95,8 +123,8 @@ describe("Test namespace statements", function () { debug: false, suppressErrors: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -123,8 +151,8 @@ describe("Test namespace statements", function () { debug: false, suppressErrors: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -134,7 +162,7 @@ describe("Test namespace statements", function () { declare(strict_types=1); namespace foo; class bar {} - `) + `), ).toMatchSnapshot(); }); @@ -167,7 +195,7 @@ describe("Test namespace statements", function () { ast: { withPositions: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -180,7 +208,7 @@ describe("Test namespace statements", function () { parser: { extractDoc: true, }, - }) + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/new.test.js b/test/snapshot/new.test.js index 641fa3deb..db340d959 100644 --- a/test/snapshot/new.test.js +++ b/test/snapshot/new.test.js @@ -7,7 +7,7 @@ describe("new", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); it("simple", function () { @@ -39,7 +39,12 @@ describe("new", function () { }); it("anonymous with multiple argument", function () { expect( - parser.parseEval("new class($one, $two, $three) {};") + parser.parseEval("new class($one, $two, $three) {};"), + ).toMatchSnapshot(); + }); + it("static array", () => { + expect( + parser.parseEval("return new self::$mapping[$map]();"), ).toMatchSnapshot(); }); it("parent", function () { @@ -53,12 +58,12 @@ describe("new", function () { }); it("with arguments", function () { expect( - parser.parseEval('new Foo("constructor", "bar");') + parser.parseEval('new Foo("constructor", "bar");'), ).toMatchSnapshot(); }); it("trailing comma", function () { expect( - parser.parseEval('new Foo("constructor", "bar",);') + parser.parseEval('new Foo("constructor", "bar",);'), ).toMatchSnapshot(); }); it("anonymous class", function () { @@ -70,8 +75,14 @@ describe("new", function () { it("anonymous class #3", function () { expect( parser.parseEval( - "$var = new class($var) extends SomeClass implements SomeInterface {};" - ) + "$var = new class($var) extends SomeClass implements SomeInterface {};", + ), ).toMatchSnapshot(); }); + it("result from function", function () { + expect(parser.parseEval("$a = new (b('c')('d'));")).toMatchSnapshot(); + }); + it("result from function with arguments", function () { + expect(parser.parseEval("$a = new (b('c')('d'))('e');")).toMatchSnapshot(); + }); }); diff --git a/test/snapshot/nowdoc.test.js b/test/snapshot/nowdoc.test.js index 984b2404e..4690d23fc 100644 --- a/test/snapshot/nowdoc.test.js +++ b/test/snapshot/nowdoc.test.js @@ -9,7 +9,7 @@ Example of string spanning multiple lines using heredoc syntax. EOD; - `) + `), ).toMatchSnapshot(); }); @@ -21,7 +21,7 @@ Example of string spanning multiple lines using heredoc syntax. EOD; - `) + `), ).toMatchSnapshot(); }); @@ -33,7 +33,7 @@ My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; - `) + `), ).toMatchSnapshot(); }); @@ -44,7 +44,7 @@ var_dump(array(<<<'EOD' foobar! EOD )); - `) + `), ).toMatchSnapshot(); }); @@ -57,7 +57,7 @@ function foo() Nothing in here... LABEL; } - `) + `), ).toMatchSnapshot(); }); @@ -73,7 +73,7 @@ FOOBAR; Property example FOOBAR; } - `) + `), ).toMatchSnapshot(); }); @@ -82,7 +82,7 @@ FOOBAR; parser.parseEval(` echo <<<'TEST' TEST; - `) + `), ).toMatchSnapshot(); }); @@ -92,7 +92,7 @@ TEST; echo <<<'TEST' TEST; - `) + `), ).toMatchSnapshot(); }); @@ -104,7 +104,7 @@ echo <<< 'TEST' b c TEST; - `) + `), ).toMatchSnapshot(); }); @@ -116,7 +116,7 @@ echo <<<\t'TEST' b c TEST; - `) + `), ).toMatchSnapshot(); }); @@ -128,7 +128,7 @@ TEST; b c END; - `) + `), ).toMatchSnapshot(); }); @@ -141,7 +141,19 @@ TEST; b c END; - `) + `), + ).toMatchSnapshot(); + }); + + it("Followed by string interpolation", function () { + expect( + parser.parseEval(` + $x = <<<'NOWDOC' + ... + NOWDOC; + + $y = "_$z"; + `), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/nullsavepropertylookup.test.js b/test/snapshot/nullsavepropertylookup.test.js new file mode 100644 index 000000000..50e82ac32 --- /dev/null +++ b/test/snapshot/nullsavepropertylookup.test.js @@ -0,0 +1,18 @@ +const parser = require("../main"); + +describe("nullsavepropertylookup", function () { + it("simple", function () { + expect(parser.parseEval("$obj?->property;")).toMatchSnapshot(); + }); + it("variable", function () { + expect(parser.parseEval("$obj?->$property;")).toMatchSnapshot(); + }); + it("call", function () { + expect(parser.parseEval("$obj?->call();")).toMatchSnapshot(); + }); + it("multiple", function () { + expect( + parser.parseEval("$obj?->property_1?->property_2;"), + ).toMatchSnapshot(); + }); +}); diff --git a/test/snapshot/number.test.js b/test/snapshot/number.test.js index 0a09b220a..84b6960b0 100644 --- a/test/snapshot/number.test.js +++ b/test/snapshot/number.test.js @@ -15,13 +15,14 @@ describe("Test numbers", function () { $f = 0123; $g = 1.2e3; $h = 7E-10; - `) + `), ).toMatchSnapshot(); }); it.each([ ["hexa without hex", "$a = 0xx;"], ["binary with 2", "$b = 0b2;"], + ["multiple points", "$b = 1.0.5;"], // @fixme : PHP Parse error: Invalid numeric literal in %s // ["octal with 9", "$c = 01239;"], ["exponent with letter", "$d = 7E-a;"], diff --git a/test/snapshot/offsetlookup.test.js b/test/snapshot/offsetlookup.test.js index 64e43dc77..6e65f832c 100644 --- a/test/snapshot/offsetlookup.test.js +++ b/test/snapshot/offsetlookup.test.js @@ -33,7 +33,7 @@ $foo->bzr_['string']; $foo->bzr_[$baz]; $foo->bzr_[$baz->foo]; $foo->bzr_[$var ? 'one' : 'two']; - `) + `), ).toMatchSnapshot(); }); it("inside propertylookup (curly)", function () { @@ -44,7 +44,7 @@ $foo->bzr_{'string'}; $foo->bzr_{$baz}; $foo->bzr_{$baz->foo}; $foo->bzr_{$var ? 'one' : 'two'}; - `) + `), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/php73.test.js b/test/snapshot/php73.test.js index 159d097d3..8bc4d9d54 100644 --- a/test/snapshot/php73.test.js +++ b/test/snapshot/php73.test.js @@ -8,7 +8,7 @@ describe("Test syntax parsing with PHP 73 support", function () { parser: { version: "7.3", }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -44,7 +44,7 @@ describe("Test syntax parsing with PHP 73 support", function () { parser: { version: "7.3", }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -69,7 +69,7 @@ describe("Test syntax parsing with PHP 73 support", function () { version: "7.3", suppressErrors: true, }, - } + }, ); expect(ast).toMatchSnapshot(); }); diff --git a/test/snapshot/property.test.js b/test/snapshot/property.test.js index 44b81cb60..0761a087a 100644 --- a/test/snapshot/property.test.js +++ b/test/snapshot/property.test.js @@ -6,82 +6,82 @@ describe("property", () => { }); it("var with value", () => { expect( - parser.parseEval("class Foo { var $property = 10; }") + parser.parseEval("class Foo { var $property = 10; }"), ).toMatchSnapshot(); }); it("public", () => { expect( - parser.parseEval("class Foo { public $property; }") + parser.parseEval("class Foo { public $property; }"), ).toMatchSnapshot(); }); it("public with value", () => { expect( - parser.parseEval("class Foo { public $property = 10; }") + parser.parseEval("class Foo { public $property = 10; }"), ).toMatchSnapshot(); }); it("protected", () => { expect( - parser.parseEval("class Foo { protected $property; }") + parser.parseEval("class Foo { protected $property; }"), ).toMatchSnapshot(); }); it("protected with value", () => { expect( - parser.parseEval("class Foo { protected $property = 10; }") + parser.parseEval("class Foo { protected $property = 10; }"), ).toMatchSnapshot(); }); it("private", () => { expect( - parser.parseEval("class Foo { private $property; }") + parser.parseEval("class Foo { private $property; }"), ).toMatchSnapshot(); }); it("private with value", () => { expect( - parser.parseEval("class Foo { private $property = 10; }") + parser.parseEval("class Foo { private $property = 10; }"), ).toMatchSnapshot(); }); it("public static", () => { expect( - parser.parseEval("class Foo { public static $property; }") + parser.parseEval("class Foo { public static $property; }"), ).toMatchSnapshot(); }); it("public static with value", () => { expect( - parser.parseEval("class Foo { public static $property = 10; }") + parser.parseEval("class Foo { public static $property = 10; }"), ).toMatchSnapshot(); }); it("without value", () => { expect( - parser.parseEval("class Foo { public $property; }") + parser.parseEval("class Foo { public $property; }"), ).toMatchSnapshot(); }); it("with string number value", () => { expect( - parser.parseEval("class Foo { public $property = 10; }") + parser.parseEval("class Foo { public $property = 10; }"), ).toMatchSnapshot(); }); it("with single quotes string value", () => { expect( - parser.parseEval("class Foo { public $property = 'string'; }") + parser.parseEval("class Foo { public $property = 'string'; }"), ).toMatchSnapshot(); }); it("with double quotes string value", () => { expect( - parser.parseEval('class Foo { public $property = "string"; }') + parser.parseEval('class Foo { public $property = "string"; }'), ).toMatchSnapshot(); }); it("with boolean value", () => { expect( - parser.parseEval("class Foo { public $property = true; }") + parser.parseEval("class Foo { public $property = true; }"), ).toMatchSnapshot(); }); it("with bin value", () => { expect( - parser.parseEval("class Foo { public $property = 'hello ' . 'world'; }") + parser.parseEval("class Foo { public $property = 'hello ' . 'world'; }"), ).toMatchSnapshot(); }); it("with bin value 2", () => { expect( - parser.parseEval("class Foo { public $property = 1 + 2; }") + parser.parseEval("class Foo { public $property = 1 + 2; }"), ).toMatchSnapshot(); }); it("with heredoc value", () => { @@ -92,7 +92,7 @@ class Foo { hello world EOD; } - `) + `), ).toMatchSnapshot(); }); it("with nowdoc value", () => { @@ -103,22 +103,22 @@ class Foo { hello world EOD; } - `) + `), ).toMatchSnapshot(); }); it("with constant value", () => { expect( - parser.parseEval("class Foo { public $property = CONSTANT; }") + parser.parseEval("class Foo { public $property = CONSTANT; }"), ).toMatchSnapshot(); }); it("with array value", () => { expect( - parser.parseEval("class Foo { public $property = array(true, false); }") + parser.parseEval("class Foo { public $property = array(true, false); }"), ).toMatchSnapshot(); }); it("with short array value", () => { expect( - parser.parseEval("class Foo { public $property = [true, false]; }") + parser.parseEval("class Foo { public $property = [true, false]; }"), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/propertystatement.test.js b/test/snapshot/propertystatement.test.js index 41bdc7e64..6c9707a51 100644 --- a/test/snapshot/propertystatement.test.js +++ b/test/snapshot/propertystatement.test.js @@ -9,12 +9,12 @@ describe("propertystatement", () => { }); it("multiple", () => { expect( - parser.parseEval("class Foo { public $dsn, $username, $password; }") + parser.parseEval("class Foo { public $dsn, $username, $password; }"), ).toMatchSnapshot(); }); it("multiple (var)", () => { expect( - parser.parseEval("class Foo { var $dsn, $username, $password; }") + parser.parseEval("class Foo { var $dsn, $username, $password; }"), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/return.test.js b/test/snapshot/return.test.js index c45a0d707..031888e2f 100644 --- a/test/snapshot/return.test.js +++ b/test/snapshot/return.test.js @@ -11,7 +11,7 @@ describe("return", function () { expect( parser.parseEval("return", { parser: { suppressErrors: true }, - }) + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/scalar.test.js b/test/snapshot/scalar.test.js index 844f02aff..edda34a3e 100644 --- a/test/snapshot/scalar.test.js +++ b/test/snapshot/scalar.test.js @@ -17,6 +17,8 @@ describe("Test scalar statements", function () { ["test dereferencable_scalar", "$var = array(1);"], ["test dereferencable_scalar #2", "$var = [1];"], ["test dereferencable_scalar #3", '$var = "test";'], + ["php 8.1 explicit octal", "$var = 0o123 + 0o001_234;"], + ["implicit octal", "$var = 0123;"], ])("%s", function (_, code) { expect(parser.parseEval(code)).toMatchSnapshot(); }); diff --git a/test/snapshot/selfreference.test.js b/test/snapshot/selfreference.test.js index dab062324..cf501c841 100644 --- a/test/snapshot/selfreference.test.js +++ b/test/snapshot/selfreference.test.js @@ -25,4 +25,7 @@ describe("selfreference", function () { it("return type declarations (uppercase)", function () { expect(parser.parseEval("function foo($arg): SELF {}")).toMatchSnapshot(); }); + it("return static type declarations", function () { + expect(parser.parseEval("function foo($arg): static {}")).toMatchSnapshot(); + }); }); diff --git a/test/snapshot/statement.test.js b/test/snapshot/statement.test.js index dfde4ed18..6f4128d90 100644 --- a/test/snapshot/statement.test.js +++ b/test/snapshot/statement.test.js @@ -7,7 +7,7 @@ describe("Test statements", function () { start: $i++; goto start; - `) + `), ).toMatchSnapshot(); }); @@ -17,7 +17,7 @@ describe("Test statements", function () { function foo() { global $a, $b; } - `) + `), ).toMatchSnapshot(); }); @@ -32,8 +32,8 @@ describe("Test statements", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -58,8 +58,8 @@ describe("Test statements", function () { `, { parser: { suppressErrors: true }, - } - ) + }, + ), ).toMatchSnapshot(); }); }); @@ -75,8 +75,8 @@ describe("Test statements", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -98,8 +98,8 @@ describe("Test statements", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -118,8 +118,8 @@ describe("Test statements", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -138,8 +138,8 @@ describe("Test statements", function () { `, { parser: { debug: false }, - } - ) + }, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/static.test.js b/test/snapshot/static.test.js index f3cd1c3eb..553954444 100644 --- a/test/snapshot/static.test.js +++ b/test/snapshot/static.test.js @@ -9,7 +9,7 @@ describe("static", function () { }); it("multiple", function () { expect( - parser.parseEval("static $foo = 1, $bar = 2, $baz = 3;") + parser.parseEval("static $foo = 1, $bar = 2, $baz = 3;"), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/string.test.js b/test/snapshot/string.test.js index 8b981c74e..20d876177 100644 --- a/test/snapshot/string.test.js +++ b/test/snapshot/string.test.js @@ -3,7 +3,7 @@ const parser = require("../main"); describe("Test strings", function () { it("fix #251", function () { expect( - parser.parseEval("$var = \"string ${juices['FOO']} string\";") + parser.parseEval("$var = \"string ${juices['FOO']} string\";"), ).toMatchSnapshot(); }); @@ -27,15 +27,15 @@ describe("Test strings", function () { it("fix #124", function () { expect( - parser.parseEval('$string = "He drank some $juices[koolaid1] juice.";') + parser.parseEval('$string = "He drank some $juices[koolaid1] juice.";'), ).toMatchSnapshot(); }); it("fix #123", function () { expect( parser.parseEval( - "$string = 'Avoid converting \n chars, but \\' or \\\\ is ok.';" - ) + "$string = 'Avoid converting \n chars, but \\' or \\\\ is ok.';", + ), ).toMatchSnapshot(); }); @@ -49,7 +49,7 @@ describe("Test strings", function () { it("test binary with double quotes", function () { expect( - parser.parseEval(`echo b"\\colors contains >$colors<\\n";`) + parser.parseEval(`echo b"\\colors contains >$colors<\\n";`), ).toMatchSnapshot(); }); @@ -59,7 +59,7 @@ describe("Test strings", function () { parser.parseEval(`echo "$`, { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -68,7 +68,7 @@ describe("Test strings", function () { parser.parseEval("echo `$", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -77,7 +77,7 @@ describe("Test strings", function () { parser.parseEval("echo ` -> $", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); }); @@ -88,7 +88,7 @@ describe("Test strings", function () { parser.parseEval(`echo "{`, { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -97,7 +97,7 @@ describe("Test strings", function () { parser.parseEval("echo `{", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -106,7 +106,7 @@ describe("Test strings", function () { parser.parseEval("echo ` -> {", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); }); @@ -117,7 +117,7 @@ describe("Test strings", function () { parser.parseEval('echo "${', { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -126,7 +126,7 @@ describe("Test strings", function () { parser.parseEval("echo `${", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -135,7 +135,7 @@ describe("Test strings", function () { parser.parseEval("echo ` -> ${", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); }); @@ -146,7 +146,7 @@ describe("Test strings", function () { parser.parseEval('echo "{$', { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -155,7 +155,7 @@ describe("Test strings", function () { parser.parseEval("echo `{$", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); @@ -164,14 +164,14 @@ describe("Test strings", function () { parser.parseEval("echo ` -> {$", { parser: { suppressErrors: true, debug: false }, lexer: { debug: false }, - }) + }), ).toMatchSnapshot(); }); }); it.skip("binary cast", function () { expect( - parser.parseEval(`echo (binary)"\\colors[1] contains >$colors[1]<\\n";`) + parser.parseEval(`echo (binary)"\\colors[1] contains >$colors[1]<\\n";`), ).toMatchSnapshot(); }); @@ -181,7 +181,7 @@ describe("Test strings", function () { echo "Hello $obj->name !"; echo "Hello $obj->foo->bar !"; echo "Hello $obj[1]->foo !"; - `) + `), ).toMatchSnapshot(); }); @@ -221,8 +221,8 @@ describe("Test strings", function () { parser: { debug: false, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -260,8 +260,8 @@ describe("Test strings", function () { parser: { debug: false, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -271,7 +271,7 @@ describe("Test strings", function () { parser: { debug: false, }, - }) + }), ).toMatchSnapshot(); }); @@ -283,7 +283,7 @@ describe("Test strings", function () { \\$catalogue%s->addFallbackCatalogue(\\$catalogue%s); EOF2 ) - `) + `), ).toMatchSnapshot(); }); @@ -302,8 +302,8 @@ describe("Test strings", function () { parser: { suppressErrors: true, }, - } - ) + }, + ), ).toMatchSnapshot(); }); @@ -313,7 +313,7 @@ describe("Test strings", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -323,7 +323,7 @@ describe("Test strings", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -343,8 +343,8 @@ describe("Test strings", function () { "$a = `-{`;", "$a = `-$`;", "$a = `$`;", - ].join("\r") - ) + ].join("\r"), + ), ).toMatchSnapshot(); }); @@ -364,7 +364,7 @@ $var = '\\'foo'; $var = 'foo\\''; $var = 'foo\\'foo'; $var = '\\\\\\''; -`) +`), ).toMatchSnapshot(); }); it("double quotes", function () { @@ -396,7 +396,7 @@ $var = "🌟"; $var = "'"; $var = "\\'"; $var = "\\n | \\r | \\t | \\v | \\e | \\f | \\\\ | \\$ | \\" | \\141 | \\x61 | \\u{0061}"; -`) +`), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/switch.test.js b/test/snapshot/switch.test.js index 44904283f..b716c4ca4 100644 --- a/test/snapshot/switch.test.js +++ b/test/snapshot/switch.test.js @@ -33,154 +33,154 @@ describe("switch statements", function () { it("colon and one case", function () { const ast = parser.parseEval( - 'switch (true): case 1: return "1"; endswitch;' + 'switch (true): case 1: return "1"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("colon and one case #2", function () { const ast = parser.parseEval( - 'switch (true):; case 1: return "1"; endswitch;' + 'switch (true):; case 1: return "1"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple difference cases", function () { const ast = parser.parseEval( - 'switch (true) { case 1: return "1"; case 2: return "2"; case 3: return "3"; }' + 'switch (true) { case 1: return "1"; case 2: return "2"; case 3: return "3"; }', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple difference cases #2", function () { const ast = parser.parseEval( - 'switch (true) {; case 1: return "1"; case 2: return "2"; case 3: return "3"; }' + 'switch (true) {; case 1: return "1"; case 2: return "2"; case 3: return "3"; }', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple difference cases", function () { const ast = parser.parseEval( - 'switch (true): case 1: return "1"; case 2: return "2"; case 3: return "3"; endswitch;' + 'switch (true): case 1: return "1"; case 2: return "2"; case 3: return "3"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple difference cases #2", function () { const ast = parser.parseEval( - 'switch (true):; case 1: return "1"; case 2: return "2"; case 3: return "3"; endswitch;' + 'switch (true):; case 1: return "1"; case 2: return "2"; case 3: return "3"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple same cases", function () { const ast = parser.parseEval( - 'switch (true) { case 1: case 2: case 3: return "3"; }' + 'switch (true) { case 1: case 2: case 3: return "3"; }', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple same cases #2", function () { const ast = parser.parseEval( - 'switch (true) {; case 1: case 2: case 3: return "3"; }' + 'switch (true) {; case 1: case 2: case 3: return "3"; }', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple same cases", function () { const ast = parser.parseEval( - 'switch (true): case 1: case 2: case 3: return "3"; endswitch;' + 'switch (true): case 1: case 2: case 3: return "3"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple same cases #2", function () { const ast = parser.parseEval( - 'switch (true):; case 1: case 2: case 3: return "3"; endswitch;' + 'switch (true):; case 1: case 2: case 3: return "3"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple difference cases with default", function () { const ast = parser.parseEval( - 'switch (true) { case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; }' + 'switch (true) { case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; }', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple difference cases with default #2", function () { const ast = parser.parseEval( - 'switch (true) {; case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; }' + 'switch (true) {; case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; }', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple difference cases with default", function () { const ast = parser.parseEval( - 'switch (true): case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; endswitch;' + 'switch (true): case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple difference cases with default #2", function () { const ast = parser.parseEval( - 'switch (true):; case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; endswitch;' + 'switch (true):; case 1: return "1"; case 2: return "2"; case 3: return "3"; default: return "5"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple same cases with default", function () { const ast = parser.parseEval( - 'switch (true) { case 1: case 2: case 3: return "3"; default: return "5"; }' + 'switch (true) { case 1: case 2: case 3: return "3"; default: return "5"; }', ); expect(ast).toMatchSnapshot(); }); it("curly and multiple same cases with default #2", function () { const ast = parser.parseEval( - 'switch (true) {; case 1: case 2: case 3: return "3"; default: return "5"; }' + 'switch (true) {; case 1: case 2: case 3: return "3"; default: return "5"; }', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple same cases with default", function () { const ast = parser.parseEval( - 'switch (true): case 1: case 2: case 3: return "3"; default: return "5"; endswitch;' + 'switch (true): case 1: case 2: case 3: return "3"; default: return "5"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("colon and multiple same cases with default #2", function () { const ast = parser.parseEval( - 'switch (true):; case 1: case 2: case 3: return "3"; default: return "5"; endswitch;' + 'switch (true):; case 1: case 2: case 3: return "3"; default: return "5"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("curly and ';' separator", function () { const ast = parser.parseEval( - 'switch (true) { case 1; case 2; case 3; return "3"; default; return "5"; }' + 'switch (true) { case 1; case 2; case 3; return "3"; default; return "5"; }', ); expect(ast).toMatchSnapshot(); }); it("curly and ';' separator #2", function () { const ast = parser.parseEval( - 'switch (true) {; case 1; case 2; case 3; return "3"; default; return "5"; }' + 'switch (true) {; case 1; case 2; case 3; return "3"; default; return "5"; }', ); expect(ast).toMatchSnapshot(); }); it("colon and ';' separator", function () { const ast = parser.parseEval( - 'switch (true): case 1; case 2; case 3; return "3"; default; return "5"; endswitch;' + 'switch (true): case 1; case 2; case 3; return "3"; default; return "5"; endswitch;', ); expect(ast).toMatchSnapshot(); }); it("colon and ';' separator #2", function () { const ast = parser.parseEval( - 'switch (true):; case 1; case 2; case 3; return "3"; default; return "5"; endswitch;' + 'switch (true):; case 1; case 2; case 3; return "3"; default; return "5"; endswitch;', ); expect(ast).toMatchSnapshot(); }); @@ -206,7 +206,7 @@ describe("switch statements", function () { `, { parser: { debug: false }, - } + }, ); expect(ast).toMatchSnapshot(); }); @@ -222,7 +222,7 @@ describe("switch statements", function () { `, { parser: { suppressErrors: true }, - } + }, ); expect(errAst).toMatchSnapshot(); expect(errAst.errors.length).not.toBe(0); diff --git a/test/snapshot/throw.test.js b/test/snapshot/throw.test.js index ffa3cf586..bd70a479e 100644 --- a/test/snapshot/throw.test.js +++ b/test/snapshot/throw.test.js @@ -4,4 +4,16 @@ describe("throw", function () { it("simple", function () { expect(parser.parseEval('throw new Exception("Error");')).toMatchSnapshot(); }); + it("arrow function", function () { + expect( + parser.parseEval('$fn = fn() => throw new Exception("oops");'), + ).toMatchSnapshot(); + }); + it("arrow function in PHP < 8", function () { + expect(() => + parser.parseEval('$fn = fn() => throw new Exception("oops");', { + parser: { version: "7.4" }, + }), + ).toThrow(); + }); }); diff --git a/test/snapshot/traitprecedence.test.js b/test/snapshot/traitprecedence.test.js index 6545af47b..c2e33a906 100644 --- a/test/snapshot/traitprecedence.test.js +++ b/test/snapshot/traitprecedence.test.js @@ -11,8 +11,8 @@ class MyHelloWorld extends Base { A::bigTalk insteadof B; } } - ` - ) + `, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/try.test.js b/test/snapshot/try.test.js index e9a830c3d..7f6c70371 100644 --- a/test/snapshot/try.test.js +++ b/test/snapshot/try.test.js @@ -4,58 +4,78 @@ describe("boolean", () => { it("simple", () => { expect( parser.parseEval( - "try { call(); } catch (Exception $e) { do_something(); }" - ) + "try { call(); } catch (Exception $e) { do_something(); }", + ), ).toMatchSnapshot(); }); + it("without variable", () => { + expect( + parser.parseEval("try { call(); } catch (Exception) { do_something(); }"), + ).toMatchSnapshot(); + }); + it("without variable in PHP < 8", () => { + expect(() => + parser.parseEval( + "try { call(); } catch (Exception) { do_something(); }", + { parser: { version: "7.4" } }, + ), + ).toThrow(SyntaxError); + }); it("qualified name", () => { expect( parser.parseEval( - "try { call(); } catch (Foo\\Exception $e) { do_something(); }" - ) + "try { call(); } catch (Foo\\Exception $e) { do_something(); }", + ), ).toMatchSnapshot(); }); it("fully qualified name", () => { expect( parser.parseEval( - "try { call(); } catch (\\Exception $e) { do_something(); }" - ) + "try { call(); } catch (\\Exception $e) { do_something(); }", + ), ).toMatchSnapshot(); }); it("fully qualified name #2", () => { expect( parser.parseEval( - "try { call(); } catch (\\Exception\\Foo $e) { do_something(); }" - ) + "try { call(); } catch (\\Exception\\Foo $e) { do_something(); }", + ), ).toMatchSnapshot(); }); it("relative name", () => { expect( parser.parseEval( - "try { call(); } catch (namespace\\Exception $e) { do_something(); }" - ) + "try { call(); } catch (namespace\\Exception $e) { do_something(); }", + ), ).toMatchSnapshot(); }); it("finally", () => { expect( parser.parseEval( - "try { call(); } catch (Exception $e) { do_something(); } finally { do_something_other(); }" - ) + "try { call(); } catch (Exception $e) { do_something(); } finally { do_something_other(); }", + ), ).toMatchSnapshot(); }); it("multiple catch", () => { expect( parser.parseEval( - "try { call(); } catch (MyException | MyOtherException $e) { do_something(); }" - ) + "try { call(); } catch (MyException | MyOtherException $e) { do_something(); }", + ), + ).toMatchSnapshot(); + }); + it("multiple catch without variable", () => { + expect( + parser.parseEval( + "try { call(); } catch (MyException | MyOtherException) { do_something(); }", + ), ).toMatchSnapshot(); }); it("multiple catch #2", () => { expect( parser.parseEval( - "try { call(); } catch (MyException | Foo\\Exception | \\Exception | \\Exception\\Foo | namespace\\Exception $e) { do_something(); }" - ) + "try { call(); } catch (MyException | Foo\\Exception | \\Exception | \\Exception\\Foo | namespace\\Exception $e) { do_something(); }", + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/typereference.test.js b/test/snapshot/typereference.test.js index c1d494cc8..1c7777db9 100644 --- a/test/snapshot/typereference.test.js +++ b/test/snapshot/typereference.test.js @@ -63,22 +63,22 @@ describe("typereference", function () { }); it("callable (argument)", function () { expect( - parser.parseEval("function foo(callable $arg) {}") + parser.parseEval("function foo(callable $arg) {}"), ).toMatchSnapshot(); }); it("callable (argument) (uppercase)", function () { expect( - parser.parseEval("function foo(CALLABLE $arg) {}") + parser.parseEval("function foo(CALLABLE $arg) {}"), ).toMatchSnapshot(); }); it("callable (return type declarations)", function () { expect( - parser.parseEval("function foo($arg): callable {}") + parser.parseEval("function foo($arg): callable {}"), ).toMatchSnapshot(); }); it("callable (return type declarations) (uppercase)", function () { expect( - parser.parseEval("function foo($arg): CALLABLE {}") + parser.parseEval("function foo($arg): CALLABLE {}"), ).toMatchSnapshot(); }); it("object (argument)", function () { @@ -95,22 +95,22 @@ describe("typereference", function () { }); it("iterable (argument)", function () { expect( - parser.parseEval("function foo(iterable $arg) {}") + parser.parseEval("function foo(iterable $arg) {}"), ).toMatchSnapshot(); }); it("iterable (argument) (uppercase)", function () { expect( - parser.parseEval("function foo(ITERABLE $arg) {}") + parser.parseEval("function foo(ITERABLE $arg) {}"), ).toMatchSnapshot(); }); it("iterable (return type declarations)", function () { expect( - parser.parseEval("function foo($arg): iterable {}") + parser.parseEval("function foo($arg): iterable {}"), ).toMatchSnapshot(); }); it("iterable (return type declarations) (uppercase)", function () { expect( - parser.parseEval("function foo($arg): ITERABLE {}") + parser.parseEval("function foo($arg): ITERABLE {}"), ).toMatchSnapshot(); }); it("void (argument)", function () { @@ -130,7 +130,7 @@ describe("typereference", function () { }); it("class (2)", function () { expect( - parser.parseEval("function foo(Foo\\Foo $arg) {}") + parser.parseEval("function foo(Foo\\Foo $arg) {}"), ).toMatchSnapshot(); }); it("class (3)", function () { @@ -138,7 +138,7 @@ describe("typereference", function () { }); it("class (4)", function () { expect( - parser.parseEval("function foo($arg): Foo\\Foo {}") + parser.parseEval("function foo($arg): Foo\\Foo {}"), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/union.test.js b/test/snapshot/union.test.js new file mode 100644 index 000000000..8e54971d0 --- /dev/null +++ b/test/snapshot/union.test.js @@ -0,0 +1,61 @@ +const parser = require("../main"); + +describe("Test unions", function () { + it("simple union", function () { + expect(parser.parseEval("function(foo|bar $test) {}")).toMatchSnapshot(); + }); + + it("simple intersection", function () { + expect(parser.parseEval("function(foo&bar $test) {}")).toMatchSnapshot(); + }); + + it("union with reference", function () { + expect(parser.parseEval("function(foo|bar &$test) {}")).toMatchSnapshot(); + }); + + it("intersection with reference", function () { + expect(parser.parseEval("function(foo&bar &$test) {}")).toMatchSnapshot(); + }); + + it("union with variadic", function () { + expect(parser.parseEval("function(foo|bar ...$test) {}")).toMatchSnapshot(); + }); + + it("intersection with variadic", function () { + expect(parser.parseEval("function(foo&bar ...$test) {}")).toMatchSnapshot(); + }); + + it("union with three types", function () { + expect( + parser.parseEval("function(foo|bar|baz $test) {}"), + ).toMatchSnapshot(); + }); + + it("intersection with three types", function () { + expect( + parser.parseEval("function(foo&bar&baz $test) {}"), + ).toMatchSnapshot(); + }); + + it("union mixed with intersection", function () { + const astErr = parser.parseEval("function(foo|bar&baz $test) {}", { + parser: { + version: "8.1", + suppressErrors: true, + }, + }); + + expect(astErr).toMatchSnapshot(); + }); + + it("intersection mixed with union", function () { + const astErr = parser.parseEval("function(foo&bar|baz $test) {}", { + parser: { + version: "8.1", + suppressErrors: true, + }, + }); + + expect(astErr).toMatchSnapshot(); + }); +}); diff --git a/test/snapshot/usegroup.test.js b/test/snapshot/usegroup.test.js index 84136ce77..5cedc5096 100644 --- a/test/snapshot/usegroup.test.js +++ b/test/snapshot/usegroup.test.js @@ -3,36 +3,48 @@ const parser = require("../main"); describe("usegroup", () => { it("simple", () => { expect( - parser.parseEval("use My\\Full\\Classname as Another;") + parser.parseEval("use My\\Full\\Classname as Another;"), ).toMatchSnapshot(); }); it("multiple", () => { expect( - parser.parseEval("use My\\Full\\Classname as Another, My\\Full\\NSname;") + parser.parseEval("use My\\Full\\Classname as Another, My\\Full\\NSname;"), ).toMatchSnapshot(); }); it("multiple 2", () => { expect( parser.parseEval( - "use My\\Full\\Classname as Another, My\\Full\\NSname, \\Full\\NSname\\With\\Leading\\Backslash;" - ) + "use My\\Full\\Classname as Another, My\\Full\\NSname, \\Full\\NSname\\With\\Leading\\Backslash;", + ), ).toMatchSnapshot(); }); it("nested", () => { expect( - parser.parseEval("use some\\my_namespace\\{ClassA, ClassB, ClassC as C};") + parser.parseEval( + "use some\\my_namespace\\{ClassA, ClassB, ClassC as C};", + ), ).toMatchSnapshot(); }); it("nested 2", () => { expect( - parser.parseEval("use function some\\my_namespace\\{fn_a, fn_b, fn_c};") + parser.parseEval("use function some\\my_namespace\\{fn_a, fn_b, fn_c};"), ).toMatchSnapshot(); }); it("nested 3", () => { expect( parser.parseEval( - "use const some\\my_namespace\\{ConstA, ConstB, ConstC};" - ) + "use const some\\my_namespace\\{ConstA, ConstB, ConstC};", + ), + ).toMatchSnapshot(); + }); + it("nested 4", () => { + expect( + parser.parseEval( + `use Vendor\\Package\\SomeNamespace\\{ + SubnamespaceOne\\ClassA, + SubnamespaceOne\\ClassB + };`, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/useitem.test.js b/test/snapshot/useitem.test.js index f046400fa..bdb931da8 100644 --- a/test/snapshot/useitem.test.js +++ b/test/snapshot/useitem.test.js @@ -9,27 +9,27 @@ describe("useitem", () => { }); it("with type", () => { expect( - parser.parseEval("use My\\Full\\Classname as Another;") + parser.parseEval("use My\\Full\\Classname as Another;"), ).toMatchSnapshot(); }); it("importing a function", () => { expect( - parser.parseEval("use function My\\Full\\functionName;") + parser.parseEval("use function My\\Full\\functionName;"), ).toMatchSnapshot(); }); it("importing a function with type", () => { expect( - parser.parseEval("use function My\\Full\\functionName as func;") + parser.parseEval("use function My\\Full\\functionName as func;"), ).toMatchSnapshot(); }); it("importing a class", () => { expect( - parser.parseEval("use some\\my_namespace\\ClassC;") + parser.parseEval("use some\\my_namespace\\ClassC;"), ).toMatchSnapshot(); }); it("importing a class with type", () => { expect( - parser.parseEval("use some\\my_namespace\\ClassC as C;") + parser.parseEval("use some\\my_namespace\\ClassC as C;"), ).toMatchSnapshot(); }); it("importing a constant", () => { @@ -37,7 +37,26 @@ describe("useitem", () => { }); it("importing a constant with type", () => { expect( - parser.parseEval("use const My\\Full\\CONSTANT as MY_CONST;") + parser.parseEval("use const My\\Full\\CONSTANT as MY_CONST;"), + ).toMatchSnapshot(); + }); + it("invalid use", () => { + expect( + parser.parseEval( + `use function $foo; + use const namespace\\{ + FOO, + BAR, + }; + use some\\{ + namespace\\foo, + $error, + function $bar, + };`, + { + parser: { suppressErrors: true }, + }, + ), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/variable.test.js b/test/snapshot/variable.test.js index 8c600e673..dff819c9b 100644 --- a/test/snapshot/variable.test.js +++ b/test/snapshot/variable.test.js @@ -5,7 +5,7 @@ describe("Test variables", function () { expect( parser.parseEval(` global $$foo; - `) + `), ).toMatchSnapshot(); }); @@ -16,7 +16,7 @@ describe("Test variables", function () { $foo::\${$property}; $bar->$$property; $bar->\${$property}; - `) + `), ).toMatchSnapshot(); }); @@ -26,7 +26,7 @@ describe("Test variables", function () { $bar->{$property->foo}; $bar->\${$property}; $bar->foo_{$property}; - `) + `), ).toMatchSnapshot(); }); @@ -39,7 +39,7 @@ describe("Test variables", function () { parser.parseEval(` $a = "foo"; $b = &$c; - $a->b = true;`) + $a->b = true;`), ).toMatchSnapshot(); }); @@ -49,13 +49,13 @@ describe("Test variables", function () { it("fix #167", function () { expect( - parser.parseEval("$var = Foo::{$bar['baz']}();Foo::$bar['baz']();") + parser.parseEval("$var = Foo::{$bar['baz']}();Foo::$bar['baz']();"), ).toMatchSnapshot(); }); it("valid offset lookup", function () { expect( - parser.parseEval("get_class($var)::$$$$$property;") + parser.parseEval("get_class($var)::$$$$$property;"), ).toMatchSnapshot(); }); @@ -68,7 +68,7 @@ describe("Test variables", function () { $var = (($var[0])[1])::foo; $var = (new Foo())::bar; get_class($this->resource)::$wrap; - `) + `), ).toMatchSnapshot(); }); @@ -81,7 +81,7 @@ describe("Test variables", function () { foo::class; $this->foo(); foo::$bar; - $this->foo::bar["baz"]::qux();`) + $this->foo::bar["baz"]::qux();`), ).toMatchSnapshot(); }); @@ -90,7 +90,7 @@ describe("Test variables", function () { parser.parseEval(` $a = "{$a[1]}"; $a = "{$a["a"]}"; - $a = "{$a[$b]}";`) + $a = "{$a[$b]}";`), ).toMatchSnapshot(); }); @@ -99,8 +99,8 @@ describe("Test variables", function () { parser.parseEval( ` $a = "{$a->foo()[$bar[$foo]]}"; - ` - ) + `, + ), ).toMatchSnapshot(); }); @@ -111,7 +111,7 @@ describe("Test variables", function () { $$$a = "bar"; \${$a."bar"} = "bar"; $foo{$a."bar"} = "bar"; - `) + `), ).toMatchSnapshot(); }); @@ -122,7 +122,7 @@ describe("Test variables", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -132,7 +132,7 @@ describe("Test variables", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -142,7 +142,7 @@ describe("Test variables", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -152,7 +152,7 @@ describe("Test variables", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); @@ -162,7 +162,7 @@ describe("Test variables", function () { parser: { suppressErrors: true, }, - }) + }), ).toMatchSnapshot(); }); }); diff --git a/test/snapshot/yield.test.js b/test/snapshot/yield.test.js index 4eda072cc..4b82a19e5 100644 --- a/test/snapshot/yield.test.js +++ b/test/snapshot/yield.test.js @@ -15,7 +15,7 @@ describe("yield", function () { }); it("assign (key and value)", function () { expect( - parser.parseEval("$data = (yield $key => $value);") + parser.parseEval("$data = (yield $key => $value);"), ).toMatchSnapshot(); }); it("inside function", function () { @@ -23,7 +23,7 @@ describe("yield", function () { }); it("expression as generator key", function () { expect( - parser.parseEval('function foo() { yield "bar {$test}" => 123; }') + parser.parseEval('function foo() { yield "bar {$test}" => 123; }'), ).toMatchSnapshot(); }); it("null", function () { diff --git a/test/snapshot/yieldfrom.test.js b/test/snapshot/yieldfrom.test.js index 167f4ab58..f7480feb9 100644 --- a/test/snapshot/yieldfrom.test.js +++ b/test/snapshot/yieldfrom.test.js @@ -9,7 +9,7 @@ describe("yieldfrom", function () { }); it("new", function () { expect( - parser.parseEval("yield from new ArrayIterator([5, 6]);") + parser.parseEval("yield from new ArrayIterator([5, 6]);"), ).toMatchSnapshot(); }); it("return", function () { diff --git a/test/version.test.js b/test/version.test.js index cff7fb860..9d82d1e45 100644 --- a/test/version.test.js +++ b/test/version.test.js @@ -23,7 +23,7 @@ describe("Test versions", function () { parser: { version: [701], }, - }) + }), ).toThrow(new Error("Expecting a number for version")); }); it("fail to parse bad version numbers", function () { @@ -32,7 +32,7 @@ describe("Test versions", function () { parser: { version: "x.y.z", }, - }) + }), ).toThrow(new Error("Bad version number : x.y.z")); }); it("unhandled version", function () { @@ -41,14 +41,14 @@ describe("Test versions", function () { parser: { version: "4.9", }, - }) - ).toThrow(new Error("Can only handle versions between 5.x to 7.x")); + }), + ).toThrow(new Error("Can only handle versions between 5.x to 8.x")); expect( parser.create.bind(null, { parser: { - version: "8.9", + version: "9.9", }, - }) - ).toThrow(new Error("Can only handle versions between 5.x to 7.x")); + }), + ).toThrow(new Error("Can only handle versions between 5.x to 8.x")); }); }); diff --git a/types.d.ts b/types.d.ts new file mode 100644 index 000000000..a5ad9c93f --- /dev/null +++ b/types.d.ts @@ -0,0 +1,1447 @@ +declare module "php-parser" { + /** + * Defines an array structure + * @example + * // PHP code : + * [1, 'foo' => 'bar', 3] + * + * // AST structure : + * { + * "kind": "array", + * "shortForm": true + * "items": [ + * {"kind": "number", "value": "1"}, + * { + * "kind": "entry", + * "key": {"kind": "string", "value": "foo", "isDoubleQuote": false}, + * "value": {"kind": "string", "value": "bar", "isDoubleQuote": false} + * }, + * {"kind": "number", "value": "3"} + * ] + * } + * @property items - List of array items + * @property shortForm - Indicate if the short array syntax is used, ex `[]` instead `array()` + */ + class Array extends Expression { + /** + * List of array items + */ + items: (Entry | Expression | Variable)[]; + /** + * Indicate if the short array syntax is used, ex `[]` instead `array()` + */ + shortForm: boolean; + } + /** + * Defines an arrow function (it's like a closure) + */ + class ArrowFunc extends Expression { + arguments: Parameter[]; + type: Identifier; + body: Expression; + byref: boolean; + nullable: boolean; + isStatic: boolean; + } + /** + * Assigns a value to the specified target + */ + class Assign extends Expression { + left: Expression; + right: Expression; + operator: string; + } + /** + * Assigns a value to the specified target + */ + class AssignRef extends Expression { + left: Expression; + right: Expression; + operator: string; + } + /** + * Attribute group + */ + class AttrGroup extends Node { + attrs: Attribute[]; + } + /** + * Attribute Value + */ + class Attribute extends Node { + name: string; + args: Parameter[]; + } + /** + * Binary operations + */ + class Bin extends Operation { + type: string; + left: Expression; + right: Expression; + } + /** + * A block statement, i.e., a sequence of statements surrounded by braces. + */ + class Block extends Statement { + children: Node[]; + } + /** + * Defines a boolean value (true/false) + */ + class Boolean extends Literal { + value: boolean; + } + /** + * A break statement + */ + class Break extends Statement { + level: number | null; + } + /** + * Passing by Reference - so the function can modify the variable + */ + class ByRef extends Expression { + what: ExpressionStatement; + } + /** + * Executes a call statement + */ + class Call extends Expression { + what: Identifier | Variable; + arguments: Expression[]; + } + /** + * A switch case statement + * @property test - if null, means that the default case + */ + class Case extends Statement { + /** + * if null, means that the default case + */ + test: Expression | null; + body: Block | null; + } + /** + * Binary operations + */ + class Cast extends Operation { + type: string; + raw: string; + expr: Expression; + } + /** + * Defines a catch statement + */ + class Catch extends Statement { + what: Name[]; + variable: Variable; + body: Block; + } + /** + * A class definition + */ + class Class extends Declaration { + extends: Identifier | null; + implements: Identifier[] | null; + body: Declaration[]; + isAnonymous: boolean; + isAbstract: boolean; + isFinal: boolean; + isReadonly: boolean; + attrGroups: AttrGroup[]; + } + /** + * Defines a class/interface/trait constant + */ + class ClassConstant extends ConstantStatement { + /** + * Generic flags parser + */ + parseFlags(flags: (number | null)[]): void; + visibility: string; + final: boolean; + nullable: boolean; + type: TypeReference | IntersectionType | UnionType | null; + attrGroups: AttrGroup[]; + } + /** + * Defines a clone call + */ + class Clone extends Expression { + what: Expression; + } + /** + * Defines a closure + */ + class Closure extends Expression { + arguments: Parameter[]; + uses: Variable[]; + type: Identifier; + byref: boolean; + nullable: boolean; + body: Block | null; + isStatic: boolean; + attrGroups: AttrGroup[]; + } + /** + * Abstract documentation node (ComentLine or CommentBlock) + */ + class Comment extends Node { + value: string; + } + /** + * A comment block (multiline) + */ + class CommentBlock extends Comment {} + /** + * A single line comment + */ + class CommentLine extends Comment {} + /** + * Defines a constant + */ + class Constant extends Node { + name: string; + value: Node | string | number | boolean | null; + } + /** + * Declares a constants into the current scope + */ + class ConstantStatement extends Statement { + constants: Constant[]; + } + /** + * A continue statement + */ + class Continue extends Statement { + level: number | null; + } + /** + * A declaration statement (function, class, interface...) + */ + class Declaration extends Statement { + /** + * Generic flags parser + */ + parseFlags(flags: (number | null)[]): void; + name: Identifier | string; + } + /** + * The declare construct is used to set execution directives for a block of code + */ + class Declare extends Block { + /** + * The node is declared as a short tag syntax : + * ```php + * bar_$baz; + * ``` + */ + readonly TYPE_OFFSET: string; + /** + * Defines the type of encapsed string (shell, heredoc, string) + */ + type: string; + /** + * The heredoc label, defined only when the type is heredoc + */ + label: string | null; + value: EncapsedPart[]; + } + /** + * Part of `Encapsed` node + */ + class EncapsedPart extends Expression { + expression: Expression; + syntax: string; + curly: boolean; + } + /** + * An array entry - see [Array](#array) + * @property key - The entry key/offset + * @property value - The entry value + * @property byRef - By reference + * @property unpack - Argument unpacking + */ + class Entry extends Expression { + /** + * The entry key/offset + */ + key: Node | null; + /** + * The entry value + */ + value: Node; + /** + * By reference + */ + byRef: boolean; + /** + * Argument unpacking + */ + unpack: boolean; + } + /** + * A enum definition + */ + class Enum extends Declaration { + valueType: Identifier | null; + implements: Identifier[]; + body: Declaration[]; + attrGroups: AttrGroup[]; + } + /** + * Declares a cases into the current scope + */ + class EnumCase extends Node { + name: string; + value: string | number | null; + } + /** + * Defines an error node (used only on silentMode) + */ + class Error extends Node { + message: string; + line: number; + token: number | string; + expected: string | any[]; + } + /** + * Defines an eval statement + */ + class Eval extends Expression { + source: Node; + } + /** + * Defines an exit / die call + */ + class Exit extends Expression { + expression: Node | null; + useDie: boolean; + } + /** + * Any expression node. Since the left-hand side of an assignment may + * be any expression in general, an expression can also be a pattern. + */ + class Expression extends Node {} + /** + * Defines an expression based statement + */ + class ExpressionStatement extends Statement { + expression: Expression; + } + /** + * Defines a for iterator + */ + class For extends Statement { + init: Expression[]; + test: Expression[]; + increment: Expression[]; + body: Block | null; + shortForm: boolean; + } + /** + * Defines a foreach iterator + */ + class Foreach extends Statement { + source: Expression; + key: Expression | null; + value: Expression; + body: Block | null; + shortForm: boolean; + } + /** + * Defines a classic function + */ + class Function extends Declaration { + arguments: Parameter[]; + type: Identifier; + byref: boolean; + nullable: boolean; + body: Block | null; + attrGroups: AttrGroup[]; + } + /** + * Imports a variable from the global scope + */ + class Global extends Statement { + items: Variable[]; + } + /** + * Defines goto statement + */ + class Goto extends Statement { + label: string; + } + /** + * Halts the compiler execution + * @property after - String after the halt statement + */ + class Halt extends Statement { + /** + * String after the halt statement + */ + after: string; + } + /** + * Defines an identifier node + */ + class Identifier extends Node { + name: string; + } + /** + * Defines a if statement + */ + class If extends Statement { + test: Expression; + body: Block; + alternate: Block | If | null; + shortForm: boolean; + } + /** + * Defines system include call + */ + class Include extends Expression { + target: Node; + once: boolean; + require: boolean; + } + /** + * Defines inline html output (treated as echo output) + */ + class Inline extends Literal { + value: string; + } + /** + * An interface definition + */ + class Interface extends Declaration { + extends: Identifier[]; + body: Declaration[]; + attrGroups: AttrGroup[]; + } + /** + * A union of types + */ + class IntersectionType extends Declaration { + types: TypeReference[]; + } + /** + * Defines an isset call + */ + class Isset extends Expression {} + /** + * A label statement (referenced by goto) + */ + class Label extends Statement { + name: string; + } + /** + * Defines list assignment + */ + class List extends Expression { + shortForm: boolean; + items: Entry[]; + } + /** + * Defines an array structure + */ + class Literal extends Expression { + raw: string; + value: EncapsedPart[] | Node | string | number | boolean | null; + } + /** + * Defines the location of the node (with it's source contents as string) + */ + class Location { + source: string | null; + start: Position; + end: Position; + } + /** + * Lookup on an offset in the specified object + */ + class Lookup extends Expression { + what: Expression; + offset: Expression; + } + /** + * Defines magic constant + */ + class Magic extends Literal {} + /** + * Defines a match expression + * @property cond - Condition expression to match against + * @property arms - Arms for comparison + */ + class Match extends Expression { + /** + * Condition expression to match against + */ + cond: Expression; + /** + * Arms for comparison + */ + arms: MatchArm[]; + } + /** + * An array entry - see [Array](#array) + * @property conds - The match condition expression list - null indicates default arm + * @property body - The return value expression + */ + class MatchArm extends Expression { + /** + * The match condition expression list - null indicates default arm + */ + conds: Expression[] | null; + /** + * The return value expression + */ + body: Expression; + } + /** + * Defines a class/interface/trait method + */ + class Method extends Function { + isAbstract: boolean; + isFinal: boolean; + isStatic: boolean; + visibility: string; + } + /** + * Defines a class reference node + */ + class Name extends Reference { + /** + * This is an identifier without a namespace separator, such as Foo + */ + readonly UNQUALIFIED_NAME: string; + /** + * This is an identifier with a namespace separator, such as Foo\Bar + */ + readonly QUALIFIED_NAME: string; + /** + * This is an identifier with a namespace separator that begins with + * a namespace separator, such as \Foo\Bar. The namespace \Foo is also + * a fully qualified name. + */ + readonly FULL_QUALIFIED_NAME: string; + /** + * This is an identifier starting with namespace, such as namespace\Foo\Bar. + */ + readonly RELATIVE_NAME: string; + name: string; + resolution: string; + } + /** + * Named arguments. + */ + class namedargument extends Expression { + name: string; + value: Expression; + } + /** + * The main program node + */ + class Namespace extends Block { + name: string; + withBrackets: boolean; + } + /** + * Creates a new instance of the specified class + */ + class New extends Expression { + what: Identifier | Variable | Class; + arguments: Variable[]; + } + /** + * A generic AST node + */ + class Node { + /** + * Attach comments to current node + */ + setTrailingComments(docs: any): void; + /** + * Destroying an unused node + */ + destroy(): void; + /** + * Includes current token position of the parser + */ + includeToken(parser: any): void; + /** + * Helper for extending the Node class + */ + static extends( + type: string, + constructor: (...params: any[]) => any, + ): (...params: any[]) => any; + loc: Location | null; + leadingComments: CommentBlock[] | Comment[] | null; + trailingComments: CommentBlock[] | Comment[] | null; + kind: string; + } + /** + * Ignore this node, it implies a no operation block, for example : + * [$foo, $bar, /* here a noop node * /] + */ + class Noop extends Node {} + /** + * Defines a nowdoc string + */ + class NowDoc extends Literal { + label: string; + raw: string; + value: string; + } + /** + * Represents the null keyword + */ + class NullKeyword extends Node {} + /** + * Lookup to an object property + */ + class NullSafePropertyLookup extends Lookup {} + /** + * Defines a numeric value + */ + class Number extends Literal { + value: number; + } + /** + * Lookup on an offset in an array + */ + class OffsetLookup extends Lookup {} + /** + * Defines binary operations + */ + class Operation extends Expression {} + type MODIFIER_PUBLIC = 1; + type MODIFIER_PROTECTED = 2; + type MODIFIER_PRIVATE = 4; + /** + * Defines a function parameter + */ + class Parameter extends Declaration { + type: Identifier | null; + value: Node | null; + byref: boolean; + variadic: boolean; + readonly: boolean; + nullable: boolean; + attrGroups: AttrGroup[]; + flags: MODIFIER_PUBLIC | MODIFIER_PROTECTED | MODIFIER_PRIVATE; + } + /** + * Defines a class reference node + */ + class ParentReference extends Reference {} + /** + * Each Position object consists of a line number (1-indexed) and a column number (0-indexed): + */ + class Position { + line: number; + column: number; + offset: number; + } + /** + * Defines a post operation `$i++` or `$i--` + */ + class Post extends Operation { + type: string; + what: Variable; + } + /** + * Defines a pre operation `++$i` or `--$i` + */ + class Pre extends Operation { + type: string; + what: Variable; + } + /** + * Outputs + */ + class Print extends Expression {} + /** + * The main program node + */ + class Program extends Block { + errors: Error[]; + comments: Comment[] | null; + tokens: String[] | null; + } + /** + * Defines a class property + */ + class Property extends Statement { + name: string; + value: Node | null; + readonly: boolean; + nullable: boolean; + type: Identifier | Identifier[] | null; + attrGroups: AttrGroup[]; + } + /** + * Lookup to an object property + */ + class PropertyLookup extends Lookup {} + /** + * Declares a properties into the current scope + */ + class PropertyStatement extends Statement { + /** + * Generic flags parser + */ + parseFlags(flags: (number | null)[]): void; + properties: Property[]; + visibility: string | null; + isStatic: boolean; + } + /** + * Defines a reference node + */ + class Reference extends Node {} + /** + * Defines a short if statement that returns a value + */ + class RetIf extends Expression { + test: Expression; + trueExpr: Expression; + falseExpr: Expression; + } + /** + * A continue statement + */ + class Return extends Statement { + expr: Expression | null; + } + /** + * Defines a class reference node + */ + class SelfReference extends Reference {} + /** + * Avoids to show/log warnings & notices from the inner expression + */ + class Silent extends Expression { + expr: Expression; + } + /** + * Any statement. + */ + class Statement extends Node {} + /** + * Declares a static variable into the current scope + */ + class Static extends Statement { + variables: StaticVariable[]; + } + /** + * Lookup to a static property + */ + class StaticLookup extends Lookup {} + /** + * Defines a class reference node + */ + class StaticReference extends Reference {} + /** + * Defines a constant + */ + class StaticVariable extends Node { + variable: Variable; + defaultValue: Node | string | number | boolean | null; + } + /** + * Defines a string (simple or double quoted) - chars are already escaped + */ + class String extends Literal { + unicode: boolean; + isDoubleQuote: boolean; + value: string; + } + /** + * Defines a switch statement + */ + class Switch extends Statement { + test: Expression; + body: Block; + shortForm: boolean; + } + /** + * Defines a throw statement + */ + class Throw extends Statement { + what: Expression; + } + /** + * A trait definition + */ + class Trait extends Declaration { + body: Declaration[]; + } + /** + * Defines a trait alias + */ + class TraitAlias extends Node { + trait: Identifier | null; + method: Identifier; + as: Identifier | null; + visibility: string | null; + } + /** + * Defines a trait alias + */ + class TraitPrecedence extends Node { + trait: Identifier | null; + method: Identifier; + instead: Identifier[]; + } + /** + * Defines a trait usage + */ + class TraitUse extends Node { + traits: Identifier[]; + adaptations: Node[] | null; + } + /** + * Defines a try statement + */ + class Try extends Statement { + body: Block; + catches: Catch[]; + always: Block; + } + /** + * Defines a class reference node + */ + class TypeReference extends Reference { + name: string; + } + /** + * Unary operations + */ + class Unary extends Operation { + type: string; + what: Expression; + } + /** + * A union of types + */ + class UnionType extends Declaration { + types: TypeReference[]; + } + /** + * Deletes references to a list of variables + */ + class Unset extends Statement {} + /** + * Defines a use statement (with a list of use items) + * @property type - Possible value : function, const + */ + class UseGroup extends Statement { + name: string | null; + /** + * Possible value : function, const + */ + type: string | null; + item: UseItem[]; + } + /** + * Defines a use statement (from namespace) + * @property type - Possible value : function, const + */ + class UseItem extends Statement { + /** + * Importing a constant + */ + readonly TYPE_CONST: string; + /** + * Importing a function + */ + readonly TYPE_FUNC: string; + name: string; + /** + * Possible value : function, const + */ + type: string | null; + alias: Identifier | null; + } + /** + * Any expression node. Since the left-hand side of an assignment may + * be any expression in general, an expression can also be a pattern. + * @example + * // PHP code : + * $foo + * // AST output + * { + * "kind": "variable", + * "name": "foo", + * "curly": false + * } + * @property name - The variable name (can be a complex expression when the name is resolved dynamically) + * @property curly - Indicate if the name is defined between curlies, ex `${foo}` + */ + class Variable extends Expression { + /** + * The variable name (can be a complex expression when the name is resolved dynamically) + */ + name: string | Node; + /** + * Indicate if the name is defined between curlies, ex `${foo}` + */ + curly: boolean; + } + /** + * Introduce a list of items into the arguments of the call + */ + class Variadic extends Expression { + what: any[] | Expression; + } + /** + * Defines a variadic placeholder (the ellipsis in PHP 8.1+'s first-class callable syntax) + */ + class VariadicPlaceholder extends Node {} + /** + * Defines a while statement + */ + class While extends Statement { + test: Expression; + body: Block | null; + shortForm: boolean; + } + /** + * Defines a yield generator statement + */ + class Yield extends Expression { + value: Expression | null; + key: Expression | null; + } + /** + * Defines a yield from generator statement + */ + class YieldFrom extends Expression { + value: Expression; + } + /** + * The AST builder class + * @property withPositions - Should locate any node (by default false) + * @property withSource - Should extract the node original code (by default false) + */ + class AST { + /** + * Should locate any node (by default false) + */ + withPositions: boolean; + /** + * Should extract the node original code (by default false) + */ + withSource: boolean; + } + /** + * Initialise a new parser instance with the specified options + * @example + * var parser = require('php-parser'); + * var instance = new parser({ + * parser: { + * extractDoc: true, + * suppressErrors: true, + * version: 704 // or '7.4' + * }, + * ast: { + * withPositions: true + * }, + * lexer: { + * short_tags: true, + * asp_tags: true + * } + * }); + * + * var evalAST = instance.parseEval('some php code'); + * var codeAST = instance.parseCode(' Note that the output tokens are *STRICLY* similar to PHP function `token_get_all` + * @returns - Each item can be a string or an array with following informations [token_name, text, line_number] + */ + tokenGetAll(buffer: string): (string | string[])[]; + lexer: Lexer; + parser: Parser; + ast: AST; + tokens: any; + } + /** + * This is the php lexer. It will tokenize the string for helping the + * parser to build the AST from its grammar. + * @property all_tokens - defines if all tokens must be retrieved (used by token_get_all only) + * @property comment_tokens - extracts comments tokens + * @property mode_eval - enables the evald mode (ignore opening tags) + * @property asp_tags - disables by default asp tags mode + * @property short_tags - enables by default short tags mode + * @property keywords - List of php keyword + * @property castKeywords - List of php keywords for type casting + */ + class Lexer { + /** + * Initialize the lexer with the specified input + */ + setInput(): void; + /** + * consumes and returns one char from the input + */ + input(): void; + /** + * revert eating specified size + */ + unput(): void; + /** + * check if the text matches + */ + tryMatch(text: string): boolean; + /** + * check if the text matches + */ + tryMatchCaseless(text: string): boolean; + /** + * look ahead + */ + ahead(size: number): string; + /** + * consume the specified size + */ + consume(size: number): Lexer; + /** + * Gets the current state + */ + getState(): void; + /** + * Sets the current lexer state + */ + setState(): void; + /** + * prepend next token + */ + appendToken(value: any, ahead: any): Lexer; + /** + * return next match that has a token + */ + lex(): number | string; + /** + * activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + */ + begin(condition: any): Lexer; + /** + * pop the previously active lexer condition state off the condition stack + */ + popState(): string | any; + /** + * return next match in input + */ + next(): number | any; + EOF: number; + /** + * defines if all tokens must be retrieved (used by token_get_all only) + */ + all_tokens: boolean; + /** + * extracts comments tokens + */ + comment_tokens: boolean; + /** + * enables the evald mode (ignore opening tags) + */ + mode_eval: boolean; + /** + * disables by default asp tags mode + */ + asp_tags: boolean; + /** + * enables by default short tags mode + */ + short_tags: boolean; + /** + * List of php keyword + */ + keywords: any; + /** + * List of php keywords for type casting + */ + castKeywords: any; + } + /** + * The PHP Parser class that build the AST tree from the lexer + * @property lexer - current lexer instance + * @property ast - the AST factory instance + * @property token - current token + * @property extractDoc - should extract documentation as AST node + * @property extractTokens - should extract each token + * @property suppressErrors - should ignore parsing errors and continue + * @property debug - should output debug informations + */ + class Parser { + /** + * helper : gets a token name + */ + getTokenName(): void; + /** + * main entry point : converts a source code to AST + */ + parse(): void; + /** + * Raise an error + */ + raiseError(): void; + /** + * handling errors + */ + error(): void; + /** + * Create a position node from the lexers position + */ + position(): Position; + /** + * Creates a new AST node + */ + node(): void; + /** + * expects an end of statement or end of file + */ + expectEndOfStatement(): boolean; + /** + * Force the parser to check the current token. + * + * If the current token does not match to expected token, + * the an error will be raised. + * + * If the suppressError mode is activated, then the error will + * be added to the program error stack and this function will return `false`. + */ + expect(token: string | number): boolean; + /** + * Returns the current token contents + */ + text(): string; + /** + * consume the next token + */ + next(): void; + /** + * Peek at the next token. + * @returns Next Token + */ + peek(): string | number; + /** + * Eating a token + */ + lex(): void; + /** + * Check if token is of specified type + */ + is(): void; + /** + * current lexer instance + */ + lexer: Lexer; + /** + * the AST factory instance + */ + ast: AST; + /** + * current token + */ + token: number | string; + /** + * should extract documentation as AST node + */ + extractDoc: boolean; + /** + * should extract each token + */ + extractTokens: boolean; + /** + * should ignore parsing errors and continue + */ + suppressErrors: boolean; + /** + * should output debug informations + */ + debug: boolean; + } + const enum TokenNames { + T_HALT_COMPILER = 101, + T_USE = 102, + T_ENCAPSED_AND_WHITESPACE = 103, + T_OBJECT_OPERATOR = 104, + T_STRING = 105, + T_DOLLAR_OPEN_CURLY_BRACES = 106, + T_STRING_VARNAME = 107, + T_CURLY_OPEN = 108, + T_NUM_STRING = 109, + T_ISSET = 110, + T_EMPTY = 111, + T_INCLUDE = 112, + T_INCLUDE_ONCE = 113, + T_EVAL = 114, + T_REQUIRE = 115, + T_REQUIRE_ONCE = 116, + T_NAMESPACE = 117, + T_NS_SEPARATOR = 118, + T_AS = 119, + T_IF = 120, + T_ENDIF = 121, + T_WHILE = 122, + T_DO = 123, + T_FOR = 124, + T_SWITCH = 125, + T_BREAK = 126, + T_CONTINUE = 127, + T_RETURN = 128, + T_GLOBAL = 129, + T_STATIC = 130, + T_ECHO = 131, + T_INLINE_HTML = 132, + T_UNSET = 133, + T_FOREACH = 134, + T_DECLARE = 135, + T_TRY = 136, + T_THROW = 137, + T_GOTO = 138, + T_FINALLY = 139, + T_CATCH = 140, + T_ENDDECLARE = 141, + T_LIST = 142, + T_CLONE = 143, + T_PLUS_EQUAL = 144, + T_MINUS_EQUAL = 145, + T_MUL_EQUAL = 146, + T_DIV_EQUAL = 147, + T_CONCAT_EQUAL = 148, + T_MOD_EQUAL = 149, + T_AND_EQUAL = 150, + T_OR_EQUAL = 151, + T_XOR_EQUAL = 152, + T_SL_EQUAL = 153, + T_SR_EQUAL = 154, + T_INC = 155, + T_DEC = 156, + T_BOOLEAN_OR = 157, + T_BOOLEAN_AND = 158, + T_LOGICAL_OR = 159, + T_LOGICAL_AND = 160, + T_LOGICAL_XOR = 161, + T_SL = 162, + T_SR = 163, + T_IS_IDENTICAL = 164, + T_IS_NOT_IDENTICAL = 165, + T_IS_EQUAL = 166, + T_IS_NOT_EQUAL = 167, + T_IS_SMALLER_OR_EQUAL = 168, + T_IS_GREATER_OR_EQUAL = 169, + T_INSTANCEOF = 170, + T_INT_CAST = 171, + T_DOUBLE_CAST = 172, + T_STRING_CAST = 173, + T_ARRAY_CAST = 174, + T_OBJECT_CAST = 175, + T_BOOL_CAST = 176, + T_UNSET_CAST = 177, + T_EXIT = 178, + T_PRINT = 179, + T_YIELD = 180, + T_YIELD_FROM = 181, + T_FUNCTION = 182, + T_DOUBLE_ARROW = 183, + T_DOUBLE_COLON = 184, + T_ARRAY = 185, + T_CALLABLE = 186, + T_CLASS = 187, + T_ABSTRACT = 188, + T_TRAIT = 189, + T_FINAL = 190, + T_EXTENDS = 191, + T_INTERFACE = 192, + T_IMPLEMENTS = 193, + T_VAR = 194, + T_PUBLIC = 195, + T_PROTECTED = 196, + T_PRIVATE = 197, + T_CONST = 198, + T_NEW = 199, + T_INSTEADOF = 200, + T_ELSEIF = 201, + T_ELSE = 202, + T_ENDSWITCH = 203, + T_CASE = 204, + T_DEFAULT = 205, + T_ENDFOR = 206, + T_ENDFOREACH = 207, + T_ENDWHILE = 208, + T_CONSTANT_ENCAPSED_STRING = 209, + T_LNUMBER = 210, + T_DNUMBER = 211, + T_LINE = 212, + T_FILE = 213, + T_DIR = 214, + T_TRAIT_C = 215, + T_METHOD_C = 216, + T_FUNC_C = 217, + T_NS_C = 218, + T_START_HEREDOC = 219, + T_END_HEREDOC = 220, + T_CLASS_C = 221, + T_VARIABLE = 222, + T_OPEN_TAG = 223, + T_OPEN_TAG_WITH_ECHO = 224, + T_CLOSE_TAG = 225, + T_WHITESPACE = 226, + T_COMMENT = 227, + T_DOC_COMMENT = 228, + T_ELLIPSIS = 229, + T_COALESCE = 230, + T_POW = 231, + T_POW_EQUAL = 232, + T_SPACESHIP = 233, + T_COALESCE_EQUAL = 234, + T_FN = 235, + T_NULLSAFE_OBJECT_OPERATOR = 236, + T_MATCH = 237, + T_ATTRIBUTE = 238, + T_ENUM = 239, + T_READ_ONLY = 240, + T_NAME_RELATIVE = 241, + T_NAME_QUALIFIED = 242, + T_NAME_FULLY_QUALIFIED = 243, + } + /** + * PHP AST Tokens + */ + const tokens: { + values: { + [key: number]: string; + }; + names: TokenNames; + }; +} diff --git a/webpack.config.js b/webpack.config.js index e99af06c6..40b783e10 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,6 +1,6 @@ const path = require("path"); const webpack = require("webpack"); -const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); +const TerserPlugin = require("terser-webpack-plugin"); const { name, description, license } = require("./package.json"); const entry = "./src/index.js"; @@ -37,16 +37,10 @@ module.exports = { optimization: { minimize: true, minimizer: [ - new UglifyJsPlugin({ + new TerserPlugin({ include: /\.min\.js$/, - sourceMap: true, - uglifyOptions: { - compress: { - keep_fnames: false, - }, - sourceMap: true, + terserOptions: { mangle: true, - maxLineLen: 1024, }, }), ], @@ -57,8 +51,8 @@ module.exports = { banner: ` Package: ${name} ${description} - Build: [hash] - ${today} - Copyright (C) 2020 Glayzzle (${license}) + Build: [fullhash] - ${today} + Copyright (C) 2021 Glayzzle (${license}) @authors https://github.com/glayzzle/php-parser/graphs/contributors @url http://glayzzle.com `, diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..12e87ad70 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5427 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.0": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.3.tgz#cd502a6a0b6e37d7ad72ce7e71a7160a3ae36f7e" + integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ== + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" + integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f" + integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.7" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/core@^7.23.9", "@babel/core@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.20.7", "@babel/generator@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e" + integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A== + dependencies: + "@babel/types" "^7.22.3" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/generator@^7.25.9", "@babel/generator@^7.26.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" + integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== + dependencies: + "@babel/parser" "^7.26.2" + "@babel/types" "^7.26.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/generator@^7.7.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9" + integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.20.7": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz#bfcd6b7321ffebe33290d68550e2c9d7eb7c7a58" + integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ== + dependencies: + "@babel/compat-data" "^7.22.0" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz#a7ed9a8488b45b467fca353cd1a44dc5f0cf5c70" + integrity sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz#3e8999db94728ad2b2458d7a470e7770b7764e26" + integrity sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.1.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8" + integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA== + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.20.7": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + +"@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-simple-access@^7.20.2": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-simple-access@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739" + integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4", "@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" + integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.9.4": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" + integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== + +"@babel/parser@^7.20.7", "@babel/parser@^7.21.9", "@babel/parser@^7.22.4": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" + integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== + +"@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" + integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== + dependencies: + "@babel/types" "^7.26.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f" + integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686" + integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-simple-access" "^7.25.9" + +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.38.1" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.8.4": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.3.tgz#0a7fce51d43adbf0f7b517a71f4c3aaca92ebcbb" + integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.20.7": + version "7.21.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" + integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/parser" "^7.21.9" + "@babel/types" "^7.21.5" + +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.7": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.4.tgz#c3cf96c5c290bd13b55e29d025274057727664c0" + integrity sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.22.3" + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.22.4" + "@babel/types" "^7.22.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" + integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/generator" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/template" "^7.25.9" + "@babel/types" "^7.25.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.4.4": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071" + integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA== + dependencies: + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@babel/types@^7.25.9", "@babel/types@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" + integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" + integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== + dependencies: + "@eslint/object-schema" "^2.1.4" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.7.0.tgz#a1bb4b6a4e742a5ff1894b7ee76fbf884ec72bd3" + integrity sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw== + +"@eslint/eslintrc@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" + integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.14.0", "@eslint/js@^9.14.0": + version "9.14.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.14.0.tgz#2347a871042ebd11a00fd8c2d3d56a265ee6857e" + integrity sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg== + +"@eslint/object-schema@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" + integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== + +"@eslint/plugin-kit@^0.2.0": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz#5eff371953bc13e3f4d88150e2c53959f64f74f6" + integrity sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw== + dependencies: + levn "^0.4.1" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.0": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.12": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== + dependencies: + "@sinonjs/commons" "^2.0.0" + +"@types/babel__core@^7.1.14": + version "7.1.20" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359" + integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== + dependencies: + "@babel/types" "^7.3.0" + +"@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json-schema@^7.0.8": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/linkify-it@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" + integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/node@*": + version "20.2.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== + +"@types/node@^22.9.0": + version "22.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" + integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== + dependencies: + undici-types "~6.19.8" + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.18" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.18.tgz#466225ab4fbabb9aa711f5b406796daf1374a5b7" + integrity sha512-eIJR1UER6ur3EpKM3d+2Pgd+ET+k6Kn9B4ZItX0oPjjVI5PrfaRjKyLT5UYendDpLuoiJMNJvovLQbEXqhsPaw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/scope-manager@8.13.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz#2f4aed0b87d72360e64e4ea194b1fde14a59082e" + integrity sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA== + dependencies: + "@typescript-eslint/types" "8.13.0" + "@typescript-eslint/visitor-keys" "8.13.0" + +"@typescript-eslint/types@8.13.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.13.0.tgz#3f35dead2b2491a04339370dcbcd17bbdfc204d8" + integrity sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng== + +"@typescript-eslint/typescript-estree@8.13.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz#db8c93dd5437ca3ce417a255fb35ddc3c12c3e95" + integrity sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g== + dependencies: + "@typescript-eslint/types" "8.13.0" + "@typescript-eslint/visitor-keys" "8.13.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.13.0.tgz#f6d40e8b5053dcaeabbd2e26463857abf27d62c0" + integrity sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.13.0" + "@typescript-eslint/types" "8.13.0" + "@typescript-eslint/typescript-estree" "8.13.0" + +"@typescript-eslint/visitor-keys@8.13.0": + version "8.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz#e97b0d92b266ef38a1faf40a74da289b66683a5b" + integrity sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw== + dependencies: + "@typescript-eslint/types" "8.13.0" + eslint-visitor-keys "^3.4.3" + +"@webassemblyjs/ast@1.13.1", "@webassemblyjs/ast@^1.12.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.13.1.tgz#4bf991409845051ce9fd3d36ebcd49bb75faae4c" + integrity sha512-+Zp/YJMBws+tg2Nuy5jiFhwvPiSeIB0gPp1Ie/TyqFg69qJ/vRrOKQ7AsFLn3solq5/9ubkBjrGd0UcvFjFsYA== + dependencies: + "@webassemblyjs/helper-numbers" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.12.1" + +"@webassemblyjs/floating-point-hex-parser@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.12.1.tgz#e92ce6f1d663d5a44127b751ee6cee335b8e3e20" + integrity sha512-0vqwjuCO3Sa6pO3nfplawORkL1GUgza/H1A62SdXHSFCmAHoRcrtX/yVG3f1LuMYW951cvYRcRt6hThhz4FnCQ== + +"@webassemblyjs/helper-api-error@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.12.1.tgz#e310b66234838b0c77d38741346b2b575dc4c047" + integrity sha512-czovmKZdRk4rYauCOuMV/EImC3qyfcqyJuOYyDRYR6PZSOW37VWe26fAZQznbvKjlwJdyxLl6mIfx47Cfz8ykw== + +"@webassemblyjs/helper-buffer@1.13.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.13.1.tgz#65f9d5d0d42ff9c2bdf9768d9368fd2fdab36185" + integrity sha512-J0gf97+D3CavG7aO5XmtwxRWMiMEuxQ6t8Aov8areSnyI5P5fM0HV0m8bE3iLfDQZBhxLCc15tRsFVOGyAJ0ng== + +"@webassemblyjs/helper-numbers@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.12.1.tgz#3b7239d8c5b4bab237b9138b231f3a0837a3ca27" + integrity sha512-Vp6k5nXOMvI9dWJqDGCMvwAc8+G6tI2YziuYWqxk7XYnWHdxEJo19CGpqm/kRh86rJxwYANLGuyreARhM+C9lQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.12.1" + "@webassemblyjs/helper-api-error" "1.12.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.12.1.tgz#2008ce69b4129a6e66c435498557eaa7957b3eae" + integrity sha512-flsRYmCqN2ZJmvAyNxZXPPFkwKoezeTUczytfBovql8cOjYTr6OTcZvku4UzyKFW0Kj+PgD+UaG8/IdX31EYWg== + +"@webassemblyjs/helper-wasm-section@1.13.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.13.1.tgz#3f7b438d4226f12fba60bf8e11e871343756f072" + integrity sha512-lcVNbrM5Wm7867lmbU61l+R4dU7emD2X70f9V0PuicvsdVUS5vvXODAxRYGVGBAJ6rWmXMuZKjM0PoeBjAcm2A== + dependencies: + "@webassemblyjs/ast" "1.13.1" + "@webassemblyjs/helper-buffer" "1.13.1" + "@webassemblyjs/helper-wasm-bytecode" "1.12.1" + "@webassemblyjs/wasm-gen" "1.13.1" + +"@webassemblyjs/ieee754@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.12.1.tgz#6c27377183eb6b0b9f6dacbd37bc143ba56e97ff" + integrity sha512-fcrUCqE2dVldeVAHTWFiTiKMS9ivc5jOgB2c30zYOZnm3O54SWeMJWS/HXYK862we2AYHtf6GYuP9xG9J+5zyQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.12.1.tgz#cc30f0ea19e5f8efdf8b247c2bc5627d64dcb621" + integrity sha512-jOU6pTFNf7aGm46NCrEU7Gj6cVuP55T7+kyo5TU/rCduZ5EdwMPBZwSwwzjPZ3eFXYFCmC5wZdPZN0ZWio6n4Q== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.12.1.tgz#f7f9eaaf1fd0835007672b628907cf5ccf916ee7" + integrity sha512-zcZvnAY3/M28Of012dksIfC26qZQJlj2PQCCvxqlsRJHOYtasp+OvK8nRcg11TKzAAv3ja7Y0NEBMKAjH6ljnw== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.13.1.tgz#84a7c07469bf03589c82afd23c0b26b75a3443c9" + integrity sha512-YHnh/f4P4ggjPB+pcri8Pb2HHwCGK+B8qBE+NeEp/WTMQ7dAjgWTnLhXxUqb6WLOT25TK5m0VTCAKTYw8AKxcg== + dependencies: + "@webassemblyjs/ast" "1.13.1" + "@webassemblyjs/helper-buffer" "1.13.1" + "@webassemblyjs/helper-wasm-bytecode" "1.12.1" + "@webassemblyjs/helper-wasm-section" "1.13.1" + "@webassemblyjs/wasm-gen" "1.13.1" + "@webassemblyjs/wasm-opt" "1.13.1" + "@webassemblyjs/wasm-parser" "1.13.1" + "@webassemblyjs/wast-printer" "1.13.1" + +"@webassemblyjs/wasm-gen@1.13.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.13.1.tgz#a821f9a139b72da9614238ecddd3d7ae2a366f64" + integrity sha512-AxWiaqIeLh3c1H+8d1gPgVNXHyKP7jDu2G828Of9/E0/ovVEsh6LjX1QZ6g1tFBHocCwuUHK9O4w35kgojZRqA== + dependencies: + "@webassemblyjs/ast" "1.13.1" + "@webassemblyjs/helper-wasm-bytecode" "1.12.1" + "@webassemblyjs/ieee754" "1.12.1" + "@webassemblyjs/leb128" "1.12.1" + "@webassemblyjs/utf8" "1.12.1" + +"@webassemblyjs/wasm-opt@1.13.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.13.1.tgz#eaa4e9946c46427fb025e837dbfc235a400c7581" + integrity sha512-SUMlvCrfykC7dtWX5g4TSuMmWi9w9tK5kGIdvQMnLuvJfnFLsnAaF86FNbSBSAL33VhM/hOhx4t9o66N37IqSg== + dependencies: + "@webassemblyjs/ast" "1.13.1" + "@webassemblyjs/helper-buffer" "1.13.1" + "@webassemblyjs/wasm-gen" "1.13.1" + "@webassemblyjs/wasm-parser" "1.13.1" + +"@webassemblyjs/wasm-parser@1.13.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.13.1.tgz#42c20ec9a340865c3ba4fea8a19566afda90283e" + integrity sha512-8SPOcbqSb7vXHG+B0PTsJrvT/HilwV3WkJgxw34lmhWvO+7qM9xBTd9u4dn1Lb86WHpKswT5XwF277uBTHFikg== + dependencies: + "@webassemblyjs/ast" "1.13.1" + "@webassemblyjs/helper-api-error" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.12.1" + "@webassemblyjs/ieee754" "1.12.1" + "@webassemblyjs/leb128" "1.12.1" + "@webassemblyjs/utf8" "1.12.1" + +"@webassemblyjs/wast-printer@1.13.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.13.1.tgz#a82ff5e16eb6411fe10a8a06925bfa1b35230d74" + integrity sha512-q0zIfwpbFvaNkgbSzkZFzLsOs8ixZ5MSdTTMESilSAk1C3P8BKEWfbLEvIqyI/PjNpP9+ZU+/KwgfXx3T7ApKw== + dependencies: + "@webassemblyjs/ast" "1.13.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.14.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +acorn@^8.8.2: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" + integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ== + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +async@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-loader@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" + integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== + dependencies: + find-cache-dir "^4.0.0" + schema-utils "^4.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + integrity sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA== + +benchmark@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ== + dependencies: + lodash "^4.17.4" + platform "^1.3.3" + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.3: + version "4.21.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551" + integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA== + dependencies: + caniuse-lite "^1.0.30001489" + electron-to-chromium "^1.4.411" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" + +browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== + dependencies: + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffers@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001489: + version "1.0.30001495" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz#64a0ccef1911a9dcff647115b4430f8eff1ef2d9" + integrity sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg== + +caniuse-lite@^1.0.30001669: + version "1.0.30001677" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f" + integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catharsis@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" + integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== + dependencies: + lodash "^4.17.15" + +chalk@^1.0.0, chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^3.2.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.0.tgz#6d01b3696c59915b6ce057e4aa4adfc2fa25f5ef" + integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + integrity sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA== + +clone@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +core-js-compat@^3.38.0, core-js-compat@^3.38.1: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +coveralls@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081" + integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww== + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.5" + request "^2.88.2" + +create-jest-runner@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/create-jest-runner/-/create-jest-runner-0.11.2.tgz#4b4f62ccef1e4de12e80f81c2cf8211fa392a962" + integrity sha512-6lwspphs4M1PLKV9baBNxHQtWVBPZuDU8kAP4MyrVWa6aEpEcpi2HZeeA6WncwaqgsGNXpP0N2STS7XNM/nHKQ== + dependencies: + chalk "^4.1.0" + jest-worker "^28.0.2" + throat "^6.0.1" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + integrity sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw== + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^4.3.1: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +dedent@^1.0.0: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + integrity sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g== + dependencies: + readable-stream "~1.1.9" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.4.411: + version "1.4.423" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.423.tgz#99567f3a0563fe0d1d0931e9ce851bca239f6658" + integrity sha512-y4A7YfQcDGPAeSWM1IuoWzXpg9RY1nwHzHSwRtCSQFp9FgAVDgdWlFf0RbdWfLWQ2WUI+bddUgk5RgTjqRE6FQ== + +electron-to-chromium@^1.5.41: + version "1.5.52" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz#2bed832c95a56a195504f918150e548474687da8" + integrity sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-plugin-jest@^28.9.0: + version "28.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.9.0.tgz#19168dfaed124339cd2252c4c4d1ac3688aeb243" + integrity sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ== + dependencies: + "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" + +eslint-plugin-prettier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.9.1" + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.14.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.14.0.tgz#534180a97c00af08bcf2b60b0ebf0c4d6c1b2c95" + integrity sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.18.0" + "@eslint/core" "^0.7.0" + "@eslint/eslintrc" "^3.1.0" + "@eslint/js" "9.14.0" + "@eslint/plugin-kit" "^0.2.0" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.0" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + text-table "^0.2.0" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fancy-log@^1.1.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== + dependencies: + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^15.12.0: + version "15.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.12.0.tgz#1811872883ad8f41055b61457a130221297de5b5" + integrity sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ== + +glogg@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== + dependencies: + sparkles "^1.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graceful-fs@^4.1.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +gulp-css-base64@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/gulp-css-base64/-/gulp-css-base64-1.3.4.tgz#afca45e83401045f472c67b776d1b1514e11489f" + integrity sha512-4bdGQW0PFA6Z9zfeYlsGod9IeSPP6u6wobzixZd0w5f36aqP6Oecrb6fJCEQ4xinthH4f4OLs+8+b+Az2hOYwQ== + dependencies: + async "^1.5.0" + buffers "^0.1.1" + chalk "^1.1.1" + gulp-util "^3.0.3" + mime "^1.3.4" + request "^2.67.0" + through2 "^2.0.0" + +gulp-util@^3.0.3: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + integrity sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw== + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw== + dependencies: + glogg "^1.0.0" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + integrity sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw== + dependencies: + sparkles "^1.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +husky@^9.1.6: + version "9.1.6" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" + integrity sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner-eslint@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jest-runner-eslint/-/jest-runner-eslint-2.2.1.tgz#3cb214f84eeab3848af81c5842359e82073a3aef" + integrity sha512-BSAB65hGhtr/Kmb7tSkfqFmK9LYwCMK8L1xcp+XaSToPFqr7sY1jleMZUeDhV0ITA33pW+JUCx5a02veVD2Q2w== + dependencies: + chalk "^4.0.0" + cosmiconfig "^7.0.0" + create-jest-runner "^0.11.2" + dot-prop "^6.0.1" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^28.0.2: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js2xmlparser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== + dependencies: + xmlcreate "^2.0.4" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdoc-template@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsdoc-template/-/jsdoc-template-1.2.0.tgz#5ad0c85ed509a5de9b51537835c1762d90e75564" + integrity sha512-Njl5ROuIDCcNfdDjIFHw5URlziXwZXgcUkch9GhSlf7U/q0Et7kwDxlapZsgJ8dzSboCq9xx6MSFlkAm1WhGEw== + dependencies: + gulp-css-base64 "^1.3.4" + +jsdoc@^3.6.11: + version "3.6.11" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.6.11.tgz#8bbb5747e6f579f141a5238cbad4e95e004458ce" + integrity sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg== + dependencies: + "@babel/parser" "^7.9.4" + "@types/markdown-it" "^12.2.3" + bluebird "^3.7.2" + catharsis "^0.9.0" + escape-string-regexp "^2.0.0" + js2xmlparser "^4.0.2" + klaw "^3.0.0" + markdown-it "^12.3.2" + markdown-it-anchor "^8.4.1" + marked "^4.0.10" + mkdirp "^1.0.4" + requizzle "^0.2.3" + strip-json-comments "^3.1.0" + taffydb "2.6.2" + underscore "~1.13.2" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@^3.0.2, jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.1, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== + dependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" + integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== + dependencies: + uc.micro "^1.0.1" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ== + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + integrity sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA== + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg== + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ== + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + integrity sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ== + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + integrity sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + integrity sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ== + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ== + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== + +lodash.template@>=4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + integrity sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ== + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + integrity sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +markdown-it-anchor@^8.4.1: + version "8.6.6" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.6.tgz#4a12e358c9c2167ee28cb7a5f10e29d6f1ffd7ca" + integrity sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA== + +markdown-it@^12.3.2: + version "12.3.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" + integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== + dependencies: + argparse "^2.0.1" + entities "~2.1.0" + linkify-it "^3.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +marked@^4.0.10: + version "4.2.5" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.5.tgz#979813dfc1252cc123a79b71b095759a32f42a5d" + integrity sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.0, minimist@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + integrity sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q== + dependencies: + duplexer2 "0.0.2" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + integrity sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== + dependencies: + find-up "^6.3.0" + +platform@^1.3.3: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pure-rand@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.1.tgz#31207dddd15d43f299fdcdb2f572df65030c19af" + integrity sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg== + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regexpu-core@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac" + integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.11.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.11.0: + version "0.11.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.2.tgz#7404ad42be00226d72bcf1f003f1f441861913d8" + integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== + dependencies: + jsesc "~3.0.2" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + integrity sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ== + +request@^2.67.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requizzle@^0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c" + integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== + dependencies: + lodash "^4.17.21" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" + integrity sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw== + +resolve@^1.14.2, resolve@^1.20.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.9.1: + version "0.9.2" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +taffydb@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" + integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.26.0: + version "5.36.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.36.0.tgz#8b0dbed459ac40ff7b4c9fd5a3a2029de105180e" + integrity sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throat@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +ts-api-utils@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.0.tgz#709c6f2076e511a81557f3d07a0cbd566ae8195c" + integrity sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ== + +tsd-jsdoc@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tsd-jsdoc/-/tsd-jsdoc-2.5.0.tgz#0677aa952e1a8e3ebbb5bcf7d6e2f0301d71e151" + integrity sha512-80fcJLAiUeerg4xPftp+iEEKWUjJjHk9AvcHwJqA8Zw0R4oASdu3kT/plE/Zj19QUTz8KupyOX25zStlNJjS9g== + dependencies: + typescript "^3.2.1" + +tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typescript@^3.2.1: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + +typescript@^5.6.3: + version "5.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" + integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +underscore@~1.13.2: + version "1.13.6" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" + integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + +undici-types@~6.19.8: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + integrity sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA== + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@5.96.0: + version "5.96.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.96.0.tgz#1e4dc9d1d819ff1b1f89d53e45a299ffe9231a8a" + integrity sha512-gvn84AfQ4f6vUeNWmFuRp3vGERyxK4epADKTaAo60K0EQbY/YBNQbXH3Ji/ZRK5M25O/XneAOuChF4xQZjQ4xA== + dependencies: + "@types/estree" "^1.0.6" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.14.0" + browserslist "^4.24.0" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +xmlcreate@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yarpm@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/yarpm/-/yarpm-1.2.0.tgz#5baaf5589f6237426cf76f812296dcf9b4254f55" + integrity sha512-gxN4Ali09uey8EpLfbYG+bTXf1hF6TA5oAXFPpKi5Nt5aztXU9AIEksXE0lpuvC50vL4De/KIeP8JXgYOZ8KbQ== + dependencies: + command-exists "^1.2.9" + cross-spawn "^7.0.3" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==