8 lines
816 KiB
Plaintext
8 lines
816 KiB
Plaintext
{
|
|
"version": 3,
|
|
"sources": ["../src/version.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isPrototype.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_overArg.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nativeKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObject.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isFunction.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_coreJsData.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isMasked.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_toSource.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsNative.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getNative.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_DataView.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Map.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Promise.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Set.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_WeakMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsArguments.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArguments.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isLength.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArrayLike.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/stubFalse.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isBuffer.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsTypedArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseUnary.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nodeUtil.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isTypedArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isEmpty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/eq.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_assocIndexOf.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_ListCache.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nativeCreate.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Hash.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isKeyable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getMapData.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_MapCache.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Stack.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setCacheAdd.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setCacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_SetCache.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arraySome.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_equalArrays.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Uint8Array.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_equalByTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayPush.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetAllKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayFilter.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/stubArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getSymbols.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTimes.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isIndex.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayLikeKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/keys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getAllKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_equalObjects.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsEqualDeep.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsEqual.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsMatch.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isStrictComparable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getMatchData.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_matchesStrictComparable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseMatches.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isKey.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/memoize.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_memoizeCapped.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stringToPath.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castPath.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_toKey.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/get.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseHasIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasPath.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/hasIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseMatchesProperty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/identity.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseProperty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePropertyDeep.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/property.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIteratee.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createBaseFor.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseFor.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseForOwn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createBaseEach.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseEach.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/map.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayEach.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castFunction.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/forEach.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseValues.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/values.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/has.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_defineProperty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseAssignValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_assignValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_copyObject.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseAssign.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nativeKeysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseKeysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/keysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseAssignIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cloneBuffer.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_copyArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_copySymbols.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getPrototype.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getSymbolsIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_copySymbolsIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getAllKeysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_initCloneArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cloneArrayBuffer.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cloneDataView.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cloneRegExp.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cloneSymbol.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cloneTypedArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_initCloneByTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseCreate.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_initCloneObject.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseClone.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/clone.js", "../../utils/src/print.ts", "../../utils/src/timer.ts", "../../utils/src/to-fast-properties.ts", "../../utils/src/api.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSlice.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_trimmedEndIndex.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTrim.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toNumber.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toFinite.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toInteger.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/drop.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsRegExp.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isRegExp.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePickBy.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/pickBy.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_apply.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_overRest.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/constant.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSetToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_shortOut.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseRest.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isIterateeCall.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createAssigner.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/assign.js", "../../gast/src/model.ts", "../../gast/src/visitor.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSome.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/some.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayEvery.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseEvery.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/every.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseFindIndex.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsNaN.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_strictIndexOf.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIndexOf.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/includes.js", "../../gast/src/helpers.ts", "../../gast/src/api.ts", "../src/parse/grammar/rest.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isFlattenable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseFlatten.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/flatten.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayIncludes.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayIncludesWith.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/noop.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseUniq.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/uniq.js", "../src/parse/grammar/first.ts", "../src/parse/constants.ts", "../src/parse/grammar/follow.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isUndefined.js", "../../../node_modules/.pnpm/regexp-to-ast@0.5.0/node_modules/regexp-to-ast/lib/regexp-to-ast.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/head.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/first.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/compact.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseFilter.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/negate.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/reject.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseDifference.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArrayLikeObject.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/difference.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/indexOf.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createFind.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/findIndex.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/find.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/filter.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/defaults.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayReduce.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseReduce.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/reduce.js", "../src/scan/reg_exp_parser.ts", "../src/scan/reg_exp.ts", "../src/scan/lexer.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/last.js", "../src/scan/tokens.ts", "../src/scan/lexer_errors_public.ts", "../src/scan/lexer_public.ts", "../src/scan/tokens_public.ts", "../src/parse/errors_public.ts", "../src/parse/grammar/resolver.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayAggregator.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseAggregator.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createAggregator.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/groupBy.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/flatMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/dropRight.js", "../src/parse/grammar/interpreter.ts", "../src/parse/grammar/lookahead.ts", "../src/parse/grammar/checks.ts", "../src/parse/grammar/gast/gast_resolver_public.ts", "../src/parse/exceptions_public.ts", "../src/parse/parser/traits/recoverable.ts", "../src/parse/grammar/keys.ts", "../src/parse/grammar/llk_lookahead.ts", "../src/parse/parser/traits/looksahead.ts", "../src/parse/cst/cst.ts", "../src/lang/lang_extensions.ts", "../src/parse/cst/cst_visitor.ts", "../src/parse/parser/traits/tree_builder.ts", "../src/parse/parser/traits/lexer_adapter.ts", "../src/parse/parser/traits/recognizer_api.ts", "../src/parse/parser/traits/recognizer_engine.ts", "../src/parse/parser/traits/error_handler.ts", "../src/parse/parser/traits/context_assist.ts", "../src/parse/parser/traits/gast_recorder.ts", "../src/parse/parser/traits/perf_tracer.ts", "../src/parse/parser/utils/apply_mixins.ts", "../src/parse/parser/parser.ts", "../../cst-dts-gen/src/model.ts", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castSlice.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicode.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stringToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCaseFirst.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/upperFirst.js", "../../cst-dts-gen/src/generate.ts", "../../cst-dts-gen/src/api.ts", "../src/diagrams/render_public.ts", "../src/api.ts"],
|
|
"sourcesContent": ["// needs a separate module as this is required inside chevrotain productive code\n// and also in the entry point for webpack(api.ts).\n// A separate file avoids cyclic dependencies and webpack errors.\nexport const VERSION = \"10.5.0\"\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", "var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", "var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", "var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n", "var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n", "var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", "var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n", "var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", "var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n", "var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n", "var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n", "var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", "var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", "var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", "var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", "var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n", "var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n", "var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n", "var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n", "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", "var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n", "var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n", "var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n", "var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n", "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n", "var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n", "var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n", "var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n", "var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n", "var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n", "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n", "var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n", "var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n", "var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n", "var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n", "var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n", "var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n", "var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n", "var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n", "var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n", "var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n", "var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n", "var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n", "var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n", "var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n", "export function PRINT_ERROR(msg: string) {\n /* istanbul ignore else - can't override global.console in node.js */\n if (console && console.error) {\n console.error(`Error: ${msg}`)\n }\n}\n\nexport function PRINT_WARNING(msg: string) {\n /* istanbul ignore else - can't override global.console in node.js*/\n if (console && console.warn) {\n // TODO: modify docs accordingly\n console.warn(`Warning: ${msg}`)\n }\n}\n", "export function timer<T>(func: () => T): { time: number; value: T } {\n const start = new Date().getTime()\n const val = func()\n const end = new Date().getTime()\n const total = end - start\n return { time: total, value: val }\n}\n", "// based on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\nexport function toFastProperties(toBecomeFast: any) {\n function FakeConstructor() {}\n\n // If our object is used as a constructor it would receive\n FakeConstructor.prototype = toBecomeFast\n const fakeInstance = new (FakeConstructor as any)()\n\n function fakeAccess() {\n return typeof fakeInstance.bar\n }\n\n // help V8 understand this is a \"real\" prototype by actually using\n // the fake instance.\n fakeAccess()\n fakeAccess()\n\n // Always true condition to suppress the Firefox warning of unreachable\n // code after a return statement.\n if (1) return toBecomeFast\n\n // Eval prevents optimization of this method (even though this is dead code)\n /* istanbul ignore next */\n // tslint:disable-next-line\n eval(toBecomeFast)\n}\n", "export { PRINT_WARNING, PRINT_ERROR } from \"./print\"\nexport { timer } from \"./timer\"\nexport { toFastProperties } from \"./to-fast-properties\"\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n", "var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n", "var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n", "var baseSlice = require('./_baseSlice'),\n toInteger = require('./toInteger');\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n}\n\nmodule.exports = drop;\n", "var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n", "var baseIsRegExp = require('./_baseIsRegExp'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n", "var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n", "var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n", "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nmodule.exports = pickBy;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n", "var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n", "var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n", "var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n", "var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n", "var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n", "var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n", "var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n", "import map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport isString from \"lodash/isString\"\nimport isRegExp from \"lodash/isRegExp\"\nimport pickBy from \"lodash/pickBy\"\nimport assign from \"lodash/assign\"\nimport {\n IGASTVisitor,\n IProduction,\n IProductionWithOccurrence,\n ISerializedGast,\n TokenType\n} from \"@chevrotain/types\"\n\n// TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\nfunction tokenLabel(tokType: TokenType): string {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n}\n\n// TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\nfunction hasTokenLabel(\n obj: TokenType\n): obj is TokenType & Pick<Required<TokenType>, \"LABEL\"> {\n return isString(obj.LABEL) && obj.LABEL !== \"\"\n}\n\nexport abstract class AbstractProduction<T extends IProduction = IProduction>\n implements IProduction\n{\n public get definition(): T[] {\n return this._definition\n }\n public set definition(value: T[]) {\n this._definition = value\n }\n\n constructor(protected _definition: T[]) {}\n\n accept(visitor: IGASTVisitor): void {\n visitor.visit(this)\n forEach(this.definition, (prod) => {\n prod.accept(visitor)\n })\n }\n}\n\nexport class NonTerminal\n extends AbstractProduction\n implements IProductionWithOccurrence\n{\n public nonTerminalName!: string\n public label?: string\n public referencedRule!: Rule\n public idx: number = 1\n\n constructor(options: {\n nonTerminalName: string\n label?: string\n referencedRule?: Rule\n idx?: number\n }) {\n super([])\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n\n set definition(definition: IProduction[]) {\n // immutable\n }\n\n get definition(): IProduction[] {\n if (this.referencedRule !== undefined) {\n return this.referencedRule.definition\n }\n return []\n }\n\n accept(visitor: IGASTVisitor): void {\n visitor.visit(this)\n // don't visit children of a reference, we will get cyclic infinite loops if we do so\n }\n}\n\nexport class Rule extends AbstractProduction {\n public name!: string\n public orgText: string = \"\"\n\n constructor(options: {\n name: string\n definition: IProduction[]\n orgText?: string\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Alternative extends AbstractProduction {\n public ignoreAmbiguities: boolean = false\n\n constructor(options: {\n definition: IProduction[]\n ignoreAmbiguities?: boolean\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Option\n extends AbstractProduction\n implements IProductionWithOccurrence\n{\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n idx?: number\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class RepetitionMandatory\n extends AbstractProduction\n implements IProductionWithOccurrence\n{\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n idx?: number\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class RepetitionMandatoryWithSeparator\n extends AbstractProduction\n implements IProductionWithOccurrence\n{\n public separator!: TokenType\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n separator: TokenType\n idx?: number\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Repetition\n extends AbstractProduction\n implements IProductionWithOccurrence\n{\n public separator!: TokenType\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n idx?: number\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class RepetitionWithSeparator\n extends AbstractProduction\n implements IProductionWithOccurrence\n{\n public separator!: TokenType\n public idx: number = 1\n public maxLookahead?: number\n\n constructor(options: {\n definition: IProduction[]\n separator: TokenType\n idx?: number\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Alternation\n extends AbstractProduction<Alternative>\n implements IProductionWithOccurrence\n{\n public idx: number = 1\n public ignoreAmbiguities: boolean = false\n public hasPredicates: boolean = false\n public maxLookahead?: number\n\n public get definition(): Alternative[] {\n return this._definition\n }\n public set definition(value: Alternative[]) {\n this._definition = value\n }\n\n constructor(options: {\n definition: Alternative[]\n idx?: number\n ignoreAmbiguities?: boolean\n hasPredicates?: boolean\n maxLookahead?: number\n }) {\n super(options.definition)\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n}\n\nexport class Terminal implements IProductionWithOccurrence {\n public terminalType!: TokenType\n public label?: string\n public idx: number = 1\n\n constructor(options: {\n terminalType: TokenType\n label?: string\n idx?: number\n }) {\n assign(\n this,\n pickBy(options, (v) => v !== undefined)\n )\n }\n\n accept(visitor: IGASTVisitor): void {\n visitor.visit(this)\n }\n}\n\nexport interface ISerializedBasic extends ISerializedGast {\n type:\n | \"Alternative\"\n | \"Option\"\n | \"RepetitionMandatory\"\n | \"Repetition\"\n | \"Alternation\"\n idx?: number\n}\n\nexport interface ISerializedGastRule extends ISerializedGast {\n type: \"Rule\"\n name: string\n orgText: string\n}\n\nexport interface ISerializedNonTerminal extends ISerializedGast {\n type: \"NonTerminal\"\n name: string\n label?: string\n idx: number\n}\n\nexport interface ISerializedTerminal extends ISerializedGast {\n type: \"Terminal\"\n name: string\n terminalLabel?: string\n label?: string\n pattern?: string\n idx: number\n}\n\nexport interface ISerializedTerminalWithSeparator extends ISerializedGast {\n type: \"RepetitionMandatoryWithSeparator\" | \"RepetitionWithSeparator\"\n idx: number\n separator: ISerializedTerminal\n}\n\nexport type ISerializedGastAny =\n | ISerializedBasic\n | ISerializedGastRule\n | ISerializedNonTerminal\n | ISerializedTerminal\n | ISerializedTerminalWithSeparator\n\nexport function serializeGrammar(topRules: Rule[]): ISerializedGast[] {\n return map(topRules, serializeProduction)\n}\n\nexport function serializeProduction(node: IProduction): ISerializedGast {\n function convertDefinition(definition: IProduction[]): ISerializedGast[] {\n return map(definition, serializeProduction)\n }\n /* istanbul ignore else */\n if (node instanceof NonTerminal) {\n const serializedNonTerminal: ISerializedNonTerminal = {\n type: \"NonTerminal\",\n name: node.nonTerminalName,\n idx: node.idx\n }\n\n if (isString(node.label)) {\n serializedNonTerminal.label = node.label\n }\n\n return serializedNonTerminal\n } else if (node instanceof Alternative) {\n return <ISerializedBasic>{\n type: \"Alternative\",\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Option) {\n return <ISerializedBasic>{\n type: \"Option\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof RepetitionMandatory) {\n return <ISerializedBasic>{\n type: \"RepetitionMandatory\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof RepetitionMandatoryWithSeparator) {\n return <ISerializedTerminalWithSeparator>{\n type: \"RepetitionMandatoryWithSeparator\",\n idx: node.idx,\n separator: <ISerializedTerminal>(\n serializeProduction(new Terminal({ terminalType: node.separator }))\n ),\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof RepetitionWithSeparator) {\n return <ISerializedTerminalWithSeparator>{\n type: \"RepetitionWithSeparator\",\n idx: node.idx,\n separator: <ISerializedTerminal>(\n serializeProduction(new Terminal({ terminalType: node.separator }))\n ),\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Repetition) {\n return <ISerializedBasic>{\n type: \"Repetition\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Alternation) {\n return <ISerializedBasic>{\n type: \"Alternation\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n }\n } else if (node instanceof Terminal) {\n const serializedTerminal = <ISerializedTerminal>{\n type: \"Terminal\",\n name: node.terminalType.name,\n label: tokenLabel(node.terminalType),\n idx: node.idx\n }\n\n if (isString(node.label)) {\n serializedTerminal.terminalLabel = node.label\n }\n\n const pattern = node.terminalType.PATTERN\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp(pattern)\n ? (<any>pattern).source\n : pattern\n }\n\n return serializedTerminal\n } else if (node instanceof Rule) {\n return <ISerializedGastRule>{\n type: \"Rule\",\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition)\n }\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n", "import {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./model\"\nimport { IProduction } from \"@chevrotain/types\"\n\nexport abstract class GAstVisitor {\n public visit(node: IProduction): any {\n const nodeAny: any = node\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny)\n case Alternative:\n return this.visitAlternative(nodeAny)\n case Option:\n return this.visitOption(nodeAny)\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny)\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny)\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny)\n case Repetition:\n return this.visitRepetition(nodeAny)\n case Alternation:\n return this.visitAlternation(nodeAny)\n case Terminal:\n return this.visitTerminal(nodeAny)\n case Rule:\n return this.visitRule(nodeAny)\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match\")\n }\n }\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitNonTerminal(node: NonTerminal): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitAlternative(node: Alternative): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitOption(node: Option): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitRepetition(node: Repetition): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitRepetitionMandatory(node: RepetitionMandatory): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitRepetitionMandatoryWithSeparator(\n node: RepetitionMandatoryWithSeparator\n ): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitRepetitionWithSeparator(node: RepetitionWithSeparator): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitAlternation(node: Alternation): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitTerminal(node: Terminal): any {}\n\n /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */\n public visitRule(node: Rule): any {}\n}\n", "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n", "var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n", "/**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\nfunction arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = arrayEvery;\n", "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\nfunction baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n}\n\nmodule.exports = baseEvery;\n", "var arrayEvery = require('./_arrayEvery'),\n baseEvery = require('./_baseEvery'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = every;\n", "/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n", "/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n", "/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n", "var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n", "var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n", "import some from \"lodash/some\"\nimport every from \"lodash/every\"\nimport has from \"lodash/has\"\nimport includes from \"lodash/includes\"\nimport {\n AbstractProduction,\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"./model\"\nimport { GAstVisitor } from \"./visitor\"\nimport { IProduction, IProductionWithOccurrence } from \"@chevrotain/types\"\n\nexport function isSequenceProd(\n prod: IProduction\n): prod is { definition: IProduction[] } & IProduction {\n return (\n prod instanceof Alternative ||\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionMandatory ||\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod instanceof RepetitionWithSeparator ||\n prod instanceof Terminal ||\n prod instanceof Rule\n )\n}\n\nexport function isOptionalProd(\n prod: IProduction,\n alreadyVisited: NonTerminal[] = []\n): boolean {\n const isDirectlyOptional =\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionWithSeparator\n if (isDirectlyOptional) {\n return true\n }\n\n // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n // empty optional top rule\n // may be indirectly optional ((A?B?C?) | (D?E?F?))\n if (prod instanceof Alternation) {\n // for OR its enough for just one of the alternatives to be optional\n return some((<Alternation>prod).definition, (subProd: IProduction) => {\n return isOptionalProd(subProd, alreadyVisited)\n })\n } else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) {\n // avoiding stack overflow due to infinite recursion\n return false\n } else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod)\n }\n return every(\n (<AbstractProduction>prod).definition,\n (subProd: IProduction) => {\n return isOptionalProd(subProd, alreadyVisited)\n }\n )\n } else {\n return false\n }\n}\n\nexport function isBranchingProd(\n prod: IProduction\n): prod is { definition: IProduction[] } & IProduction {\n return prod instanceof Alternation\n}\n\nexport function getProductionDslName(prod: IProductionWithOccurrence): string {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return \"SUBRULE\"\n } else if (prod instanceof Option) {\n return \"OPTION\"\n } else if (prod instanceof Alternation) {\n return \"OR\"\n } else if (prod instanceof RepetitionMandatory) {\n return \"AT_LEAST_ONE\"\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return \"AT_LEAST_ONE_SEP\"\n } else if (prod instanceof RepetitionWithSeparator) {\n return \"MANY_SEP\"\n } else if (prod instanceof Repetition) {\n return \"MANY\"\n } else if (prod instanceof Terminal) {\n return \"CONSUME\"\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n", "export {\n Rule,\n Terminal,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Alternation,\n Alternative,\n serializeGrammar,\n serializeProduction\n} from \"./model\"\n\nexport { GAstVisitor } from \"./visitor\"\n\nexport {\n getProductionDslName,\n isOptionalProd,\n isBranchingProd,\n isSequenceProd\n} from \"./helpers\"\n", "import drop from \"lodash/drop\"\nimport forEach from \"lodash/forEach\"\nimport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Terminal\n} from \"@chevrotain/gast\"\nimport { IProduction } from \"@chevrotain/types\"\n\n/**\n * A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\nexport abstract class RestWalker {\n walk(prod: { definition: IProduction[] }, prevRest: any[] = []): void {\n forEach(prod.definition, (subProd: IProduction, index) => {\n const currRest = drop(prod.definition, index + 1)\n /* istanbul ignore else */\n if (subProd instanceof NonTerminal) {\n this.walkProdRef(subProd, currRest, prevRest)\n } else if (subProd instanceof Terminal) {\n this.walkTerminal(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternative) {\n this.walkFlat(subProd, currRest, prevRest)\n } else if (subProd instanceof Option) {\n this.walkOption(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatory) {\n this.walkAtLeastOne(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n this.walkAtLeastOneSep(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionWithSeparator) {\n this.walkManySep(subProd, currRest, prevRest)\n } else if (subProd instanceof Repetition) {\n this.walkMany(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternation) {\n this.walkOr(subProd, currRest, prevRest)\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n }\n\n walkTerminal(\n terminal: Terminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {}\n\n walkProdRef(\n refProd: NonTerminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {}\n\n walkFlat(\n flatProd: Alternative,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABCDEF => after the D the rest is EF\n const fullOrRest = currRest.concat(prevRest)\n this.walk(flatProd, <any>fullOrRest)\n }\n\n walkOption(\n optionProd: Option,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(DE)?F => after the (DE)? the rest is F\n const fullOrRest = currRest.concat(prevRest)\n this.walk(optionProd, <any>fullOrRest)\n }\n\n walkAtLeastOne(\n atLeastOneProd: RepetitionMandatory,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n const fullAtLeastOneRest: IProduction[] = [\n new Option({ definition: atLeastOneProd.definition })\n ].concat(<any>currRest, <any>prevRest)\n this.walk(atLeastOneProd, fullAtLeastOneRest)\n }\n\n walkAtLeastOneSep(\n atLeastOneSepProd: RepetitionMandatoryWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n const fullAtLeastOneSepRest = restForRepetitionWithSeparator(\n atLeastOneSepProd,\n currRest,\n prevRest\n )\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest)\n }\n\n walkMany(\n manyProd: Repetition,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n const fullManyRest: IProduction[] = [\n new Option({ definition: manyProd.definition })\n ].concat(<any>currRest, <any>prevRest)\n this.walk(manyProd, fullManyRest)\n }\n\n walkManySep(\n manySepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n const fullManySepRest = restForRepetitionWithSeparator(\n manySepProd,\n currRest,\n prevRest\n )\n this.walk(manySepProd, fullManySepRest)\n }\n\n walkOr(\n orProd: Alternation,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n const fullOrRest = currRest.concat(prevRest)\n // walk all different alternatives\n forEach(orProd.definition, (alt) => {\n // wrapping each alternative in a single definition wrapper\n // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows\n // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1\n const prodWrapper = new Alternative({ definition: [alt] })\n this.walk(prodWrapper, <any>fullOrRest)\n })\n }\n}\n\nfunction restForRepetitionWithSeparator(\n repSepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n) {\n const repSepRest = [\n new Option({\n definition: [\n new Terminal({ terminalType: repSepProd.separator }) as IProduction\n ].concat(repSepProd.definition)\n }) as IProduction\n ]\n const fullRepSepRest: IProduction[] = repSepRest.concat(currRest, prevRest)\n return fullRepSepRest\n}\n", "var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n", "var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n", "var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n", "var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n", "/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n", "/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n", "var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n", "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n", "var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n", "import flatten from \"lodash/flatten\"\nimport uniq from \"lodash/uniq\"\nimport map from \"lodash/map\"\nimport { NonTerminal, Terminal } from \"@chevrotain/gast\"\nimport {\n isBranchingProd,\n isOptionalProd,\n isSequenceProd\n} from \"@chevrotain/gast\"\nimport { IProduction, TokenType } from \"@chevrotain/types\"\n\nexport function first(prod: IProduction): TokenType[] {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n // this could in theory cause infinite loops if\n // (1) prod A refs prod B.\n // (2) prod B refs prod A\n // (3) AB can match the empty set\n // in other words a cycle where everything is optional so the first will keep\n // looking ahead for the next optional part and will never exit\n // currently there is no safeguard for this unique edge case because\n // (1) not sure a grammar in which this can happen is useful for anything (productive)\n return first((<NonTerminal>prod).referencedRule)\n } else if (prod instanceof Terminal) {\n return firstForTerminal(<Terminal>prod)\n } else if (isSequenceProd(prod)) {\n return firstForSequence(prod)\n } else if (isBranchingProd(prod)) {\n return firstForBranching(prod)\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function firstForSequence(prod: {\n definition: IProduction[]\n}): TokenType[] {\n let firstSet: TokenType[] = []\n const seq = prod.definition\n let nextSubProdIdx = 0\n let hasInnerProdsRemaining = seq.length > nextSubProdIdx\n let currSubProd\n // so we enter the loop at least once (if the definition is not empty\n let isLastInnerProdOptional = true\n // scan a sequence until it's end or until we have found a NONE optional production in it\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx]\n isLastInnerProdOptional = isOptionalProd(currSubProd)\n firstSet = firstSet.concat(first(currSubProd))\n nextSubProdIdx = nextSubProdIdx + 1\n hasInnerProdsRemaining = seq.length > nextSubProdIdx\n }\n\n return uniq(firstSet)\n}\n\nexport function firstForBranching(prod: {\n definition: IProduction[]\n}): TokenType[] {\n const allAlternativesFirsts: TokenType[][] = map(\n prod.definition,\n (innerProd) => {\n return first(innerProd)\n }\n )\n return uniq(flatten<TokenType>(allAlternativesFirsts))\n}\n\nexport function firstForTerminal(terminal: Terminal): TokenType[] {\n return [terminal.terminalType]\n}\n", "// TODO: can this be removed? where is it used?\nexport const IN = \"_~IN~_\"\n", "import { RestWalker } from \"./rest\"\nimport { first } from \"./first\"\nimport forEach from \"lodash/forEach\"\nimport assign from \"lodash/assign\"\nimport { IN } from \"../constants\"\nimport { Alternative, NonTerminal, Rule, Terminal } from \"@chevrotain/gast\"\nimport { IProduction, TokenType } from \"@chevrotain/types\"\n\n// This ResyncFollowsWalker computes all of the follows required for RESYNC\n// (skipping reference production).\nexport class ResyncFollowsWalker extends RestWalker {\n public follows: Record<string, TokenType[]> = {}\n\n constructor(private topProd: Rule) {\n super()\n }\n\n startWalking(): Record<string, TokenType[]> {\n this.walk(this.topProd)\n return this.follows\n }\n\n walkTerminal(\n terminal: Terminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // do nothing! just like in the public sector after 13:00\n }\n\n walkProdRef(\n refProd: NonTerminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n const followName =\n buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +\n this.topProd.name\n const fullRest: IProduction[] = currRest.concat(prevRest)\n const restProd = new Alternative({ definition: fullRest })\n const t_in_topProd_follows = first(restProd)\n this.follows[followName] = t_in_topProd_follows\n }\n}\n\nexport function computeAllProdsFollows(\n topProductions: Rule[]\n): Record<string, TokenType[]> {\n const reSyncFollows = {}\n\n forEach(topProductions, (topProd) => {\n const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking()\n assign(reSyncFollows, currRefsFollow)\n })\n return reSyncFollows\n}\n\nexport function buildBetweenProdsFollowPrefix(\n inner: Rule,\n occurenceInParent: number\n): string {\n return inner.name + occurenceInParent + IN\n}\n\nexport function buildInProdFollowPrefix(terminal: Terminal): string {\n const terminalName = terminal.terminalType.name\n return terminalName + terminal.idx + IN\n}\n", "/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n", ";(function(root, factory) {\n // istanbul ignore next\n if (typeof define === \"function\" && define.amd) {\n // istanbul ignore next\n define([], factory)\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory()\n } else {\n // istanbul ignore next\n root.regexpToAst = factory()\n }\n})(\n typeof self !== \"undefined\"\n ? // istanbul ignore next\n self\n : this,\n function() {\n // references\n // https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983\n // https://www.ecma-international.org/ecma-262/8.0/index.html#prod-Pattern\n function RegExpParser() {}\n\n RegExpParser.prototype.saveState = function() {\n return {\n idx: this.idx,\n input: this.input,\n groupIdx: this.groupIdx\n }\n }\n\n RegExpParser.prototype.restoreState = function(newState) {\n this.idx = newState.idx\n this.input = newState.input\n this.groupIdx = newState.groupIdx\n }\n\n RegExpParser.prototype.pattern = function(input) {\n // parser state\n this.idx = 0\n this.input = input\n this.groupIdx = 0\n\n this.consumeChar(\"/\")\n var value = this.disjunction()\n this.consumeChar(\"/\")\n\n var flags = {\n type: \"Flags\",\n loc: { begin: this.idx, end: input.length },\n global: false,\n ignoreCase: false,\n multiLine: false,\n unicode: false,\n sticky: false\n }\n\n while (this.isRegExpFlag()) {\n switch (this.popChar()) {\n case \"g\":\n addFlag(flags, \"global\")\n break\n case \"i\":\n addFlag(flags, \"ignoreCase\")\n break\n case \"m\":\n addFlag(flags, \"multiLine\")\n break\n case \"u\":\n addFlag(flags, \"unicode\")\n break\n case \"y\":\n addFlag(flags, \"sticky\")\n break\n }\n }\n\n if (this.idx !== this.input.length) {\n throw Error(\n \"Redundant input: \" + this.input.substring(this.idx)\n )\n }\n return {\n type: \"Pattern\",\n flags: flags,\n value: value,\n loc: this.loc(0)\n }\n }\n\n RegExpParser.prototype.disjunction = function() {\n var alts = []\n var begin = this.idx\n\n alts.push(this.alternative())\n\n while (this.peekChar() === \"|\") {\n this.consumeChar(\"|\")\n alts.push(this.alternative())\n }\n\n return { type: \"Disjunction\", value: alts, loc: this.loc(begin) }\n }\n\n RegExpParser.prototype.alternative = function() {\n var terms = []\n var begin = this.idx\n\n while (this.isTerm()) {\n terms.push(this.term())\n }\n\n return { type: \"Alternative\", value: terms, loc: this.loc(begin) }\n }\n\n RegExpParser.prototype.term = function() {\n if (this.isAssertion()) {\n return this.assertion()\n } else {\n return this.atom()\n }\n }\n\n RegExpParser.prototype.assertion = function() {\n var begin = this.idx\n switch (this.popChar()) {\n case \"^\":\n return {\n type: \"StartAnchor\",\n loc: this.loc(begin)\n }\n case \"$\":\n return { type: \"EndAnchor\", loc: this.loc(begin) }\n // '\\b' or '\\B'\n case \"\\\\\":\n switch (this.popChar()) {\n case \"b\":\n return {\n type: \"WordBoundary\",\n loc: this.loc(begin)\n }\n case \"B\":\n return {\n type: \"NonWordBoundary\",\n loc: this.loc(begin)\n }\n }\n // istanbul ignore next\n throw Error(\"Invalid Assertion Escape\")\n // '(?=' or '(?!'\n case \"(\":\n this.consumeChar(\"?\")\n\n var type\n switch (this.popChar()) {\n case \"=\":\n type = \"Lookahead\"\n break\n case \"!\":\n type = \"NegativeLookahead\"\n break\n }\n ASSERT_EXISTS(type)\n\n var disjunction = this.disjunction()\n\n this.consumeChar(\")\")\n\n return {\n type: type,\n value: disjunction,\n loc: this.loc(begin)\n }\n }\n // istanbul ignore next\n ASSERT_NEVER_REACH_HERE()\n }\n\n RegExpParser.prototype.quantifier = function(isBacktracking) {\n var range\n var begin = this.idx\n switch (this.popChar()) {\n case \"*\":\n range = {\n atLeast: 0,\n atMost: Infinity\n }\n break\n case \"+\":\n range = {\n atLeast: 1,\n atMost: Infinity\n }\n break\n case \"?\":\n range = {\n atLeast: 0,\n atMost: 1\n }\n break\n case \"{\":\n var atLeast = this.integerIncludingZero()\n switch (this.popChar()) {\n case \"}\":\n range = {\n atLeast: atLeast,\n atMost: atLeast\n }\n break\n case \",\":\n var atMost\n if (this.isDigit()) {\n atMost = this.integerIncludingZero()\n range = {\n atLeast: atLeast,\n atMost: atMost\n }\n } else {\n range = {\n atLeast: atLeast,\n atMost: Infinity\n }\n }\n this.consumeChar(\"}\")\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n ASSERT_EXISTS(range)\n break\n }\n\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n\n ASSERT_EXISTS(range)\n\n if (this.peekChar(0) === \"?\") {\n this.consumeChar(\"?\")\n range.greedy = false\n } else {\n range.greedy = true\n }\n\n range.type = \"Quantifier\"\n range.loc = this.loc(begin)\n return range\n }\n\n RegExpParser.prototype.atom = function() {\n var atom\n var begin = this.idx\n switch (this.peekChar()) {\n case \".\":\n atom = this.dotAll()\n break\n case \"\\\\\":\n atom = this.atomEscape()\n break\n case \"[\":\n atom = this.characterClass()\n break\n case \"(\":\n atom = this.group()\n break\n }\n\n if (atom === undefined && this.isPatternCharacter()) {\n atom = this.patternCharacter()\n }\n\n ASSERT_EXISTS(atom)\n\n atom.loc = this.loc(begin)\n\n if (this.isQuantifier()) {\n atom.quantifier = this.quantifier()\n }\n\n return atom\n }\n\n RegExpParser.prototype.dotAll = function() {\n this.consumeChar(\".\")\n return {\n type: \"Set\",\n complement: true,\n value: [cc(\"\\n\"), cc(\"\\r\"), cc(\"\\u2028\"), cc(\"\\u2029\")]\n }\n }\n\n RegExpParser.prototype.atomEscape = function() {\n this.consumeChar(\"\\\\\")\n\n switch (this.peekChar()) {\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n return this.decimalEscapeAtom()\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape()\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom()\n case \"c\":\n return this.controlLetterEscapeAtom()\n case \"0\":\n return this.nulCharacterAtom()\n case \"x\":\n return this.hexEscapeSequenceAtom()\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n\n RegExpParser.prototype.decimalEscapeAtom = function() {\n var value = this.positiveInteger()\n\n return { type: \"GroupBackReference\", value: value }\n }\n\n RegExpParser.prototype.characterClassEscape = function() {\n var set\n var complement = false\n switch (this.popChar()) {\n case \"d\":\n set = digitsCharCodes\n break\n case \"D\":\n set = digitsCharCodes\n complement = true\n break\n case \"s\":\n set = whitespaceCodes\n break\n case \"S\":\n set = whitespaceCodes\n complement = true\n break\n case \"w\":\n set = wordCharCodes\n break\n case \"W\":\n set = wordCharCodes\n complement = true\n break\n }\n\n ASSERT_EXISTS(set)\n\n return { type: \"Set\", value: set, complement: complement }\n }\n\n RegExpParser.prototype.controlEscapeAtom = function() {\n var escapeCode\n switch (this.popChar()) {\n case \"f\":\n escapeCode = cc(\"\\f\")\n break\n case \"n\":\n escapeCode = cc(\"\\n\")\n break\n case \"r\":\n escapeCode = cc(\"\\r\")\n break\n case \"t\":\n escapeCode = cc(\"\\t\")\n break\n case \"v\":\n escapeCode = cc(\"\\v\")\n break\n }\n ASSERT_EXISTS(escapeCode)\n\n return { type: \"Character\", value: escapeCode }\n }\n\n RegExpParser.prototype.controlLetterEscapeAtom = function() {\n this.consumeChar(\"c\")\n var letter = this.popChar()\n if (/[a-zA-Z]/.test(letter) === false) {\n throw Error(\"Invalid \")\n }\n\n var letterCode = letter.toUpperCase().charCodeAt(0) - 64\n return { type: \"Character\", value: letterCode }\n }\n\n RegExpParser.prototype.nulCharacterAtom = function() {\n // TODO implement '[lookahead \u2209 DecimalDigit]'\n // TODO: for the deprecated octal escape sequence\n this.consumeChar(\"0\")\n return { type: \"Character\", value: cc(\"\\0\") }\n }\n\n RegExpParser.prototype.hexEscapeSequenceAtom = function() {\n this.consumeChar(\"x\")\n return this.parseHexDigits(2)\n }\n\n RegExpParser.prototype.regExpUnicodeEscapeSequenceAtom = function() {\n this.consumeChar(\"u\")\n return this.parseHexDigits(4)\n }\n\n RegExpParser.prototype.identityEscapeAtom = function() {\n // TODO: implement \"SourceCharacter but not UnicodeIDContinue\"\n // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments\n var escapedChar = this.popChar()\n return { type: \"Character\", value: cc(escapedChar) }\n }\n\n RegExpParser.prototype.classPatternCharacterAtom = function() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n // istanbul ignore next\n case \"\\\\\":\n // istanbul ignore next\n case \"]\":\n throw Error(\"TBD\")\n default:\n var nextChar = this.popChar()\n return { type: \"Character\", value: cc(nextChar) }\n }\n }\n\n RegExpParser.prototype.characterClass = function() {\n var set = []\n var complement = false\n this.consumeChar(\"[\")\n if (this.peekChar(0) === \"^\") {\n this.consumeChar(\"^\")\n complement = true\n }\n\n while (this.isClassAtom()) {\n var from = this.classAtom()\n var isFromSingleChar = from.type === \"Character\"\n if (isFromSingleChar && this.isRangeDash()) {\n this.consumeChar(\"-\")\n var to = this.classAtom()\n var isToSingleChar = to.type === \"Character\"\n\n // a range can only be used when both sides are single characters\n if (isToSingleChar) {\n if (to.value < from.value) {\n throw Error(\"Range out of order in character class\")\n }\n set.push({ from: from.value, to: to.value })\n } else {\n // literal dash\n insertToSet(from.value, set)\n set.push(cc(\"-\"))\n insertToSet(to.value, set)\n }\n } else {\n insertToSet(from.value, set)\n }\n }\n\n this.consumeChar(\"]\")\n\n return { type: \"Set\", complement: complement, value: set }\n }\n\n RegExpParser.prototype.classAtom = function() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case \"]\":\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n throw Error(\"TBD\")\n case \"\\\\\":\n return this.classEscape()\n default:\n return this.classPatternCharacterAtom()\n }\n }\n\n RegExpParser.prototype.classEscape = function() {\n this.consumeChar(\"\\\\\")\n switch (this.peekChar()) {\n // Matches a backspace.\n // (Not to be confused with \\b word boundary outside characterClass)\n case \"b\":\n this.consumeChar(\"b\")\n return { type: \"Character\", value: cc(\"\\u0008\") }\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape()\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom()\n case \"c\":\n return this.controlLetterEscapeAtom()\n case \"0\":\n return this.nulCharacterAtom()\n case \"x\":\n return this.hexEscapeSequenceAtom()\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n\n RegExpParser.prototype.group = function() {\n var capturing = true\n this.consumeChar(\"(\")\n switch (this.peekChar(0)) {\n case \"?\":\n this.consumeChar(\"?\")\n this.consumeChar(\":\")\n capturing = false\n break\n default:\n this.groupIdx++\n break\n }\n var value = this.disjunction()\n this.consumeChar(\")\")\n\n var groupAst = {\n type: \"Group\",\n capturing: capturing,\n value: value\n }\n\n if (capturing) {\n groupAst.idx = this.groupIdx\n }\n\n return groupAst\n }\n\n RegExpParser.prototype.positiveInteger = function() {\n var number = this.popChar()\n\n // istanbul ignore next - can't ever get here due to previous lookahead checks\n // still implementing this error checking in case this ever changes.\n if (decimalPatternNoZero.test(number) === false) {\n throw Error(\"Expecting a positive integer\")\n }\n\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n\n return parseInt(number, 10)\n }\n\n RegExpParser.prototype.integerIncludingZero = function() {\n var number = this.popChar()\n if (decimalPattern.test(number) === false) {\n throw Error(\"Expecting an integer\")\n }\n\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n\n return parseInt(number, 10)\n }\n\n RegExpParser.prototype.patternCharacter = function() {\n var nextChar = this.popChar()\n switch (nextChar) {\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n // istanbul ignore next\n case \"^\":\n // istanbul ignore next\n case \"$\":\n // istanbul ignore next\n case \"\\\\\":\n // istanbul ignore next\n case \".\":\n // istanbul ignore next\n case \"*\":\n // istanbul ignore next\n case \"+\":\n // istanbul ignore next\n case \"?\":\n // istanbul ignore next\n case \"(\":\n // istanbul ignore next\n case \")\":\n // istanbul ignore next\n case \"[\":\n // istanbul ignore next\n case \"|\":\n // istanbul ignore next\n throw Error(\"TBD\")\n default:\n return { type: \"Character\", value: cc(nextChar) }\n }\n }\n RegExpParser.prototype.isRegExpFlag = function() {\n switch (this.peekChar(0)) {\n case \"g\":\n case \"i\":\n case \"m\":\n case \"u\":\n case \"y\":\n return true\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isRangeDash = function() {\n return this.peekChar() === \"-\" && this.isClassAtom(1)\n }\n\n RegExpParser.prototype.isDigit = function() {\n return decimalPattern.test(this.peekChar(0))\n }\n\n RegExpParser.prototype.isClassAtom = function(howMuch) {\n if (howMuch === undefined) {\n howMuch = 0\n }\n\n switch (this.peekChar(howMuch)) {\n case \"]\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false\n default:\n return true\n }\n }\n\n RegExpParser.prototype.isTerm = function() {\n return this.isAtom() || this.isAssertion()\n }\n\n RegExpParser.prototype.isAtom = function() {\n if (this.isPatternCharacter()) {\n return true\n }\n\n switch (this.peekChar(0)) {\n case \".\":\n case \"\\\\\": // atomEscape\n case \"[\": // characterClass\n // TODO: isAtom must be called before isAssertion - disambiguate\n case \"(\": // group\n return true\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isAssertion = function() {\n switch (this.peekChar(0)) {\n case \"^\":\n case \"$\":\n return true\n // '\\b' or '\\B'\n case \"\\\\\":\n switch (this.peekChar(1)) {\n case \"b\":\n case \"B\":\n return true\n default:\n return false\n }\n // '(?=' or '(?!'\n case \"(\":\n return (\n this.peekChar(1) === \"?\" &&\n (this.peekChar(2) === \"=\" || this.peekChar(2) === \"!\")\n )\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isQuantifier = function() {\n var prevState = this.saveState()\n try {\n return this.quantifier(true) !== undefined\n } catch (e) {\n return false\n } finally {\n this.restoreState(prevState)\n }\n }\n\n RegExpParser.prototype.isPatternCharacter = function() {\n switch (this.peekChar()) {\n case \"^\":\n case \"$\":\n case \"\\\\\":\n case \".\":\n case \"*\":\n case \"+\":\n case \"?\":\n case \"(\":\n case \")\":\n case \"[\":\n case \"|\":\n case \"/\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false\n default:\n return true\n }\n }\n\n RegExpParser.prototype.parseHexDigits = function(howMany) {\n var hexString = \"\"\n for (var i = 0; i < howMany; i++) {\n var hexChar = this.popChar()\n if (hexDigitPattern.test(hexChar) === false) {\n throw Error(\"Expecting a HexDecimal digits\")\n }\n hexString += hexChar\n }\n var charCode = parseInt(hexString, 16)\n return { type: \"Character\", value: charCode }\n }\n\n RegExpParser.prototype.peekChar = function(howMuch) {\n if (howMuch === undefined) {\n howMuch = 0\n }\n return this.input[this.idx + howMuch]\n }\n\n RegExpParser.prototype.popChar = function() {\n var nextChar = this.peekChar(0)\n this.consumeChar()\n return nextChar\n }\n\n RegExpParser.prototype.consumeChar = function(char) {\n if (char !== undefined && this.input[this.idx] !== char) {\n throw Error(\n \"Expected: '\" +\n char +\n \"' but found: '\" +\n this.input[this.idx] +\n \"' at offset: \" +\n this.idx\n )\n }\n\n if (this.idx >= this.input.length) {\n throw Error(\"Unexpected end of input\")\n }\n this.idx++\n }\n\n RegExpParser.prototype.loc = function(begin) {\n return { begin: begin, end: this.idx }\n }\n\n // consts and utilities\n var hexDigitPattern = /[0-9a-fA-F]/\n var decimalPattern = /[0-9]/\n var decimalPatternNoZero = /[1-9]/\n\n function cc(char) {\n return char.charCodeAt(0)\n }\n\n function insertToSet(item, set) {\n if (item.length !== undefined) {\n item.forEach(function(subItem) {\n set.push(subItem)\n })\n } else {\n set.push(item)\n }\n }\n\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw \"duplicate flag \" + flagKey\n }\n\n flagObj[flagKey] = true\n }\n\n function ASSERT_EXISTS(obj) {\n // istanbul ignore next\n if (obj === undefined) {\n throw Error(\"Internal Error - Should never get here!\")\n }\n }\n\n // istanbul ignore next\n function ASSERT_NEVER_REACH_HERE() {\n throw Error(\"Internal Error - Should never get here!\")\n }\n\n var i\n var digitsCharCodes = []\n for (i = cc(\"0\"); i <= cc(\"9\"); i++) {\n digitsCharCodes.push(i)\n }\n\n var wordCharCodes = [cc(\"_\")].concat(digitsCharCodes)\n for (i = cc(\"a\"); i <= cc(\"z\"); i++) {\n wordCharCodes.push(i)\n }\n\n for (i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n wordCharCodes.push(i)\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\n var whitespaceCodes = [\n cc(\" \"),\n cc(\"\\f\"),\n cc(\"\\n\"),\n cc(\"\\r\"),\n cc(\"\\t\"),\n cc(\"\\v\"),\n cc(\"\\t\"),\n cc(\"\\u00a0\"),\n cc(\"\\u1680\"),\n cc(\"\\u2000\"),\n cc(\"\\u2001\"),\n cc(\"\\u2002\"),\n cc(\"\\u2003\"),\n cc(\"\\u2004\"),\n cc(\"\\u2005\"),\n cc(\"\\u2006\"),\n cc(\"\\u2007\"),\n cc(\"\\u2008\"),\n cc(\"\\u2009\"),\n cc(\"\\u200a\"),\n cc(\"\\u2028\"),\n cc(\"\\u2029\"),\n cc(\"\\u202f\"),\n cc(\"\\u205f\"),\n cc(\"\\u3000\"),\n cc(\"\\ufeff\")\n ]\n\n function BaseRegExpVisitor() {}\n\n BaseRegExpVisitor.prototype.visitChildren = function(node) {\n for (var key in node) {\n var child = node[key]\n /* istanbul ignore else */\n if (node.hasOwnProperty(key)) {\n if (child.type !== undefined) {\n this.visit(child)\n } else if (Array.isArray(child)) {\n child.forEach(function(subChild) {\n this.visit(subChild)\n }, this)\n }\n }\n }\n }\n\n BaseRegExpVisitor.prototype.visit = function(node) {\n switch (node.type) {\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Disjunction\":\n this.visitDisjunction(node)\n break\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"StartAnchor\":\n this.visitStartAnchor(node)\n break\n case \"EndAnchor\":\n this.visitEndAnchor(node)\n break\n case \"WordBoundary\":\n this.visitWordBoundary(node)\n break\n case \"NonWordBoundary\":\n this.visitNonWordBoundary(node)\n break\n case \"Lookahead\":\n this.visitLookahead(node)\n break\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"Set\":\n this.visitSet(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"GroupBackReference\":\n this.visitGroupBackReference(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n }\n\n this.visitChildren(node)\n }\n\n BaseRegExpVisitor.prototype.visitPattern = function(node) {}\n\n BaseRegExpVisitor.prototype.visitFlags = function(node) {}\n\n BaseRegExpVisitor.prototype.visitDisjunction = function(node) {}\n\n BaseRegExpVisitor.prototype.visitAlternative = function(node) {}\n\n // Assertion\n BaseRegExpVisitor.prototype.visitStartAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitEndAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNonWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitLookahead = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNegativeLookahead = function(node) {}\n\n // atoms\n BaseRegExpVisitor.prototype.visitCharacter = function(node) {}\n\n BaseRegExpVisitor.prototype.visitSet = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroup = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroupBackReference = function(node) {}\n\n BaseRegExpVisitor.prototype.visitQuantifier = function(node) {}\n\n return {\n RegExpParser: RegExpParser,\n BaseRegExpVisitor: BaseRegExpVisitor,\n VERSION: \"0.5.0\"\n }\n }\n)\n", "/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nmodule.exports = head;\n", "module.exports = require('./head');\n", "/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = compact;\n", "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n", "/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nmodule.exports = negate;\n", "var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n negate = require('./negate');\n\n/**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\nfunction reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(baseIteratee(predicate, 3)));\n}\n\nmodule.exports = reject;\n", "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n", "var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n", "var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nmodule.exports = difference;\n", "var baseIndexOf = require('./_baseIndexOf'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\nfunction indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n}\n\nmodule.exports = indexOf;\n", "var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n", "var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n", "var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n", "var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n", "var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n", "/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n", "/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n", "var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n", "import {\n Alternative,\n Assertion,\n Atom,\n Disjunction,\n RegExpParser,\n RegExpPattern\n} from \"regexp-to-ast\"\n\nlet regExpAstCache: { [regex: string]: RegExpPattern } = {}\nconst regExpParser = new RegExpParser()\n\n// this should be moved to regexp-to-ast\nexport type ASTNode =\n | RegExpPattern\n | Disjunction\n | Alternative\n | Assertion\n | Atom\n\nexport function getRegExpAst(regExp: RegExp): RegExpPattern {\n const regExpStr = regExp.toString()\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr]\n } else {\n const regExpAst = regExpParser.pattern(regExpStr)\n regExpAstCache[regExpStr] = regExpAst\n return regExpAst\n }\n}\n\nexport function clearRegExpParserCache() {\n regExpAstCache = {}\n}\n", "import {\n Alternative,\n Atom,\n BaseRegExpVisitor,\n Character,\n Disjunction,\n Group,\n Set,\n Term,\n VERSION\n} from \"regexp-to-ast\"\nimport isArray from \"lodash/isArray\"\nimport every from \"lodash/every\"\nimport forEach from \"lodash/forEach\"\nimport find from \"lodash/find\"\nimport values from \"lodash/values\"\nimport includes from \"lodash/includes\"\nimport { PRINT_ERROR, PRINT_WARNING } from \"@chevrotain/utils\"\nimport { ASTNode, getRegExpAst } from \"./reg_exp_parser\"\nimport { charCodeToOptimizedIndex, minOptimizationVal } from \"./lexer\"\n\nconst complementErrorMessage =\n \"Complement Sets are not supported for first char optimization\"\nexport const failedOptimizationPrefixMsg =\n 'Unable to use \"first char\" lexer optimizations:\\n'\n\nexport function getOptimizedStartCodesIndices(\n regExp: RegExp,\n ensureOptimizations = false\n): number[] {\n try {\n const ast = getRegExpAst(regExp)\n const firstChars = firstCharOptimizedIndices(\n ast.value,\n {},\n ast.flags.ignoreCase\n )\n return firstChars\n } catch (e) {\n /* istanbul ignore next */\n // Testing this relies on the regexp-to-ast library having a bug... */\n // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to optimize: < ${regExp.toString()} >\\n` +\n \"\\tComplement Sets cannot be automatically optimized.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.\"\n )\n }\n } else {\n let msgSuffix = \"\"\n if (ensureOptimizations) {\n msgSuffix =\n \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.\"\n }\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\\n` +\n `\\tFailed parsing: < ${regExp.toString()} >\\n` +\n `\\tUsing the regexp-to-ast library version: ${VERSION}\\n` +\n \"\\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\" +\n msgSuffix\n )\n }\n }\n\n return []\n}\n\nexport function firstCharOptimizedIndices(\n ast: ASTNode,\n result: { [charCode: number]: number },\n ignoreCase: boolean\n): number[] {\n switch (ast.type) {\n case \"Disjunction\":\n for (let i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase)\n }\n break\n case \"Alternative\":\n const terms = ast.value\n for (let i = 0; i < terms.length; i++) {\n const term = terms[i]\n\n // skip terms that cannot effect the first char results\n switch (term.type) {\n case \"EndAnchor\":\n // A group back reference cannot affect potential starting char.\n // because if a back reference is the first production than automatically\n // the group being referenced has had to come BEFORE so its codes have already been added\n case \"GroupBackReference\":\n // assertions do not affect potential starting codes\n case \"Lookahead\":\n case \"NegativeLookahead\":\n case \"StartAnchor\":\n case \"WordBoundary\":\n case \"NonWordBoundary\":\n continue\n }\n\n const atom = term\n switch (atom.type) {\n case \"Character\":\n addOptimizedIdxToResult(atom.value, result, ignoreCase)\n break\n case \"Set\":\n if (atom.complement === true) {\n throw Error(complementErrorMessage)\n }\n forEach(atom.value, (code) => {\n if (typeof code === \"number\") {\n addOptimizedIdxToResult(code, result, ignoreCase)\n } else {\n // range\n const range = code as any\n // cannot optimize when ignoreCase is\n if (ignoreCase === true) {\n for (\n let rangeCode = range.from;\n rangeCode <= range.to;\n rangeCode++\n ) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n }\n // Optimization (2 orders of magnitude less work for very large ranges)\n else {\n // handle unoptimized values\n for (\n let rangeCode = range.from;\n rangeCode <= range.to && rangeCode < minOptimizationVal;\n rangeCode++\n ) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n\n // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n if (range.to >= minOptimizationVal) {\n const minUnOptVal =\n range.from >= minOptimizationVal\n ? range.from\n : minOptimizationVal\n const maxUnOptVal = range.to\n const minOptIdx = charCodeToOptimizedIndex(minUnOptVal)\n const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal)\n\n for (\n let currOptIdx = minOptIdx;\n currOptIdx <= maxOptIdx;\n currOptIdx++\n ) {\n result[currOptIdx] = currOptIdx\n }\n }\n }\n }\n })\n break\n case \"Group\":\n firstCharOptimizedIndices(atom.value, result, ignoreCase)\n break\n /* istanbul ignore next */\n default:\n throw Error(\"Non Exhaustive Match\")\n }\n\n // reached a mandatory production, no more **start** codes can be found on this alternative\n const isOptionalQuantifier =\n atom.quantifier !== undefined && atom.quantifier.atLeast === 0\n if (\n // A group may be optional due to empty contents /(?:)/\n // or if everything inside it is optional /((a)?)/\n (atom.type === \"Group\" && isWholeOptional(atom) === false) ||\n // If this term is not a group it may only be optional if it has an optional quantifier\n (atom.type !== \"Group\" && isOptionalQuantifier === false)\n ) {\n break\n }\n }\n break\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match!\")\n }\n\n // console.log(Object.keys(result).length)\n return values(result)\n}\n\nfunction addOptimizedIdxToResult(\n code: number,\n result: { [charCode: number]: number },\n ignoreCase: boolean\n) {\n const optimizedCharIdx = charCodeToOptimizedIndex(code)\n result[optimizedCharIdx] = optimizedCharIdx\n\n if (ignoreCase === true) {\n handleIgnoreCase(code, result)\n }\n}\n\nfunction handleIgnoreCase(\n code: number,\n result: { [charCode: number]: number }\n) {\n const char = String.fromCharCode(code)\n const upperChar = char.toUpperCase()\n /* istanbul ignore else */\n if (upperChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n } else {\n const lowerChar = char.toLowerCase()\n if (lowerChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n }\n }\n}\n\nfunction findCode(setNode: Set, targetCharCodes: number[]) {\n return find(setNode.value, (codeOrRange) => {\n if (typeof codeOrRange === \"number\") {\n return includes(targetCharCodes, codeOrRange)\n } else {\n // range\n const range = <any>codeOrRange\n return (\n find(\n targetCharCodes,\n (targetCode) => range.from <= targetCode && targetCode <= range.to\n ) !== undefined\n )\n }\n })\n}\n\nfunction isWholeOptional(ast: any): boolean {\n const quantifier = (ast as Atom).quantifier\n if (quantifier && quantifier.atLeast === 0) {\n return true\n }\n\n if (!ast.value) {\n return false\n }\n\n return isArray(ast.value)\n ? every(ast.value, isWholeOptional)\n : isWholeOptional(ast.value)\n}\n\nclass CharCodeFinder extends BaseRegExpVisitor {\n found: boolean = false\n\n constructor(private targetCharCodes: number[]) {\n super()\n }\n\n visitChildren(node: ASTNode) {\n // No need to keep looking...\n if (this.found === true) {\n return\n }\n\n // switch lookaheads as they do not actually consume any characters thus\n // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n switch (node.type) {\n case \"Lookahead\":\n this.visitLookahead(node)\n return\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node)\n return\n }\n\n super.visitChildren(node)\n }\n\n visitCharacter(node: Character) {\n if (includes(this.targetCharCodes, node.value)) {\n this.found = true\n }\n }\n\n visitSet(node: Set) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === undefined) {\n this.found = true\n }\n } else {\n if (findCode(node, this.targetCharCodes) !== undefined) {\n this.found = true\n }\n }\n }\n}\n\nexport function canMatchCharCode(\n charCodes: number[],\n pattern: RegExp | string\n) {\n if (pattern instanceof RegExp) {\n const ast = getRegExpAst(pattern)\n const charCodeFinder = new CharCodeFinder(charCodes)\n charCodeFinder.visit(ast)\n return charCodeFinder.found\n } else {\n return (\n find(<any>pattern, (char) => {\n return includes(charCodes, (<string>char).charCodeAt(0))\n }) !== undefined\n )\n }\n}\n", "import { BaseRegExpVisitor } from \"regexp-to-ast\"\nimport { IRegExpExec, Lexer, LexerDefinitionErrorType } from \"./lexer_public\"\nimport first from \"lodash/first\"\nimport isEmpty from \"lodash/isEmpty\"\nimport compact from \"lodash/compact\"\nimport isArray from \"lodash/isArray\"\nimport values from \"lodash/values\"\nimport flatten from \"lodash/flatten\"\nimport reject from \"lodash/reject\"\nimport difference from \"lodash/difference\"\nimport indexOf from \"lodash/indexOf\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport isString from \"lodash/isString\"\nimport isFunction from \"lodash/isFunction\"\nimport isUndefined from \"lodash/isUndefined\"\nimport find from \"lodash/find\"\nimport has from \"lodash/has\"\nimport keys from \"lodash/keys\"\nimport isRegExp from \"lodash/isRegExp\"\nimport filter from \"lodash/filter\"\nimport defaults from \"lodash/defaults\"\nimport reduce from \"lodash/reduce\"\nimport includes from \"lodash/includes\"\nimport { PRINT_ERROR } from \"@chevrotain/utils\"\nimport {\n canMatchCharCode,\n failedOptimizationPrefixMsg,\n getOptimizedStartCodesIndices\n} from \"./reg_exp\"\nimport {\n ILexerDefinitionError,\n ILineTerminatorsTester,\n IMultiModeLexerDefinition,\n IToken,\n TokenType\n} from \"@chevrotain/types\"\nimport { getRegExpAst } from \"./reg_exp_parser\"\n\nconst PATTERN = \"PATTERN\"\nexport const DEFAULT_MODE = \"defaultMode\"\nexport const MODES = \"modes\"\n\nexport interface IPatternConfig {\n pattern: IRegExpExec | string\n longerAlt: number[] | undefined\n canLineTerminator: boolean\n isCustom: boolean\n short: number | false\n group: string | undefined | false\n push: string | undefined\n pop: boolean\n tokenType: TokenType\n tokenTypeIdx: number\n}\n\nexport interface IAnalyzeResult {\n patternIdxToConfig: IPatternConfig[]\n charCodeToPatternIdxToConfig: { [charCode: number]: IPatternConfig[] }\n emptyGroups: { [groupName: string]: IToken[] }\n hasCustom: boolean\n canBeOptimized: boolean\n}\n\nexport let SUPPORT_STICKY =\n typeof (<any>new RegExp(\"(?:)\")).sticky === \"boolean\"\n\nexport function disableSticky() {\n SUPPORT_STICKY = false\n}\n\nexport function enableSticky() {\n SUPPORT_STICKY = true\n}\n\nexport function analyzeTokenTypes(\n tokenTypes: TokenType[],\n options: {\n positionTracking?: \"full\" | \"onlyStart\" | \"onlyOffset\"\n ensureOptimizations?: boolean\n lineTerminatorCharacters?: (number | string)[]\n // TODO: should `useSticky` be an argument here?\n useSticky?: boolean\n safeMode?: boolean\n tracer?: (msg: string, action: () => void) => void\n }\n): IAnalyzeResult {\n options = defaults(options, {\n useSticky: SUPPORT_STICKY,\n debug: false as boolean,\n safeMode: false as boolean,\n positionTracking: \"full\",\n lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n tracer: (msg: string, action: Function) => action()\n })\n\n const tracer = options.tracer!\n\n tracer(\"initCharCodeToOptimizedIndexMap\", () => {\n initCharCodeToOptimizedIndexMap()\n })\n\n let onlyRelevantTypes: TokenType[]\n tracer(\"Reject Lexer.NA\", () => {\n onlyRelevantTypes = reject(tokenTypes, (currType) => {\n return currType[PATTERN] === Lexer.NA\n })\n })\n\n let hasCustom = false\n let allTransformedPatterns: (IRegExpExec | string)[]\n tracer(\"Transform Patterns\", () => {\n hasCustom = false\n allTransformedPatterns = map(\n onlyRelevantTypes,\n (currType): IRegExpExec | string => {\n const currPattern = currType[PATTERN]\n\n /* istanbul ignore else */\n if (isRegExp(currPattern)) {\n const regExpSource = currPattern.source\n if (\n regExpSource.length === 1 &&\n // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== \"^\" &&\n regExpSource !== \"$\" &&\n regExpSource !== \".\" &&\n !currPattern.ignoreCase\n ) {\n return regExpSource\n } else if (\n regExpSource.length === 2 &&\n regExpSource[0] === \"\\\\\" &&\n // not a meta character\n !includes(\n [\n \"d\",\n \"D\",\n \"s\",\n \"S\",\n \"t\",\n \"r\",\n \"n\",\n \"t\",\n \"0\",\n \"c\",\n \"b\",\n \"B\",\n \"f\",\n \"v\",\n \"w\",\n \"W\"\n ],\n regExpSource[1]\n )\n ) {\n // escaped meta Characters: /\\+/ /\\[/\n // or redundant escaping: /\\a/\n // without the escaping \"\\\"\n return regExpSource[1]\n } else {\n return options.useSticky\n ? addStickyFlag(currPattern)\n : addStartOfInput(currPattern)\n }\n } else if (isFunction(currPattern)) {\n hasCustom = true\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return { exec: currPattern }\n } else if (typeof currPattern === \"object\") {\n hasCustom = true\n // ICustomPattern\n return currPattern\n } else if (typeof currPattern === \"string\") {\n if (currPattern.length === 1) {\n return currPattern\n } else {\n const escapedRegExpString = currPattern.replace(\n /[\\\\^$.*+?()[\\]{}|]/g,\n \"\\\\$&\"\n )\n const wrappedRegExp = new RegExp(escapedRegExpString)\n return options.useSticky\n ? addStickyFlag(wrappedRegExp)\n : addStartOfInput(wrappedRegExp)\n }\n } else {\n throw Error(\"non exhaustive match\")\n }\n }\n )\n })\n\n let patternIdxToType: number[]\n let patternIdxToGroup: (string | undefined | false)[]\n let patternIdxToLongerAltIdxArr: (number[] | undefined)[]\n let patternIdxToPushMode: (string | undefined)[]\n let patternIdxToPopMode: boolean[]\n tracer(\"misc mapping\", () => {\n patternIdxToType = map(\n onlyRelevantTypes,\n (currType) => currType.tokenTypeIdx!\n )\n\n patternIdxToGroup = map(onlyRelevantTypes, (clazz: any) => {\n const groupName = clazz.GROUP\n /* istanbul ignore next */\n if (groupName === Lexer.SKIPPED) {\n return undefined\n } else if (isString(groupName)) {\n return groupName\n } else if (isUndefined(groupName)) {\n return false\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n\n patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz: any) => {\n const longerAltType = clazz.LONGER_ALT\n\n if (longerAltType) {\n const longerAltIdxArr = isArray(longerAltType)\n ? map(longerAltType, (type: any) => indexOf(onlyRelevantTypes, type))\n : [indexOf(onlyRelevantTypes, longerAltType)]\n return longerAltIdxArr\n }\n })\n\n patternIdxToPushMode = map(\n onlyRelevantTypes,\n (clazz: any) => clazz.PUSH_MODE\n )\n\n patternIdxToPopMode = map(onlyRelevantTypes, (clazz: any) =>\n has(clazz, \"POP_MODE\")\n )\n })\n\n let patternIdxToCanLineTerminator: boolean[]\n tracer(\"Line Terminator Handling\", () => {\n const lineTerminatorCharCodes = getCharCodes(\n options.lineTerminatorCharacters!\n )\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false)\n if (options.positionTracking !== \"onlyOffset\") {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => {\n if (has(tokType, \"LINE_BREAKS\")) {\n return !!tokType.LINE_BREAKS\n } else {\n return (\n checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false &&\n canMatchCharCode(\n lineTerminatorCharCodes,\n tokType.PATTERN as RegExp | string\n )\n )\n }\n })\n }\n })\n\n let patternIdxToIsCustom: boolean[]\n let patternIdxToShort: (number | false)[]\n let emptyGroups!: { [groupName: string]: IToken[] }\n let patternIdxToConfig!: IPatternConfig[]\n tracer(\"Misc Mapping #2\", () => {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern)\n patternIdxToShort = map(allTransformedPatterns, isShortPattern)\n\n emptyGroups = reduce(\n onlyRelevantTypes,\n (acc, clazz: any) => {\n const groupName = clazz.GROUP\n if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n acc[groupName] = []\n }\n return acc\n },\n {} as { [groupName: string]: IToken[] }\n )\n\n patternIdxToConfig = map(\n allTransformedPatterns,\n (x, idx): IPatternConfig => {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdxArr[idx],\n canLineTerminator: patternIdxToCanLineTerminator[idx],\n isCustom: patternIdxToIsCustom[idx],\n short: patternIdxToShort[idx],\n group: patternIdxToGroup[idx],\n push: patternIdxToPushMode[idx],\n pop: patternIdxToPopMode[idx],\n tokenTypeIdx: patternIdxToType[idx],\n tokenType: onlyRelevantTypes[idx]\n }\n }\n )\n })\n\n let canBeOptimized = true\n let charCodeToPatternIdxToConfig: { [charCode: number]: IPatternConfig[] } =\n []\n\n if (!options.safeMode) {\n tracer(\"First Char Optimization\", () => {\n charCodeToPatternIdxToConfig = reduce(\n onlyRelevantTypes,\n (result, currTokType, idx) => {\n if (typeof currTokType.PATTERN === \"string\") {\n const charCode = currTokType.PATTERN.charCodeAt(0)\n const optimizedIdx = charCodeToOptimizedIndex(charCode)\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx])\n } else if (isArray(currTokType.START_CHARS_HINT)) {\n let lastOptimizedIdx: number\n forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n const charCode =\n typeof charOrInt === \"string\"\n ? charOrInt.charCodeAt(0)\n : charOrInt\n const currOptimizedIdx = charCodeToOptimizedIndex(charCode)\n // Avoid adding the config multiple times\n /* istanbul ignore else */\n // - Difficult to check this scenario effects as it is only a performance\n // optimization that does not change correctness\n if (lastOptimizedIdx !== currOptimizedIdx) {\n lastOptimizedIdx = currOptimizedIdx\n addToMapOfArrays(\n result,\n currOptimizedIdx,\n patternIdxToConfig[idx]\n )\n }\n })\n } else if (isRegExp(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to analyze < ${currTokType.PATTERN.toString()} > pattern.\\n` +\n \"\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE\"\n )\n }\n } else {\n const optimizedCodes = getOptimizedStartCodesIndices(\n currTokType.PATTERN,\n options.ensureOptimizations\n )\n /* istanbul ignore if */\n // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n // the first should be a different validation and the second cannot be tested.\n if (isEmpty(optimizedCodes)) {\n // we cannot understand what codes may start possible matches\n // The optimization correctness requires knowing start codes for ALL patterns.\n // Not actually sure this is an error, no debug message\n canBeOptimized = false\n }\n forEach(optimizedCodes, (code) => {\n addToMapOfArrays(result, code, patternIdxToConfig[idx])\n })\n }\n } else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tTokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter.\\n` +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE\"\n )\n }\n canBeOptimized = false\n }\n\n return result\n },\n [] as { [charCode: number]: IPatternConfig[] }\n )\n })\n }\n\n return {\n emptyGroups: emptyGroups,\n patternIdxToConfig: patternIdxToConfig,\n charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n hasCustom: hasCustom,\n canBeOptimized: canBeOptimized\n }\n}\n\nexport function validatePatterns(\n tokenTypes: TokenType[],\n validModesNames: string[]\n): ILexerDefinitionError[] {\n let errors: ILexerDefinitionError[] = []\n\n const missingResult = findMissingPatterns(tokenTypes)\n errors = errors.concat(missingResult.errors)\n\n const invalidResult = findInvalidPatterns(missingResult.valid)\n const validTokenTypes = invalidResult.valid\n errors = errors.concat(invalidResult.errors)\n\n errors = errors.concat(validateRegExpPattern(validTokenTypes))\n\n errors = errors.concat(findInvalidGroupType(validTokenTypes))\n\n errors = errors.concat(\n findModesThatDoNotExist(validTokenTypes, validModesNames)\n )\n\n errors = errors.concat(findUnreachablePatterns(validTokenTypes))\n\n return errors\n}\n\nfunction validateRegExpPattern(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n let errors: ILexerDefinitionError[] = []\n const withRegExpPatterns = filter(tokenTypes, (currTokType) =>\n isRegExp(currTokType[PATTERN])\n )\n\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns))\n\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns))\n\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns))\n\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns))\n\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns))\n\n return errors\n}\n\nexport interface ILexerFilterResult {\n errors: ILexerDefinitionError[]\n valid: TokenType[]\n}\n\nexport function findMissingPatterns(\n tokenTypes: TokenType[]\n): ILexerFilterResult {\n const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n return !has(currType, PATTERN)\n })\n\n const errors = map(tokenTypesWithMissingPattern, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType]\n }\n })\n\n const valid = difference(tokenTypes, tokenTypesWithMissingPattern)\n return { errors, valid }\n}\n\nexport function findInvalidPatterns(\n tokenTypes: TokenType[]\n): ILexerFilterResult {\n const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n return (\n !isRegExp(pattern) &&\n !isFunction(pattern) &&\n !has(pattern, \"exec\") &&\n !isString(pattern)\n )\n })\n\n const errors = map(tokenTypesWithInvalidPattern, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' can only be a RegExp, a\" +\n \" Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType]\n }\n })\n\n const valid = difference(tokenTypes, tokenTypesWithInvalidPattern)\n return { errors, valid }\n}\n\nconst end_of_input = /[^\\\\][$]/\n\nexport function findEndOfInputAnchor(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n class EndAnchorFinder extends BaseRegExpVisitor {\n found = false\n\n visitEndAnchor(node: unknown) {\n this.found = true\n }\n }\n\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n\n try {\n const regexpAst = getRegExpAst(pattern as RegExp)\n const endAnchorVisitor = new EndAnchorFinder()\n endAnchorVisitor.visit(regexpAst)\n\n return endAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return end_of_input.test((pattern as RegExp).source)\n }\n })\n\n const errors = map(invalidRegex, (currType) => {\n return {\n message:\n \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n \"\\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nexport function findEmptyMatchRegExps(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n const matchesEmptyString = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN as RegExp\n return pattern.test(\"\")\n })\n\n const errors = map(matchesEmptyString, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nconst start_of_input = /[^\\\\[][\\^]|^\\^/\n\nexport function findStartOfInputAnchor(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n class StartAnchorFinder extends BaseRegExpVisitor {\n found = false\n\n visitStartAnchor(node: unknown) {\n this.found = true\n }\n }\n\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN as RegExp\n try {\n const regexpAst = getRegExpAst(pattern)\n const startAnchorVisitor = new StartAnchorFinder()\n startAnchorVisitor.visit(regexpAst)\n\n return startAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return start_of_input.test(pattern.source)\n }\n })\n\n const errors = map(invalidRegex, (currType) => {\n return {\n message:\n \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nexport function findUnsupportedFlags(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n const invalidFlags = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n return pattern instanceof RegExp && (pattern.multiline || pattern.global)\n })\n\n const errors = map(invalidFlags, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\n// This can only test for identical duplicate RegExps, not semantically equivalent ones.\nexport function findDuplicatePatterns(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n const found: TokenType[] = []\n let identicalPatterns = map(tokenTypes, (outerType: any) => {\n return reduce(\n tokenTypes,\n (result, innerType) => {\n if (\n outerType.PATTERN.source === (innerType.PATTERN as RegExp).source &&\n !includes(found, innerType) &&\n innerType.PATTERN !== Lexer.NA\n ) {\n // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n // in essence we are creating Equivalence classes on equality relation.\n found.push(innerType)\n result.push(innerType)\n return result\n }\n return result\n },\n [] as TokenType[]\n )\n })\n\n identicalPatterns = compact(identicalPatterns)\n\n const duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n return currIdenticalSet.length > 1\n })\n\n const errors = map(duplicatePatterns, (setOfIdentical: any) => {\n const tokenTypeNames = map(setOfIdentical, (currType: any) => {\n return currType.name\n })\n\n const dupPatternSrc = (<any>first(setOfIdentical)).PATTERN\n return {\n message:\n `The same RegExp pattern ->${dupPatternSrc}<-` +\n `has been used in all of the following Token Types: ${tokenTypeNames.join(\n \", \"\n )} <-`,\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical\n }\n })\n\n return errors\n}\n\nexport function findInvalidGroupType(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n const invalidTypes = filter(tokenTypes, (clazz: any) => {\n if (!has(clazz, \"GROUP\")) {\n return false\n }\n const group = clazz.GROUP\n\n return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group)\n })\n\n const errors = map(invalidTypes, (currType) => {\n return {\n message:\n \"Token Type: ->\" +\n currType.name +\n \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType]\n }\n })\n\n return errors\n}\n\nexport function findModesThatDoNotExist(\n tokenTypes: TokenType[],\n validModes: string[]\n): ILexerDefinitionError[] {\n const invalidModes = filter(tokenTypes, (clazz: any) => {\n return (\n clazz.PUSH_MODE !== undefined && !includes(validModes, clazz.PUSH_MODE)\n )\n })\n\n const errors = map(invalidModes, (tokType) => {\n const msg =\n `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-` +\n `which does not exist`\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType]\n }\n })\n\n return errors\n}\n\nexport function findUnreachablePatterns(\n tokenTypes: TokenType[]\n): ILexerDefinitionError[] {\n const errors: ILexerDefinitionError[] = []\n\n const canBeTested = reduce(\n tokenTypes,\n (result, tokType, idx) => {\n const pattern = tokType.PATTERN\n\n if (pattern === Lexer.NA) {\n return result\n }\n\n // a more comprehensive validation for all forms of regExps would require\n // deeper regExp analysis capabilities\n if (isString(pattern)) {\n result.push({ str: pattern, idx, tokenType: tokType })\n } else if (isRegExp(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx, tokenType: tokType })\n }\n return result\n },\n [] as { str: string; idx: number; tokenType: TokenType }[]\n )\n\n forEach(tokenTypes, (tokType, testIdx) => {\n forEach(canBeTested, ({ str, idx, tokenType }) => {\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n const msg =\n `Token: ->${tokenType.name}<- can never be matched.\\n` +\n `Because it appears AFTER the Token Type ->${tokType.name}<-` +\n `in the lexer's definition.\\n` +\n `See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType]\n })\n }\n })\n })\n\n return errors\n}\n\nfunction testTokenType(str: string, pattern: any): boolean {\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n const regExpArray = pattern.exec(str)\n return regExpArray !== null && regExpArray.index === 0\n } else if (isFunction(pattern)) {\n // maintain the API of custom patterns\n return pattern(str, 0, [], {})\n } else if (has(pattern, \"exec\")) {\n // maintain the API of custom patterns\n return pattern.exec(str, 0, [], {})\n } else if (typeof pattern === \"string\") {\n return pattern === str\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nfunction noMetaChar(regExp: RegExp): boolean {\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n const metaChars = [\n \".\",\n \"\\\\\",\n \"[\",\n \"]\",\n \"|\",\n \"^\",\n \"$\",\n \"(\",\n \")\",\n \"?\",\n \"*\",\n \"+\",\n \"{\"\n ]\n return (\n find(metaChars, (char) => regExp.source.indexOf(char) !== -1) === undefined\n )\n}\n\nexport function addStartOfInput(pattern: RegExp): RegExp {\n const flags = pattern.ignoreCase ? \"i\" : \"\"\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`^(?:${pattern.source})`, flags)\n}\n\nexport function addStickyFlag(pattern: RegExp): RegExp {\n const flags = pattern.ignoreCase ? \"iy\" : \"y\"\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`${pattern.source}`, flags)\n}\n\nexport function performRuntimeChecks(\n lexerDefinition: IMultiModeLexerDefinition,\n trackLines: boolean,\n lineTerminatorCharacters: (number | string)[]\n): ILexerDefinitionError[] {\n const errors: ILexerDefinitionError[] = []\n\n // some run time checks to help the end users.\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message:\n \"A MultiMode Lexer cannot be initialized without a <\" +\n DEFAULT_MODE +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\n })\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message:\n \"A MultiMode Lexer cannot be initialized without a <\" +\n MODES +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\n })\n }\n\n if (\n has(lexerDefinition, MODES) &&\n has(lexerDefinition, DEFAULT_MODE) &&\n !has(lexerDefinition.modes, lexerDefinition.defaultMode)\n ) {\n errors.push({\n message:\n `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>` +\n `which does not exist\\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\n })\n }\n\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n forEach(currModeValue, (currTokType, currIdx) => {\n if (isUndefined(currTokType)) {\n errors.push({\n message:\n `A Lexer cannot be initialized using an undefined Token Type. Mode:` +\n `<${currModeName}> at index: <${currIdx}>\\n`,\n type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\n })\n } else if (has(currTokType, \"LONGER_ALT\")) {\n const longerAlt = isArray(currTokType.LONGER_ALT)\n ? currTokType.LONGER_ALT\n : [currTokType.LONGER_ALT]\n forEach(longerAlt, (currLongerAlt) => {\n if (\n !isUndefined(currLongerAlt) &&\n !includes(currModeValue, currLongerAlt)\n ) {\n errors.push({\n message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}>\\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\n })\n }\n })\n }\n })\n })\n }\n\n return errors\n}\n\nexport function performWarningRuntimeChecks(\n lexerDefinition: IMultiModeLexerDefinition,\n trackLines: boolean,\n lineTerminatorCharacters: (number | string)[]\n): ILexerDefinitionError[] {\n const warnings = []\n let hasAnyLineBreak = false\n const allTokenTypes = compact(flatten(values(lexerDefinition.modes)))\n\n const concreteTokenTypes = reject(\n allTokenTypes,\n (currType) => currType[PATTERN] === Lexer.NA\n )\n const terminatorCharCodes = getCharCodes(lineTerminatorCharacters)\n if (trackLines) {\n forEach(concreteTokenTypes, (tokType) => {\n const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes)\n if (currIssue !== false) {\n const message = buildLineBreakIssueMessage(tokType, currIssue)\n const warningDescriptor = {\n message,\n type: currIssue.issue,\n tokenType: tokType\n }\n warnings.push(warningDescriptor)\n } else {\n // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n if (has(tokType, \"LINE_BREAKS\")) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true\n }\n } else {\n if (\n canMatchCharCode(terminatorCharCodes, tokType.PATTERN as RegExp)\n ) {\n hasAnyLineBreak = true\n }\n }\n }\n })\n }\n\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message:\n \"Warning: No LINE_BREAKS Found.\\n\" +\n \"\\tThis Lexer has been defined to track line and column information,\\n\" +\n \"\\tBut none of the Token Types can be identified as matching a line terminator.\\n\" +\n \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS\n })\n }\n return warnings\n}\n\nexport function cloneEmptyGroups(emptyGroups: {\n [groupName: string]: IToken\n}): { [groupName: string]: IToken } {\n const clonedResult: any = {}\n const groupKeys = keys(emptyGroups)\n\n forEach(groupKeys, (currKey) => {\n const currGroupValue = emptyGroups[currKey]\n\n /* istanbul ignore else */\n if (isArray(currGroupValue)) {\n clonedResult[currKey] = []\n } else {\n throw Error(\"non exhaustive match\")\n }\n })\n\n return clonedResult\n}\n\n// TODO: refactor to avoid duplication\nexport function isCustomPattern(tokenType: TokenType): boolean {\n const pattern = tokenType.PATTERN\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n return false\n } else if (isFunction(pattern)) {\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return true\n } else if (has(pattern, \"exec\")) {\n // ICustomPattern\n return true\n } else if (isString(pattern)) {\n return false\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function isShortPattern(pattern: any): number | false {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0)\n } else {\n return false\n }\n}\n\n/**\n * Faster than using a RegExp for default newline detection during lexing.\n */\nexport const LineTerminatorOptimizedTester: ILineTerminatorsTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function (text) {\n const len = text.length\n for (let i = this.lastIndex; i < len; i++) {\n const c = text.charCodeAt(i)\n if (c === 10) {\n this.lastIndex = i + 1\n return true\n } else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2\n } else {\n this.lastIndex = i + 1\n }\n return true\n }\n }\n return false\n },\n\n lastIndex: 0\n}\n\nfunction checkLineBreaksIssues(\n tokType: TokenType,\n lineTerminatorCharCodes: number[]\n):\n | {\n issue:\n | LexerDefinitionErrorType.IDENTIFY_TERMINATOR\n | LexerDefinitionErrorType.CUSTOM_LINE_BREAK\n errMsg?: string\n }\n | false {\n if (has(tokType, \"LINE_BREAKS\")) {\n // if the user explicitly declared the line_breaks option we will respect their choice\n // and assume it is correct.\n return false\n } else {\n /* istanbul ignore else */\n if (isRegExp(tokType.PATTERN)) {\n try {\n // TODO: why is the casting suddenly needed?\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN as RegExp)\n } catch (e) {\n /* istanbul ignore next - to test this we would have to mock <canMatchCharCode> to throw an error */\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: (e as Error).message\n }\n }\n return false\n } else if (isString(tokType.PATTERN)) {\n // string literal patterns can always be analyzed to detect line terminator usage\n return false\n } else if (isCustomPattern(tokType)) {\n // custom token types\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK }\n } else {\n throw Error(\"non exhaustive match\")\n }\n }\n}\n\nexport function buildLineBreakIssueMessage(\n tokType: TokenType,\n details: {\n issue:\n | LexerDefinitionErrorType.IDENTIFY_TERMINATOR\n | LexerDefinitionErrorType.CUSTOM_LINE_BREAK\n errMsg?: string\n }\n): string {\n /* istanbul ignore else */\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return (\n \"Warning: unable to identify line terminator usage in pattern.\\n\" +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n `\\t Root cause: ${details.errMsg}.\\n` +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\"\n )\n } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return (\n \"Warning: A Custom Token Pattern should specify the <line_breaks> option.\\n\" +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\"\n )\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nfunction getCharCodes(charsOrCodes: (number | string)[]): number[] {\n const charCodes = map(charsOrCodes, (numOrString) => {\n if (isString(numOrString)) {\n return numOrString.charCodeAt(0)\n } else {\n return numOrString\n }\n })\n\n return charCodes\n}\n\nfunction addToMapOfArrays<T>(\n map: Record<number, T[]>,\n key: number,\n value: T\n): void {\n if (map[key] === undefined) {\n map[key] = [value]\n } else {\n map[key].push(value)\n }\n}\n\nexport const minOptimizationVal = 256\n\n/**\n * We are mapping charCode above ASCI (256) into buckets each in the size of 256.\n * This is because ASCI are the most common start chars so each one of those will get its own\n * possible token configs vector.\n *\n * Tokens starting with charCodes \"above\" ASCI are uncommon, so we can \"afford\"\n * to place these into buckets of possible token configs, What we gain from\n * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'\n * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).\n * Our 'charCodeToPatternIdxToConfig' max size will now be:\n * 256 + (2^16 / 2^8) - 1 === 511\n *\n * note the hack for fast division integer part extraction\n * See: https://stackoverflow.com/a/4228528\n */\nlet charCodeToOptimizedIdxMap: number[] = []\nexport function charCodeToOptimizedIndex(charCode: number): number {\n return charCode < minOptimizationVal\n ? charCode\n : charCodeToOptimizedIdxMap[charCode]\n}\n\n/**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\nfunction initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536)\n for (let i = 0; i < 65536; i++) {\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i\n }\n }\n}\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n", "import isEmpty from \"lodash/isEmpty\"\nimport compact from \"lodash/compact\"\nimport isArray from \"lodash/isArray\"\nimport flatten from \"lodash/flatten\"\nimport difference from \"lodash/difference\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport has from \"lodash/has\"\nimport includes from \"lodash/includes\"\nimport clone from \"lodash/clone\"\nimport { IToken, TokenType } from \"@chevrotain/types\"\n\nexport function tokenStructuredMatcher(\n tokInstance: IToken,\n tokConstructor: TokenType\n) {\n const instanceType = tokInstance.tokenTypeIdx\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true\n } else {\n return (\n tokConstructor.isParent === true &&\n tokConstructor.categoryMatchesMap![instanceType] === true\n )\n }\n}\n\n// Optimized tokenMatcher in case our grammar does not use token categories\n// Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\nexport function tokenStructuredMatcherNoCategories(\n token: IToken,\n tokType: TokenType\n) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx\n}\n\nexport let tokenShortNameIdx = 1\nexport const tokenIdxToClass: { [tokenIdx: number]: TokenType } = {}\n\nexport function augmentTokenTypes(tokenTypes: TokenType[]): void {\n // collect the parent Token Types as well.\n const tokenTypesAndParents = expandCategories(tokenTypes)\n\n // add required tokenType and categoryMatches properties\n assignTokenDefaultProps(tokenTypesAndParents)\n\n // fill up the categoryMatches\n assignCategoriesMapProp(tokenTypesAndParents)\n assignCategoriesTokensProp(tokenTypesAndParents)\n\n forEach(tokenTypesAndParents, (tokType) => {\n tokType.isParent = tokType.categoryMatches!.length > 0\n })\n}\n\nexport function expandCategories(tokenTypes: TokenType[]): TokenType[] {\n let result = clone(tokenTypes)\n\n let categories = tokenTypes\n let searching = true\n while (searching) {\n categories = compact(\n flatten(map(categories, (currTokType) => currTokType.CATEGORIES))\n )\n\n const newCategories = difference(categories, result)\n\n result = result.concat(newCategories)\n\n if (isEmpty(newCategories)) {\n searching = false\n } else {\n categories = newCategories\n }\n }\n return result\n}\n\nexport function assignTokenDefaultProps(tokenTypes: TokenType[]): void {\n forEach(tokenTypes, (currTokType) => {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType\n ;(<any>currTokType).tokenTypeIdx = tokenShortNameIdx++\n }\n\n // CATEGORIES? : TokenType | TokenType[]\n if (\n hasCategoriesProperty(currTokType) &&\n !isArray(currTokType.CATEGORIES)\n // &&\n // !isUndefined(currTokType.CATEGORIES.PATTERN)\n ) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES as unknown as TokenType]\n }\n\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = []\n }\n\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = []\n }\n\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {}\n }\n })\n}\n\nexport function assignCategoriesTokensProp(tokenTypes: TokenType[]): void {\n forEach(tokenTypes, (currTokType) => {\n // avoid duplications\n currTokType.categoryMatches = []\n forEach(currTokType.categoryMatchesMap!, (val, key) => {\n currTokType.categoryMatches!.push(\n tokenIdxToClass[key as unknown as number].tokenTypeIdx!\n )\n })\n })\n}\n\nexport function assignCategoriesMapProp(tokenTypes: TokenType[]): void {\n forEach(tokenTypes, (currTokType) => {\n singleAssignCategoriesToksMap([], currTokType)\n })\n}\n\nexport function singleAssignCategoriesToksMap(\n path: TokenType[],\n nextNode: TokenType\n): void {\n forEach(path, (pathNode) => {\n nextNode.categoryMatchesMap![pathNode.tokenTypeIdx!] = true\n })\n\n forEach(nextNode.CATEGORIES, (nextCategory) => {\n const newPath = path.concat(nextNode)\n // avoids infinite loops due to cyclic categories.\n if (!includes(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory)\n }\n })\n}\n\nexport function hasShortKeyProperty(tokType: TokenType): boolean {\n return has(tokType, \"tokenTypeIdx\")\n}\n\nexport function hasCategoriesProperty(tokType: TokenType): boolean {\n return has(tokType, \"CATEGORIES\")\n}\n\nexport function hasExtendingTokensTypesProperty(tokType: TokenType): boolean {\n return has(tokType, \"categoryMatches\")\n}\n\nexport function hasExtendingTokensTypesMapProperty(\n tokType: TokenType\n): boolean {\n return has(tokType, \"categoryMatchesMap\")\n}\n\nexport function isTokenType(tokType: TokenType): boolean {\n return has(tokType, \"tokenTypeIdx\")\n}\n", "import { ILexerErrorMessageProvider, IToken } from \"@chevrotain/types\"\n\nexport const defaultLexerErrorProvider: ILexerErrorMessageProvider = {\n buildUnableToPopLexerModeMessage(token: IToken): string {\n return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`\n },\n\n buildUnexpectedCharactersMessage(\n fullText: string,\n startOffset: number,\n length: number,\n line?: number,\n column?: number\n ): string {\n return (\n `unexpected character: ->${fullText.charAt(\n startOffset\n )}<- at offset: ${startOffset},` + ` skipped ${length} characters.`\n )\n }\n}\n", "import {\n analyzeTokenTypes,\n charCodeToOptimizedIndex,\n cloneEmptyGroups,\n DEFAULT_MODE,\n IAnalyzeResult,\n IPatternConfig,\n LineTerminatorOptimizedTester,\n performRuntimeChecks,\n performWarningRuntimeChecks,\n SUPPORT_STICKY,\n validatePatterns\n} from \"./lexer\"\nimport noop from \"lodash/noop\"\nimport isEmpty from \"lodash/isEmpty\"\nimport isArray from \"lodash/isArray\"\nimport last from \"lodash/last\"\nimport reject from \"lodash/reject\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport keys from \"lodash/keys\"\nimport isUndefined from \"lodash/isUndefined\"\nimport identity from \"lodash/identity\"\nimport assign from \"lodash/assign\"\nimport reduce from \"lodash/reduce\"\nimport clone from \"lodash/clone\"\nimport { PRINT_WARNING, timer, toFastProperties } from \"@chevrotain/utils\"\nimport { augmentTokenTypes } from \"./tokens\"\nimport {\n CustomPatternMatcherFunc,\n CustomPatternMatcherReturn,\n ILexerConfig,\n ILexerDefinitionError,\n ILexingError,\n IMultiModeLexerDefinition,\n IToken,\n TokenType\n} from \"@chevrotain/types\"\nimport { defaultLexerErrorProvider } from \"./lexer_errors_public\"\nimport { clearRegExpParserCache } from \"./reg_exp_parser\"\n\nexport interface ILexingResult {\n tokens: IToken[]\n groups: { [groupName: string]: IToken[] }\n errors: ILexingError[]\n}\n\nexport enum LexerDefinitionErrorType {\n MISSING_PATTERN,\n INVALID_PATTERN,\n EOI_ANCHOR_FOUND,\n UNSUPPORTED_FLAGS_FOUND,\n DUPLICATE_PATTERNS_FOUND,\n INVALID_GROUP_TYPE_FOUND,\n PUSH_MODE_DOES_NOT_EXIST,\n MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE,\n MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY,\n MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST,\n LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED,\n SOI_ANCHOR_FOUND,\n EMPTY_MATCH_PATTERN,\n NO_LINE_BREAKS_FLAGS,\n UNREACHABLE_PATTERN,\n IDENTIFY_TERMINATOR,\n CUSTOM_LINE_BREAK,\n MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\n}\n\nexport interface IRegExpExec {\n exec: CustomPatternMatcherFunc\n}\n\nconst DEFAULT_LEXER_CONFIG: Required<ILexerConfig> = {\n deferDefinitionErrorsHandling: false,\n positionTracking: \"full\",\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: [\"\\n\", \"\\r\"],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false,\n recoveryEnabled: true\n}\n\nObject.freeze(DEFAULT_LEXER_CONFIG)\n\nexport class Lexer {\n public static SKIPPED =\n \"This marks a skipped Token pattern, this means each token identified by it will\" +\n \"be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\"\n\n public static NA = /NOT_APPLICABLE/\n public lexerDefinitionErrors: ILexerDefinitionError[] = []\n public lexerDefinitionWarning: ILexerDefinitionError[] = []\n\n protected patternIdxToConfig: Record<string, IPatternConfig[]> = {}\n protected charCodeToPatternIdxToConfig: {\n [modeName: string]: { [charCode: number]: IPatternConfig[] }\n } = {}\n\n protected modes: string[] = []\n protected defaultMode!: string\n protected emptyGroups: { [groupName: string]: IToken } = {}\n\n private config: Required<ILexerConfig>\n private trackStartLines: boolean = true\n private trackEndLines: boolean = true\n private hasCustom: boolean = false\n private canModeBeOptimized: Record<string, boolean> = {}\n\n private traceInitPerf!: boolean | number\n private traceInitMaxIdent!: number\n private traceInitIndent: number\n\n constructor(\n protected lexerDefinition: TokenType[] | IMultiModeLexerDefinition,\n config: ILexerConfig = DEFAULT_LEXER_CONFIG\n ) {\n if (typeof config === \"boolean\") {\n throw Error(\n \"The second argument to the Lexer constructor is now an ILexerConfig Object.\\n\" +\n \"a boolean 2nd argument is no longer supported\"\n )\n }\n\n // todo: defaults func?\n this.config = assign({}, DEFAULT_LEXER_CONFIG, config) as any\n\n const traceInitVal = this.config.traceInitPerf\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity\n this.traceInitPerf = true\n } else if (typeof traceInitVal === \"number\") {\n this.traceInitMaxIdent = traceInitVal\n this.traceInitPerf = true\n }\n this.traceInitIndent = -1\n\n this.TRACE_INIT(\"Lexer Constructor\", () => {\n let actualDefinition!: IMultiModeLexerDefinition\n let hasOnlySingleMode = true\n this.TRACE_INIT(\"Lexer Config handling\", () => {\n if (\n this.config.lineTerminatorsPattern ===\n DEFAULT_LEXER_CONFIG.lineTerminatorsPattern\n ) {\n // optimized built-in implementation for the defaults definition of lineTerminators\n this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester\n } else {\n if (\n this.config.lineTerminatorCharacters ===\n DEFAULT_LEXER_CONFIG.lineTerminatorCharacters\n ) {\n throw Error(\n \"Error: Missing <lineTerminatorCharacters> property on the Lexer config.\\n\" +\n \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS\"\n )\n }\n }\n\n if (config.safeMode && config.ensureOptimizations) {\n throw Error(\n '\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.'\n )\n }\n\n this.trackStartLines = /full|onlyStart/i.test(\n this.config.positionTracking\n )\n this.trackEndLines = /full/i.test(this.config.positionTracking)\n\n // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n if (isArray(lexerDefinition)) {\n actualDefinition = {\n modes: { defaultMode: clone(lexerDefinition) },\n defaultMode: DEFAULT_MODE\n }\n } else {\n // no conversion needed, input should already be a IMultiModeLexerDefinition\n hasOnlySingleMode = false\n actualDefinition = clone(<IMultiModeLexerDefinition>lexerDefinition)\n }\n })\n\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(\"performRuntimeChecks\", () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n performRuntimeChecks(\n actualDefinition,\n this.trackStartLines,\n this.config.lineTerminatorCharacters\n )\n )\n })\n\n this.TRACE_INIT(\"performWarningRuntimeChecks\", () => {\n this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(\n performWarningRuntimeChecks(\n actualDefinition,\n this.trackStartLines,\n this.config.lineTerminatorCharacters\n )\n )\n })\n }\n\n // for extra robustness to avoid throwing an none informative error message\n actualDefinition.modes = actualDefinition.modes\n ? actualDefinition.modes\n : {}\n\n // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n // this transformation is to increase robustness in the case of partially invalid lexer definition.\n forEach(actualDefinition.modes, (currModeValue, currModeName) => {\n actualDefinition.modes[currModeName] = reject<TokenType>(\n currModeValue,\n (currTokType) => isUndefined(currTokType)\n )\n })\n\n const allModeNames = keys(actualDefinition.modes)\n\n forEach(\n actualDefinition.modes,\n (currModDef: TokenType[], currModName) => {\n this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n this.modes.push(currModName)\n\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(`validatePatterns`, () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n validatePatterns(currModDef, allModeNames)\n )\n })\n }\n\n // If definition errors were encountered, the analysis phase may fail unexpectedly/\n // Considering a lexer with definition errors may never be used, there is no point\n // to performing the analysis anyhow...\n if (isEmpty(this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef)\n\n let currAnalyzeResult!: IAnalyzeResult\n this.TRACE_INIT(`analyzeTokenTypes`, () => {\n currAnalyzeResult = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters:\n this.config.lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: this.TRACE_INIT\n })\n })\n\n this.patternIdxToConfig[currModName] =\n currAnalyzeResult.patternIdxToConfig\n\n this.charCodeToPatternIdxToConfig[currModName] =\n currAnalyzeResult.charCodeToPatternIdxToConfig\n\n this.emptyGroups = assign(\n {},\n this.emptyGroups,\n currAnalyzeResult.emptyGroups\n ) as any\n\n this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom\n\n this.canModeBeOptimized[currModName] =\n currAnalyzeResult.canBeOptimized\n }\n })\n }\n )\n\n this.defaultMode = actualDefinition.defaultMode\n\n if (\n !isEmpty(this.lexerDefinitionErrors) &&\n !this.config.deferDefinitionErrorsHandling\n ) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n const allErrMessagesString = allErrMessages.join(\n \"-----------------------\\n\"\n )\n throw new Error(\n \"Errors detected in definition of Lexer:\\n\" + allErrMessagesString\n )\n }\n\n // Only print warning if there are no errors, This will avoid pl\n forEach(this.lexerDefinitionWarning, (warningDescriptor) => {\n PRINT_WARNING(warningDescriptor.message)\n })\n\n this.TRACE_INIT(\"Choosing sub-methods implementations\", () => {\n // Choose the relevant internal implementations for this specific parser.\n // These implementations should be in-lined by the JavaScript engine\n // to provide optimal performance in each scenario.\n if (SUPPORT_STICKY) {\n this.chopInput = <any>identity\n this.match = this.matchWithTest\n } else {\n this.updateLastIndex = noop\n this.match = this.matchWithExec\n }\n\n if (hasOnlySingleMode) {\n this.handleModes = noop\n }\n\n if (this.trackStartLines === false) {\n this.computeNewColumn = identity\n }\n\n if (this.trackEndLines === false) {\n this.updateTokenEndLineColumnLocation = noop\n }\n\n if (/full/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createFullToken\n } else if (/onlyStart/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createStartOnlyToken\n } else if (/onlyOffset/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createOffsetOnlyToken\n } else {\n throw Error(\n `Invalid <positionTracking> config option: \"${this.config.positionTracking}\"`\n )\n }\n\n if (this.hasCustom) {\n this.addToken = this.addTokenUsingPush\n this.handlePayload = this.handlePayloadWithCustom\n } else {\n this.addToken = this.addTokenUsingMemberAccess\n this.handlePayload = this.handlePayloadNoCustom\n }\n })\n\n this.TRACE_INIT(\"Failed Optimization Warnings\", () => {\n const unOptimizedModes = reduce(\n this.canModeBeOptimized,\n (cannotBeOptimized, canBeOptimized, modeName) => {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName)\n }\n return cannotBeOptimized\n },\n [] as string[]\n )\n\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\n `Lexer Modes: < ${unOptimizedModes.join(\n \", \"\n )} > cannot be optimized.\\n` +\n '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n \"\\t Or inspect the console log for details on how to resolve these issues.\"\n )\n }\n })\n\n this.TRACE_INIT(\"clearRegExpParserCache\", () => {\n clearRegExpParserCache()\n })\n\n this.TRACE_INIT(\"toFastProperties\", () => {\n toFastProperties(this)\n })\n })\n }\n\n public tokenize(\n text: string,\n initialMode: string = this.defaultMode\n ): ILexingResult {\n if (!isEmpty(this.lexerDefinitionErrors)) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n const allErrMessagesString = allErrMessages.join(\n \"-----------------------\\n\"\n )\n throw new Error(\n \"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" +\n allErrMessagesString\n )\n }\n\n return this.tokenizeInternal(text, initialMode)\n }\n\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n // this method also used quite a bit of `!` none null assertions because it is too optimized\n // for `tsc` to always understand it is \"safe\"\n private tokenizeInternal(text: string, initialMode: string): ILexingResult {\n let i,\n j,\n k,\n matchAltImage,\n longerAlt,\n matchedImage: string | null,\n payload,\n altPayload,\n imageLength,\n group,\n tokType,\n newToken: IToken,\n errLength,\n droppedChar,\n msg,\n match\n const orgText = text\n const orgLength = orgText.length\n let offset = 0\n let matchedTokensIndex = 0\n // initializing the tokensArray to the \"guessed\" size.\n // guessing too little will still reduce the number of array re-sizes on pushes.\n // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory\n // but would still have a faster runtime by avoiding (All but one) array resizing.\n const guessedNumberOfTokens = this.hasCustom\n ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.\n : Math.floor(text.length / 10)\n const matchedTokens = new Array(guessedNumberOfTokens)\n const errors: ILexingError[] = []\n let line = this.trackStartLines ? 1 : undefined\n let column = this.trackStartLines ? 1 : undefined\n const groups: any = cloneEmptyGroups(this.emptyGroups)\n const trackLines = this.trackStartLines\n const lineTerminatorPattern = this.config.lineTerminatorsPattern\n\n let currModePatternsLength = 0\n let patternIdxToConfig: IPatternConfig[] = []\n let currCharCodeToPatternIdxToConfig: {\n [charCode: number]: IPatternConfig[]\n } = []\n\n const modeStack: string[] = []\n\n const emptyArray: IPatternConfig[] = []\n Object.freeze(emptyArray)\n let getPossiblePatterns!: (charCode: number) => IPatternConfig[]\n\n function getPossiblePatternsSlow() {\n return patternIdxToConfig\n }\n\n function getPossiblePatternsOptimized(charCode: number): IPatternConfig[] {\n const optimizedCharIdx = charCodeToOptimizedIndex(charCode)\n const possiblePatterns =\n currCharCodeToPatternIdxToConfig[optimizedCharIdx]\n if (possiblePatterns === undefined) {\n return emptyArray\n } else {\n return possiblePatterns\n }\n }\n\n const pop_mode = (popToken: IToken) => {\n // TODO: perhaps avoid this error in the edge case there is no more input?\n if (\n modeStack.length === 1 &&\n // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === undefined\n ) {\n // if we try to pop the last mode there lexer will no longer have ANY mode.\n // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n const msg =\n this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(\n popToken\n )\n\n errors.push({\n offset: popToken.startOffset,\n line: popToken.startLine,\n column: popToken.startColumn,\n length: popToken.image.length,\n message: msg\n })\n } else {\n modeStack.pop()\n const newMode = last(modeStack)!\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currCharCodeToPatternIdxToConfig =\n this.charCodeToPatternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized =\n this.canModeBeOptimized[newMode] && this.config.safeMode === false\n\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n }\n\n function push_mode(this: Lexer, newMode: string) {\n modeStack.push(newMode)\n currCharCodeToPatternIdxToConfig =\n this.charCodeToPatternIdxToConfig[newMode]\n\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized =\n this.canModeBeOptimized[newMode] && this.config.safeMode === false\n\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n\n // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n // seem to matter performance wise.\n push_mode.call(this, initialMode)\n\n let currConfig!: IPatternConfig\n\n const recoveryEnabled = this.config.recoveryEnabled\n\n while (offset < orgLength) {\n matchedImage = null\n\n const nextCharCode = orgText.charCodeAt(offset)\n const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode)\n const chosenPatternsLength = chosenPatternIdxToConfig.length\n\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i]\n const currPattern = currConfig.pattern\n payload = null\n\n // manually in-lined because > 600 chars won't be in-lined in V8\n const singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n // single character string\n matchedImage = currPattern as string\n }\n } else if (currConfig.isCustom === true) {\n match = (currPattern as IRegExpExec).exec(\n orgText,\n offset,\n matchedTokens,\n groups\n )\n if (match !== null) {\n matchedImage = match[0]\n if ((match as CustomPatternMatcherReturn).payload !== undefined) {\n payload = (match as CustomPatternMatcherReturn).payload\n }\n } else {\n matchedImage = null\n }\n } else {\n this.updateLastIndex(currPattern as RegExp, offset)\n matchedImage = this.match(currPattern as RegExp, text, offset)\n }\n\n if (matchedImage !== null) {\n // even though this pattern matched we must try a another longer alternative.\n // this can be used to prioritize keywords over identifiers\n longerAlt = currConfig.longerAlt\n if (longerAlt !== undefined) {\n // TODO: micro optimize, avoid extra prop access\n // by saving/linking longerAlt on the original config?\n const longerAltLength = longerAlt.length\n for (k = 0; k < longerAltLength; k++) {\n const longerAltConfig = patternIdxToConfig[longerAlt[k]]\n const longerAltPattern = longerAltConfig.pattern\n altPayload = null\n\n // single Char can never be a longer alt so no need to test it.\n // manually in-lined because > 600 chars won't be in-lined in V8\n if (longerAltConfig.isCustom === true) {\n match = (longerAltPattern as IRegExpExec).exec(\n orgText,\n offset,\n matchedTokens,\n groups\n )\n if (match !== null) {\n matchAltImage = match[0]\n if (\n (match as CustomPatternMatcherReturn).payload !== undefined\n ) {\n altPayload = (match as CustomPatternMatcherReturn).payload\n }\n } else {\n matchAltImage = null\n }\n } else {\n this.updateLastIndex(longerAltPattern as RegExp, offset)\n matchAltImage = this.match(\n longerAltPattern as RegExp,\n text,\n offset\n )\n }\n\n if (matchAltImage && matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage\n payload = altPayload\n currConfig = longerAltConfig\n // Exit the loop early after matching one of the longer alternatives\n // The first matched alternative takes precedence\n break\n }\n }\n }\n break\n }\n }\n\n // successful match\n if (matchedImage !== null) {\n imageLength = matchedImage.length\n group = currConfig.group\n if (group !== undefined) {\n tokType = currConfig.tokenTypeIdx\n // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n // createFullToken method\n newToken = this.createTokenInstance(\n matchedImage,\n offset,\n tokType,\n currConfig.tokenType,\n line,\n column,\n imageLength\n )\n\n this.handlePayload(newToken, payload)\n\n // TODO: optimize NOOP in case there are no special groups?\n if (group === false) {\n matchedTokensIndex = this.addToken(\n matchedTokens,\n matchedTokensIndex,\n newToken\n )\n } else {\n groups[group].push(newToken)\n }\n }\n text = this.chopInput(text, imageLength)\n offset = offset + imageLength\n\n // TODO: with newlines the column may be assigned twice\n column = this.computeNewColumn(column!, imageLength)\n\n if (trackLines === true && currConfig.canLineTerminator === true) {\n let numOfLTsInMatch = 0\n let foundTerminator\n let lastLTEndOffset: number\n lineTerminatorPattern.lastIndex = 0\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage)\n if (foundTerminator === true) {\n lastLTEndOffset = lineTerminatorPattern.lastIndex - 1\n numOfLTsInMatch++\n }\n } while (foundTerminator === true)\n\n if (numOfLTsInMatch !== 0) {\n line = line! + numOfLTsInMatch\n column = imageLength - lastLTEndOffset!\n this.updateTokenEndLineColumnLocation(\n newToken!,\n group!,\n lastLTEndOffset!,\n numOfLTsInMatch,\n line,\n column,\n imageLength\n )\n }\n }\n // will be NOOP if no modes present\n this.handleModes(currConfig, pop_mode, push_mode, newToken!)\n } else {\n // error recovery, drop characters until we identify a valid token's start point\n const errorStartOffset = offset\n const errorLine = line\n const errorColumn = column\n let foundResyncPoint = recoveryEnabled === false\n\n while (foundResyncPoint === false && offset < orgLength) {\n // Identity Func (when sticky flag is enabled)\n text = this.chopInput(text, 1)\n offset++\n for (j = 0; j < currModePatternsLength; j++) {\n const currConfig = patternIdxToConfig[j]\n const currPattern = currConfig.pattern\n\n // manually in-lined because > 600 chars won't be in-lined in V8\n const singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n // single character string\n foundResyncPoint = true\n }\n } else if (currConfig.isCustom === true) {\n foundResyncPoint =\n (currPattern as IRegExpExec).exec(\n orgText,\n offset,\n matchedTokens,\n groups\n ) !== null\n } else {\n this.updateLastIndex(currPattern as RegExp, offset)\n foundResyncPoint = (currPattern as RegExp).exec(text) !== null\n }\n\n if (foundResyncPoint === true) {\n break\n }\n }\n }\n\n errLength = offset - errorStartOffset\n // at this point we either re-synced or reached the end of the input text\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(\n orgText,\n errorStartOffset,\n errLength,\n errorLine,\n errorColumn\n )\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg\n })\n\n if (recoveryEnabled === false) {\n break\n }\n }\n }\n\n // if we do have custom patterns which push directly into the\n // TODO: custom tokens should not push directly??\n if (!this.hasCustom) {\n // if we guessed a too large size for the tokens array this will shrink it to the right size.\n matchedTokens.length = matchedTokensIndex\n }\n\n return {\n tokens: matchedTokens,\n groups: groups,\n errors: errors\n }\n }\n\n private handleModes(\n config: IPatternConfig,\n pop_mode: (tok: IToken) => void,\n push_mode: (this: Lexer, pushMode: string) => void,\n newToken: IToken\n ) {\n if (config.pop === true) {\n // need to save the PUSH_MODE property as if the mode is popped\n // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n const pushMode = config.push\n pop_mode(newToken)\n if (pushMode !== undefined) {\n push_mode.call(this, pushMode)\n }\n } else if (config.push !== undefined) {\n push_mode.call(this, config.push)\n }\n }\n\n private chopInput(text: string, length: number): string {\n return text.substring(length)\n }\n\n private updateLastIndex(regExp: RegExp, newLastIndex: number): void {\n regExp.lastIndex = newLastIndex\n }\n\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n private updateTokenEndLineColumnLocation(\n newToken: IToken,\n group: string | false,\n lastLTIdx: number,\n numOfLTsInMatch: number,\n line: number,\n column: number,\n imageLength: number\n ): void {\n let lastCharIsLT, fixForEndingInLT\n if (group !== undefined) {\n // a none skipped multi line Token, need to update endLine/endColumn\n lastCharIsLT = lastLTIdx === imageLength - 1\n fixForEndingInLT = lastCharIsLT ? -1 : 0\n if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n // if a token ends in a LT that last LT only affects the line numbering of following Tokens\n newToken.endLine = line + fixForEndingInLT\n // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)\n // inclusive to exclusive range.\n newToken.endColumn = column - 1 + -fixForEndingInLT\n }\n // else single LT in the last character of a token, no need to modify the endLine/EndColumn\n }\n }\n\n private computeNewColumn(oldColumn: number, imageLength: number) {\n return oldColumn + imageLength\n }\n\n // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n /* istanbul ignore next - place holder */\n private createTokenInstance!: (...args: any[]) => IToken\n\n private createOffsetOnlyToken(\n image: string,\n startOffset: number,\n tokenTypeIdx: number,\n tokenType: TokenType\n ) {\n return {\n image,\n startOffset,\n tokenTypeIdx,\n tokenType\n }\n }\n\n private createStartOnlyToken(\n image: string,\n startOffset: number,\n tokenTypeIdx: number,\n tokenType: TokenType,\n startLine: number,\n startColumn: number\n ) {\n return {\n image,\n startOffset,\n startLine,\n startColumn,\n tokenTypeIdx,\n tokenType\n }\n }\n\n private createFullToken(\n image: string,\n startOffset: number,\n tokenTypeIdx: number,\n tokenType: TokenType,\n startLine: number,\n startColumn: number,\n imageLength: number\n ): IToken {\n return {\n image,\n startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine,\n endLine: startLine,\n startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx,\n tokenType\n }\n }\n\n // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n /* istanbul ignore next - place holder */\n private addToken!: (\n tokenVector: IToken[],\n index: number,\n tokenToAdd: IToken\n ) => number\n\n private addTokenUsingPush(\n tokenVector: IToken[],\n index: number,\n tokenToAdd: IToken\n ): number {\n tokenVector.push(tokenToAdd)\n return index\n }\n\n private addTokenUsingMemberAccess(\n tokenVector: IToken[],\n index: number,\n tokenToAdd: IToken\n ): number {\n tokenVector[index] = tokenToAdd\n index++\n return index\n }\n\n // Place holder, will be replaced by the correct variant according to the hasCustom flag option at runtime.\n private handlePayload: (token: IToken, payload: any) => void\n\n private handlePayloadNoCustom(token: IToken, payload: any): void {}\n\n private handlePayloadWithCustom(token: IToken, payload: any): void {\n if (payload !== null) {\n token.payload = payload\n }\n }\n\n // place holder to be replaced with chosen alternative at runtime\n private match!: (\n pattern: RegExp,\n text: string,\n offset: number\n ) => string | null\n\n private matchWithTest(\n pattern: RegExp,\n text: string,\n offset: number\n ): string | null {\n const found = pattern.test(text)\n if (found === true) {\n return text.substring(offset, pattern.lastIndex)\n }\n return null\n }\n\n private matchWithExec(pattern: RegExp, text: string): string | null {\n const regExpArray = pattern.exec(text)\n return regExpArray !== null ? regExpArray[0] : null\n }\n\n // Duplicated from the parser's perf trace trait to allow future extraction\n // of the lexer to a separate package.\n TRACE_INIT = <T>(phaseDesc: string, phaseImpl: () => T): T => {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join(\"\\t\")\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n}\n", "import isString from \"lodash/isString\"\nimport has from \"lodash/has\"\nimport isUndefined from \"lodash/isUndefined\"\nimport { Lexer } from \"./lexer_public\"\nimport { augmentTokenTypes, tokenStructuredMatcher } from \"./tokens\"\nimport { IToken, ITokenConfig, TokenType } from \"@chevrotain/types\"\n\nexport function tokenLabel(tokType: TokenType): string {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n}\n\nexport function tokenName(tokType: TokenType): string {\n return tokType.name\n}\n\nexport function hasTokenLabel(\n obj: TokenType\n): obj is TokenType & Pick<Required<TokenType>, \"LABEL\"> {\n return isString(obj.LABEL) && obj.LABEL !== \"\"\n}\n\nconst PARENT = \"parent\"\nconst CATEGORIES = \"categories\"\nconst LABEL = \"label\"\nconst GROUP = \"group\"\nconst PUSH_MODE = \"push_mode\"\nconst POP_MODE = \"pop_mode\"\nconst LONGER_ALT = \"longer_alt\"\nconst LINE_BREAKS = \"line_breaks\"\nconst START_CHARS_HINT = \"start_chars_hint\"\n\nexport function createToken(config: ITokenConfig): TokenType {\n return createTokenInternal(config)\n}\n\nfunction createTokenInternal(config: ITokenConfig): TokenType {\n const pattern = config.pattern\n\n const tokenType: TokenType = <any>{}\n tokenType.name = config.name\n\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern\n }\n\n if (has(config, PARENT)) {\n throw (\n \"The parent property is no longer supported.\\n\" +\n \"See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.\"\n )\n }\n\n if (has(config, CATEGORIES)) {\n // casting to ANY as this will be fixed inside `augmentTokenTypes``\n tokenType.CATEGORIES = <any>config[CATEGORIES]\n }\n\n augmentTokenTypes([tokenType])\n\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL]\n }\n\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP]\n }\n\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE]\n }\n\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE]\n }\n\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT]\n }\n\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS]\n }\n\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT]\n }\n\n return tokenType\n}\n\nexport const EOF = createToken({ name: \"EOF\", pattern: Lexer.NA })\naugmentTokenTypes([EOF])\n\nexport function createTokenInstance(\n tokType: TokenType,\n image: string,\n startOffset: number,\n endOffset: number,\n startLine: number,\n endLine: number,\n startColumn: number,\n endColumn: number\n): IToken {\n return {\n image,\n startOffset,\n endOffset,\n startLine,\n endLine,\n startColumn,\n endColumn,\n tokenTypeIdx: (<any>tokType).tokenTypeIdx,\n tokenType: tokType\n }\n}\n\nexport function tokenMatcher(token: IToken, tokType: TokenType): boolean {\n return tokenStructuredMatcher(token, tokType)\n}\n", "import { hasTokenLabel, tokenLabel } from \"../scan/tokens_public\"\nimport first from \"lodash/first\"\nimport map from \"lodash/map\"\nimport reduce from \"lodash/reduce\"\nimport { Alternation, NonTerminal, Rule, Terminal } from \"@chevrotain/gast\"\nimport { getProductionDslName } from \"@chevrotain/gast\"\nimport {\n IParserErrorMessageProvider,\n IProductionWithOccurrence,\n TokenType\n} from \"@chevrotain/types\"\nimport {\n IGrammarResolverErrorMessageProvider,\n IGrammarValidatorErrorMessageProvider\n} from \"./grammar/types\"\n\nexport const defaultParserErrorProvider: IParserErrorMessageProvider = {\n buildMismatchTokenMessage({ expected, actual, previous, ruleName }): string {\n const hasLabel = hasTokenLabel(expected)\n const expectedMsg = hasLabel\n ? `--> ${tokenLabel(expected)} <--`\n : `token of type --> ${expected.name} <--`\n\n const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`\n\n return msg\n },\n\n buildNotAllInputParsedMessage({ firstRedundant, ruleName }): string {\n return \"Redundant input, expecting EOF but found: \" + firstRedundant.image\n },\n\n buildNoViableAltMessage({\n expectedPathsPerAlt,\n actual,\n previous,\n customUserDescription,\n ruleName\n }): string {\n const errPrefix = \"Expecting: \"\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n const actualText = first(actual)!.image\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n const allLookAheadPaths = reduce(\n expectedPathsPerAlt,\n (result, currAltPaths) => result.concat(currAltPaths),\n [] as TokenType[][]\n )\n const nextValidTokenSequences = map(\n allLookAheadPaths,\n (currPath) =>\n `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\n \", \"\n )}]`\n )\n const nextValidSequenceItems = map(\n nextValidTokenSequences,\n (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`\n )\n const calculatedDescription = `one of these possible Token sequences:\\n${nextValidSequenceItems.join(\n \"\\n\"\n )}`\n\n return errPrefix + calculatedDescription + errSuffix\n }\n },\n\n buildEarlyExitMessage({\n expectedIterationPaths,\n actual,\n customUserDescription,\n ruleName\n }): string {\n const errPrefix = \"Expecting: \"\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n const actualText = first(actual)!.image\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n const nextValidTokenSequences = map(\n expectedIterationPaths,\n (currPath) =>\n `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\n \",\"\n )}]`\n )\n const calculatedDescription =\n `expecting at least one iteration which starts with one of these possible Token sequences::\\n ` +\n `<${nextValidTokenSequences.join(\" ,\")}>`\n\n return errPrefix + calculatedDescription + errSuffix\n }\n }\n}\n\nObject.freeze(defaultParserErrorProvider)\n\nexport const defaultGrammarResolverErrorProvider: IGrammarResolverErrorMessageProvider =\n {\n buildRuleNotFoundError(\n topLevelRule: Rule,\n undefinedRule: NonTerminal\n ): string {\n const msg =\n \"Invalid grammar, reference to a rule which is not defined: ->\" +\n undefinedRule.nonTerminalName +\n \"<-\\n\" +\n \"inside top level rule: ->\" +\n topLevelRule.name +\n \"<-\"\n return msg\n }\n }\n\nexport const defaultGrammarValidatorErrorProvider: IGrammarValidatorErrorMessageProvider =\n {\n buildDuplicateFoundError(\n topLevelRule: Rule,\n duplicateProds: IProductionWithOccurrence[]\n ): string {\n function getExtraProductionArgument(\n prod: IProductionWithOccurrence\n ): string {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return \"\"\n }\n }\n\n const topLevelName = topLevelRule.name\n const duplicateProd = first(duplicateProds)!\n const index = duplicateProd.idx\n const dslName = getProductionDslName(duplicateProd)\n const extraArgument = getExtraProductionArgument(duplicateProd)\n\n const hasExplicitIndex = index > 0\n let msg = `->${dslName}${hasExplicitIndex ? index : \"\"}<- ${\n extraArgument ? `with argument: ->${extraArgument}<-` : \"\"\n }\n appears more than once (${\n duplicateProds.length\n } times) in the top level rule: ->${topLevelName}<-. \n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n `\n\n // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n msg = msg.replace(/[ \\t]+/g, \" \")\n msg = msg.replace(/\\s\\s+/g, \"\\n\")\n\n return msg\n },\n\n buildNamespaceConflictError(rule: Rule): string {\n const errMsg =\n `Namespace conflict found in grammar.\\n` +\n `The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.\\n` +\n `To resolve this make sure each Terminal and Non-Terminal names are unique\\n` +\n `This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n` +\n `and Non-Terminal names start with a lower case letter.`\n\n return errMsg\n },\n\n buildAlternationPrefixAmbiguityError(options: {\n topLevelRule: Rule\n prefixPath: TokenType[]\n ambiguityIndices: number[]\n alternation: Alternation\n }): string {\n const pathMsg = map(options.prefixPath, (currTok) =>\n tokenLabel(currTok)\n ).join(\", \")\n const occurrence =\n options.alternation.idx === 0 ? \"\" : options.alternation.idx\n const errMsg =\n `Ambiguous alternatives: <${options.ambiguityIndices.join(\n \" ,\"\n )}> due to common lookahead prefix\\n` +\n `in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n` +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n` +\n `For Further details.`\n\n return errMsg\n },\n\n buildAlternationAmbiguityError(options: {\n topLevelRule: Rule\n prefixPath: TokenType[]\n ambiguityIndices: number[]\n alternation: Alternation\n }): string {\n const pathMsg = map(options.prefixPath, (currtok) =>\n tokenLabel(currtok)\n ).join(\", \")\n const occurrence =\n options.alternation.idx === 0 ? \"\" : options.alternation.idx\n let currMessage =\n `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\n \" ,\"\n )}> in <OR${occurrence}>` +\n ` inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`\n\n currMessage =\n currMessage +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\n `For Further details.`\n return currMessage\n },\n\n buildEmptyRepetitionError(options: {\n topLevelRule: Rule\n repetition: IProductionWithOccurrence\n }): string {\n let dslName = getProductionDslName(options.repetition)\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx\n }\n\n const errMsg =\n `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\\n` +\n `This could lead to an infinite loop.`\n\n return errMsg\n },\n\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildTokenNameError(options: {\n tokenType: TokenType\n expectedPattern: RegExp\n }): string {\n /* istanbul ignore next */\n return \"deprecated\"\n },\n\n buildEmptyAlternationError(options: {\n topLevelRule: Rule\n alternation: Alternation\n emptyChoiceIdx: number\n }): string {\n const errMsg =\n `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}>` +\n ` in <OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n` +\n `Only the last alternative may be an empty alternative.`\n\n return errMsg\n },\n\n buildTooManyAlternativesError(options: {\n topLevelRule: Rule\n alternation: Alternation\n }): string {\n const errMsg =\n `An Alternation cannot have more than 256 alternatives:\\n` +\n `<OR${options.alternation.idx}> inside <${\n options.topLevelRule.name\n }> Rule.\\n has ${\n options.alternation.definition.length + 1\n } alternatives.`\n\n return errMsg\n },\n\n buildLeftRecursionError(options: {\n topLevelRule: Rule\n leftRecursionPath: Rule[]\n }): string {\n const ruleName = options.topLevelRule.name\n const pathNames = map(\n options.leftRecursionPath,\n (currRule) => currRule.name\n )\n const leftRecursivePath = `${ruleName} --> ${pathNames\n .concat([ruleName])\n .join(\" --> \")}`\n const errMsg =\n `Left Recursion found in grammar.\\n` +\n `rule: <${ruleName}> can be invoked from itself (directly or indirectly)\\n` +\n `without consuming any Tokens. The grammar path that causes this is: \\n ${leftRecursivePath}\\n` +\n ` To fix this refactor your grammar to remove the left recursion.\\n` +\n `see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`\n\n return errMsg\n },\n\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildInvalidRuleNameError(options: {\n topLevelRule: Rule\n expectedPattern: RegExp\n }): string {\n /* istanbul ignore next */\n return \"deprecated\"\n },\n\n buildDuplicateRuleNameError(options: {\n topLevelRule: Rule | string\n grammarName: string\n }): string {\n let ruleName\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name\n } else {\n ruleName = options.topLevelRule\n }\n\n const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`\n\n return errMsg\n }\n }\n", "import {\n IParserUnresolvedRefDefinitionError,\n ParserDefinitionErrorType\n} from \"../parser/parser\"\nimport forEach from \"lodash/forEach\"\nimport values from \"lodash/values\"\nimport { NonTerminal, Rule } from \"@chevrotain/gast\"\nimport { GAstVisitor } from \"@chevrotain/gast\"\nimport {\n IGrammarResolverErrorMessageProvider,\n IParserDefinitionError\n} from \"./types\"\n\nexport function resolveGrammar(\n topLevels: Record<string, Rule>,\n errMsgProvider: IGrammarResolverErrorMessageProvider\n): IParserDefinitionError[] {\n const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider)\n refResolver.resolveRefs()\n return refResolver.errors\n}\n\nexport class GastRefResolverVisitor extends GAstVisitor {\n public errors: IParserUnresolvedRefDefinitionError[] = []\n private currTopLevel: Rule\n\n constructor(\n private nameToTopRule: Record<string, Rule>,\n private errMsgProvider: IGrammarResolverErrorMessageProvider\n ) {\n super()\n }\n\n public resolveRefs(): void {\n forEach(values(this.nameToTopRule), (prod) => {\n this.currTopLevel = prod\n prod.accept(this)\n })\n }\n\n public visitNonTerminal(node: NonTerminal): void {\n const ref = this.nameToTopRule[node.nonTerminalName]\n\n if (!ref) {\n const msg = this.errMsgProvider.buildRuleNotFoundError(\n this.currTopLevel,\n node\n )\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName\n })\n } else {\n node.referencedRule = ref\n }\n }\n}\n", "/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n", "var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;\n", "var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;\n", "var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nmodule.exports = groupBy;\n", "var baseFlatten = require('./_baseFlatten'),\n map = require('./map');\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n}\n\nmodule.exports = flatMap;\n", "var baseSlice = require('./_baseSlice'),\n toInteger = require('./toInteger');\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n}\n\nmodule.exports = dropRight;\n", "import { RestWalker } from \"./rest\"\nimport _first from \"lodash/first\"\nimport isEmpty from \"lodash/isEmpty\"\nimport dropRight from \"lodash/dropRight\"\nimport drop from \"lodash/drop\"\nimport last from \"lodash/last\"\nimport forEach from \"lodash/forEach\"\nimport clone from \"lodash/clone\"\nimport { first } from \"./first\"\nimport { TokenMatcher } from \"../parser/parser\"\nimport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"@chevrotain/gast\"\nimport {\n IGrammarPath,\n IProduction,\n ISyntacticContentAssistPath,\n IToken,\n ITokenGrammarPath,\n TokenType\n} from \"@chevrotain/types\"\n\nexport abstract class AbstractNextPossibleTokensWalker extends RestWalker {\n protected possibleTokTypes: TokenType[] = []\n protected ruleStack: string[]\n protected occurrenceStack: number[]\n\n protected nextProductionName = \"\"\n protected nextProductionOccurrence = 0\n protected found = false\n protected isAtEndOfPath = false\n\n constructor(protected topProd: Rule, protected path: IGrammarPath) {\n super()\n }\n\n startWalking(): TokenType[] {\n this.found = false\n\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\")\n }\n\n // immutable for the win\n this.ruleStack = clone(this.path.ruleStack).reverse() // intelij bug requires assertion\n this.occurrenceStack = clone(this.path.occurrenceStack).reverse() // intelij bug requires assertion\n\n // already verified that the first production is valid, we now seek the 2nd production\n this.ruleStack.pop()\n this.occurrenceStack.pop()\n\n this.updateExpectedNext()\n this.walk(this.topProd)\n\n return this.possibleTokTypes\n }\n\n walk(\n prod: { definition: IProduction[] },\n prevRest: IProduction[] = []\n ): void {\n // stop scanning once we found the path\n if (!this.found) {\n super.walk(prod, prevRest)\n }\n }\n\n walkProdRef(\n refProd: NonTerminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n // found the next production, need to keep walking in it\n if (\n refProd.referencedRule.name === this.nextProductionName &&\n refProd.idx === this.nextProductionOccurrence\n ) {\n const fullRest = currRest.concat(prevRest)\n this.updateExpectedNext()\n this.walk(refProd.referencedRule, <any>fullRest)\n }\n }\n\n updateExpectedNext(): void {\n // need to consume the Terminal\n if (isEmpty(this.ruleStack)) {\n // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n // really seeking is the last Terminal...\n this.nextProductionName = \"\"\n this.nextProductionOccurrence = 0\n this.isAtEndOfPath = true\n } else {\n this.nextProductionName = this.ruleStack.pop()!\n this.nextProductionOccurrence = this.occurrenceStack.pop()!\n }\n }\n}\n\nexport class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n private nextTerminalName = \"\"\n private nextTerminalOccurrence = 0\n\n constructor(topProd: Rule, protected path: ITokenGrammarPath) {\n super(topProd, path)\n this.nextTerminalName = this.path.lastTok.name\n this.nextTerminalOccurrence = this.path.lastTokOccurrence\n }\n\n walkTerminal(\n terminal: Terminal,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n this.isAtEndOfPath &&\n terminal.terminalType.name === this.nextTerminalName &&\n terminal.idx === this.nextTerminalOccurrence &&\n !this.found\n ) {\n const fullRest = currRest.concat(prevRest)\n const restProd = new Alternative({ definition: fullRest })\n this.possibleTokTypes = first(restProd)\n this.found = true\n }\n }\n}\n\nexport type AlternativesFirstTokens = TokenType[][]\n\nexport interface IFirstAfterRepetition {\n token: TokenType | undefined\n occurrence: number | undefined\n isEndOfRule: boolean | undefined\n}\n\n/**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\nexport class AbstractNextTerminalAfterProductionWalker extends RestWalker {\n protected result: IFirstAfterRepetition = {\n token: undefined,\n occurrence: undefined,\n isEndOfRule: undefined\n }\n\n constructor(protected topRule: Rule, protected occurrence: number) {\n super()\n }\n\n startWalking(): IFirstAfterRepetition {\n this.walk(this.topRule)\n return this.result\n }\n}\n\nexport class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n walkMany(\n manyProd: Repetition,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (manyProd.idx === this.occurrence) {\n const firstAfterMany = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterMany === undefined\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType\n this.result.occurrence = firstAfterMany.idx\n }\n } else {\n super.walkMany(manyProd, currRest, prevRest)\n }\n }\n}\n\nexport class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkManySep(\n manySepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (manySepProd.idx === this.occurrence) {\n const firstAfterManySep = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterManySep === undefined\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType\n this.result.occurrence = firstAfterManySep.idx\n }\n } else {\n super.walkManySep(manySepProd, currRest, prevRest)\n }\n }\n}\n\nexport class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOne(\n atLeastOneProd: RepetitionMandatory,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (atLeastOneProd.idx === this.occurrence) {\n const firstAfterAtLeastOne = _first(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterAtLeastOne === undefined\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType\n this.result.occurrence = firstAfterAtLeastOne.idx\n }\n } else {\n super.walkAtLeastOne(atLeastOneProd, currRest, prevRest)\n }\n }\n}\n\n// TODO: reduce code duplication in the AfterWalkers\nexport class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOneSep(\n atleastOneSepProd: RepetitionMandatoryWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (atleastOneSepProd.idx === this.occurrence) {\n const firstAfterfirstAfterAtLeastOneSep = _first(\n currRest.concat(prevRest)\n )\n this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx\n }\n } else {\n super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest)\n }\n }\n}\n\nexport interface PartialPathAndSuffixes {\n partialPath: TokenType[]\n suffixDef: IProduction[]\n}\n\nexport function possiblePathsFrom(\n targetDef: IProduction[],\n maxLength: number,\n currPath: TokenType[] = []\n): PartialPathAndSuffixes[] {\n // avoid side effects\n currPath = clone(currPath)\n let result: PartialPathAndSuffixes[] = []\n let i = 0\n\n // TODO: avoid inner funcs\n function remainingPathWith(nextDef: IProduction[]) {\n return nextDef.concat(drop(targetDef, i + 1))\n }\n\n // TODO: avoid inner funcs\n function getAlternativesForProd(definition: IProduction[]) {\n const alternatives = possiblePathsFrom(\n remainingPathWith(definition),\n maxLength,\n currPath\n )\n return result.concat(alternatives)\n }\n\n /**\n * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n * following (rest) of the targetDef.\n *\n * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n * the optional production.\n */\n while (currPath.length < maxLength && i < targetDef.length) {\n const prod = targetDef[i]\n\n /* istanbul ignore else */\n if (prod instanceof Alternative) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition)\n } else if (prod instanceof RepetitionMandatory) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ])\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n const newDef = [\n new Alternative({ definition: prod.definition }),\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(\n <any>prod.definition\n )\n })\n ]\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionWithSeparator) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(\n <any>prod.definition\n )\n })\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Repetition) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Alternation) {\n forEach(prod.definition, (currAlt) => {\n // TODO: this is a limited check for empty alternatives\n // It would prevent a common case of infinite loops during parser initialization.\n // However **in-directly** empty alternatives may still cause issues.\n if (isEmpty(currAlt.definition) === false) {\n result = getAlternativesForProd(currAlt.definition)\n }\n })\n return result\n } else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType)\n } else {\n throw Error(\"non exhaustive match\")\n }\n\n i++\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i)\n })\n\n return result\n}\n\ninterface IPathToExamine {\n idx: number\n def: IProduction[]\n ruleStack: string[]\n occurrenceStack: number[]\n}\n\nexport function nextPossibleTokensAfter(\n initialDef: IProduction[],\n tokenVector: IToken[],\n tokMatcher: TokenMatcher,\n maxLookAhead: number\n): ISyntacticContentAssistPath[] {\n const EXIT_NON_TERMINAL: any = \"EXIT_NONE_TERMINAL\"\n // to avoid creating a new Array each time.\n const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL]\n const EXIT_ALTERNATIVE: any = \"EXIT_ALTERNATIVE\"\n let foundCompletePath = false\n\n const tokenVectorLength = tokenVector.length\n const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1\n\n const result: ISyntacticContentAssistPath[] = []\n\n const possiblePaths: IPathToExamine[] = []\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: []\n })\n\n while (!isEmpty(possiblePaths)) {\n const currPath = possiblePaths.pop()!\n\n // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n if (currPath === EXIT_ALTERNATIVE) {\n if (\n foundCompletePath &&\n last(possiblePaths)!.idx <= minimalAlternativesIndex\n ) {\n // remove irrelevant alternative\n possiblePaths.pop()\n }\n continue\n }\n\n const currDef = currPath.def\n const currIdx = currPath.idx\n const currRuleStack = currPath.ruleStack\n const currOccurrenceStack = currPath.occurrenceStack\n\n // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n if (isEmpty(currDef)) {\n continue\n }\n\n const prod = currDef[0]\n /* istanbul ignore else */\n if (prod === EXIT_NON_TERMINAL) {\n const nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack)\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Terminal) {\n /* istanbul ignore else */\n if (currIdx < tokenVectorLength - 1) {\n const nextIdx = currIdx + 1\n const actualToken = tokenVector[nextIdx]\n if (tokMatcher!(actualToken, prod.terminalType)) {\n const nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPath)\n }\n // end of the line\n } else if (currIdx === tokenVectorLength - 1) {\n // IGNORE ABOVE ELSE\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n })\n foundCompletePath = true\n } else {\n throw Error(\"non exhaustive match\")\n }\n } else if (prod instanceof NonTerminal) {\n const newRuleStack = clone(currRuleStack)\n newRuleStack.push(prod.nonTerminalName)\n\n const newOccurrenceStack = clone(currOccurrenceStack)\n newOccurrenceStack.push(prod.idx)\n\n const nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Option) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n\n const nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof RepetitionMandatory) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n const secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n })\n const nextDef = prod.definition.concat([secondIteration], drop(currDef))\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n const separatorGast = new Terminal({\n terminalType: prod.separator\n })\n const secondIteration = new Repetition({\n definition: [<any>separatorGast].concat(prod.definition),\n idx: prod.idx\n })\n const nextDef = prod.definition.concat([secondIteration], drop(currDef))\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionWithSeparator) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n\n const separatorGast = new Terminal({\n terminalType: prod.separator\n })\n const nthRepetition = new Repetition({\n definition: [<any>separatorGast].concat(prod.definition),\n idx: prod.idx\n })\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Repetition) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n\n // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n const nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n })\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Alternation) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n for (let i = prod.definition.length - 1; i >= 0; i--) {\n const currAlt: any = prod.definition[i]\n const currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n }\n possiblePaths.push(currAltPath)\n possiblePaths.push(EXIT_ALTERNATIVE)\n }\n } else if (prod instanceof Alternative) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n })\n } else if (prod instanceof Rule) {\n // last because we should only encounter at most a single one of these per invocation.\n possiblePaths.push(\n expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack)\n )\n } else {\n throw Error(\"non exhaustive match\")\n }\n }\n return result\n}\n\nfunction expandTopLevelRule(\n topRule: Rule,\n currIdx: number,\n currRuleStack: string[],\n currOccurrenceStack: number[]\n): IPathToExamine {\n const newRuleStack = clone(currRuleStack)\n newRuleStack.push(topRule.name)\n\n const newCurrOccurrenceStack = clone(currOccurrenceStack)\n // top rule is always assumed to have been called with occurrence index 1\n newCurrOccurrenceStack.push(1)\n\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack\n }\n}\n", "import isEmpty from \"lodash/isEmpty\"\nimport flatten from \"lodash/flatten\"\nimport every from \"lodash/every\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport has from \"lodash/has\"\nimport reduce from \"lodash/reduce\"\nimport { possiblePathsFrom } from \"./interpreter\"\nimport { RestWalker } from \"./rest\"\nimport { Predicate, TokenMatcher } from \"../parser/parser\"\nimport {\n tokenStructuredMatcher,\n tokenStructuredMatcherNoCategories\n} from \"../../scan/tokens\"\nimport {\n Alternation,\n Alternative as AlternativeGAST,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator\n} from \"@chevrotain/gast\"\nimport { GAstVisitor } from \"@chevrotain/gast\"\nimport {\n IOrAlt,\n IProduction,\n IProductionWithOccurrence,\n LookaheadSequence,\n LookaheadProductionType,\n Rule,\n TokenType,\n BaseParser\n} from \"@chevrotain/types\"\n\nexport enum PROD_TYPE {\n OPTION,\n REPETITION,\n REPETITION_MANDATORY,\n REPETITION_MANDATORY_WITH_SEPARATOR,\n REPETITION_WITH_SEPARATOR,\n ALTERNATION\n}\n\nexport function getProdType(\n prod: IProduction | LookaheadProductionType\n): PROD_TYPE {\n /* istanbul ignore else */\n if (prod instanceof Option || prod === \"Option\") {\n return PROD_TYPE.OPTION\n } else if (prod instanceof Repetition || prod === \"Repetition\") {\n return PROD_TYPE.REPETITION\n } else if (\n prod instanceof RepetitionMandatory ||\n prod === \"RepetitionMandatory\"\n ) {\n return PROD_TYPE.REPETITION_MANDATORY\n } else if (\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod === \"RepetitionMandatoryWithSeparator\"\n ) {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR\n } else if (\n prod instanceof RepetitionWithSeparator ||\n prod === \"RepetitionWithSeparator\"\n ) {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR\n } else if (prod instanceof Alternation || prod === \"Alternation\") {\n return PROD_TYPE.ALTERNATION\n } else {\n throw Error(\"non exhaustive match\")\n }\n}\n\nexport function getLookaheadPaths(options: {\n occurrence: number\n rule: Rule\n prodType: LookaheadProductionType\n maxLookahead: number\n}): LookaheadSequence[] {\n const { occurrence, rule, prodType, maxLookahead } = options\n const type = getProdType(prodType)\n if (type === PROD_TYPE.ALTERNATION) {\n return getLookaheadPathsForOr(occurrence, rule, maxLookahead)\n } else {\n return getLookaheadPathsForOptionalProd(\n occurrence,\n rule,\n type,\n maxLookahead\n )\n }\n}\n\nexport function buildLookaheadFuncForOr(\n occurrence: number,\n ruleGrammar: Rule,\n maxLookahead: number,\n hasPredicates: boolean,\n dynamicTokensEnabled: boolean,\n laFuncBuilder: Function\n): (orAlts?: IOrAlt<any>[]) => number | undefined {\n const lookAheadPaths = getLookaheadPathsForOr(\n occurrence,\n ruleGrammar,\n maxLookahead\n )\n\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n\n return laFuncBuilder(\n lookAheadPaths,\n hasPredicates,\n tokenMatcher,\n dynamicTokensEnabled\n )\n}\n\n/**\n * When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n * the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n * Example: given a production:\n * ABC(DE)?DF\n *\n * The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n * alternatives.\n *\n * @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\nexport function buildLookaheadFuncForOptionalProd(\n occurrence: number,\n ruleGrammar: Rule,\n k: number,\n dynamicTokensEnabled: boolean,\n prodType: PROD_TYPE,\n lookaheadBuilder: (\n lookAheadSequence: LookaheadSequence,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n ) => () => boolean\n): () => boolean {\n const lookAheadPaths = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n k\n )\n\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled)\n}\n\nexport type Alternative = TokenType[][]\n\nexport function buildAlternativesLookAheadFunc(\n alts: LookaheadSequence[],\n hasPredicates: boolean,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n): (orAlts: IOrAlt<any>[]) => number | undefined {\n const numOfAlts = alts.length\n const areAllOneTokenLookahead = every(alts, (currAlt) => {\n return every(currAlt, (currPath) => {\n return currPath.length === 1\n })\n })\n\n // This version takes into account the predicates as well.\n if (hasPredicates) {\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (\n this: BaseParser,\n orAlts: IOrAlt<any>[]\n ): number | undefined {\n // unfortunately the predicates must be extracted every single time\n // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n const predicates: (Predicate | undefined)[] = map(\n orAlts,\n (currAlt) => currAlt.GATE\n )\n\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t]\n const currNumOfPaths = currAlt.length\n\n const currPredicate = predicates[t]\n if (currPredicate !== undefined && currPredicate.call(this) === false) {\n // if the predicate does not match there is no point in checking the paths\n continue\n }\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n const singleTokenAlts = map(alts, (currAlt) => {\n return flatten(currAlt)\n })\n\n const choiceToAlt = reduce(\n singleTokenAlts,\n (result, currAlt, idx) => {\n forEach(currAlt, (currTokType) => {\n if (!has(result, currTokType.tokenTypeIdx!)) {\n result[currTokType.tokenTypeIdx!] = idx\n }\n forEach(currTokType.categoryMatches!, (currExtendingType) => {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx\n }\n })\n })\n return result\n },\n {} as Record<number, number>\n )\n\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (this: BaseParser): number {\n const nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx]\n }\n } else {\n // optimized lookahead without needing to check the predicates at all.\n // this causes code duplication which is intentional to improve performance.\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (this: BaseParser): number | undefined {\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t]\n const currNumOfPaths = currAlt.length\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n }\n}\n\nexport function buildSingleAlternativeLookaheadFunction(\n alt: LookaheadSequence,\n tokenMatcher: TokenMatcher,\n dynamicTokensEnabled: boolean\n): () => boolean {\n const areAllOneTokenLookahead = every(alt, (currPath) => {\n return currPath.length === 1\n })\n\n const numOfPaths = alt.length\n\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead.\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n const singleTokensTypes = flatten(alt)\n\n if (\n singleTokensTypes.length === 1 &&\n isEmpty((<any>singleTokensTypes[0]).categoryMatches)\n ) {\n const expectedTokenType = singleTokensTypes[0]\n const expectedTokenUniqueKey = (<any>expectedTokenType).tokenTypeIdx\n\n return function (this: BaseParser): boolean {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey\n }\n } else {\n const choiceToAlt = reduce(\n singleTokensTypes,\n (result, currTokType, idx) => {\n result[currTokType.tokenTypeIdx!] = true\n forEach(currTokType.categoryMatches!, (currExtendingType) => {\n result[currExtendingType] = true\n })\n return result\n },\n [] as boolean[]\n )\n\n return function (this: BaseParser): boolean {\n const nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx] === true\n }\n }\n } else {\n return function (this: BaseParser): boolean {\n nextPath: for (let j = 0; j < numOfPaths; j++) {\n const currPath = alt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n return true\n }\n\n // none of the paths matched\n return false\n }\n }\n}\n\nclass RestDefinitionFinderWalker extends RestWalker {\n private restDef: IProduction[]\n\n constructor(\n private topProd: Rule,\n private targetOccurrence: number,\n private targetProdType: PROD_TYPE\n ) {\n super()\n }\n\n startWalking(): IProduction[] {\n this.walk(this.topProd)\n return this.restDef\n }\n\n private checkIsTarget(\n node: IProductionWithOccurrence,\n expectedProdType: PROD_TYPE,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): boolean {\n if (\n node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdType\n ) {\n this.restDef = currRest.concat(prevRest)\n return true\n }\n // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n return false\n }\n\n walkOption(\n optionProd: Option,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n super.walkOption(optionProd, currRest, prevRest)\n }\n }\n\n walkAtLeastOne(\n atLeastOneProd: RepetitionMandatory,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(\n atLeastOneProd,\n PROD_TYPE.REPETITION_MANDATORY,\n currRest,\n prevRest\n )\n ) {\n super.walkOption(atLeastOneProd, currRest, prevRest)\n }\n }\n\n walkAtLeastOneSep(\n atLeastOneSepProd: RepetitionMandatoryWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(\n atLeastOneSepProd,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n currRest,\n prevRest\n )\n ) {\n super.walkOption(atLeastOneSepProd, currRest, prevRest)\n }\n }\n\n walkMany(\n manyProd: Repetition,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)\n ) {\n super.walkOption(manyProd, currRest, prevRest)\n }\n }\n\n walkManySep(\n manySepProd: RepetitionWithSeparator,\n currRest: IProduction[],\n prevRest: IProduction[]\n ): void {\n if (\n !this.checkIsTarget(\n manySepProd,\n PROD_TYPE.REPETITION_WITH_SEPARATOR,\n currRest,\n prevRest\n )\n ) {\n super.walkOption(manySepProd, currRest, prevRest)\n }\n }\n}\n\n/**\n * Returns the definition of a target production in a top level level rule.\n */\nclass InsideDefinitionFinderVisitor extends GAstVisitor {\n public result: IProduction[] = []\n\n constructor(\n private targetOccurrence: number,\n private targetProdType: PROD_TYPE,\n private targetRef?: any\n ) {\n super()\n }\n\n private checkIsTarget(\n node: { definition: IProduction[] } & IProductionWithOccurrence,\n expectedProdName: PROD_TYPE\n ): void {\n if (\n node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdName &&\n (this.targetRef === undefined || node === this.targetRef)\n ) {\n this.result = node.definition\n }\n }\n\n public visitOption(node: Option): void {\n this.checkIsTarget(node, PROD_TYPE.OPTION)\n }\n\n public visitRepetition(node: Repetition): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION)\n }\n\n public visitRepetitionMandatory(node: RepetitionMandatory): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n node: RepetitionMandatoryWithSeparator\n ): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR)\n }\n\n public visitRepetitionWithSeparator(node: RepetitionWithSeparator): void {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR)\n }\n\n public visitAlternation(node: Alternation): void {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION)\n }\n}\n\nfunction initializeArrayOfArrays(size: number): any[][] {\n const result = new Array(size)\n for (let i = 0; i < size; i++) {\n result[i] = []\n }\n return result\n}\n\n/**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * - A single path with categories may match multiple **actual** paths.\n */\nfunction pathToHashKeys(path: TokenType[]): string[] {\n let keys = [\"\"]\n for (let i = 0; i < path.length; i++) {\n const tokType = path[i]\n const longerKeys = []\n for (let j = 0; j < keys.length; j++) {\n const currShorterKey = keys[j]\n longerKeys.push(currShorterKey + \"_\" + tokType.tokenTypeIdx)\n for (let t = 0; t < tokType.categoryMatches!.length; t++) {\n const categoriesKeySuffix = \"_\" + tokType.categoryMatches![t]\n longerKeys.push(currShorterKey + categoriesKeySuffix)\n }\n }\n keys = longerKeys\n }\n return keys\n}\n\n/**\n * Imperative style due to being called from a hot spot\n */\nfunction isUniquePrefixHash(\n altKnownPathsKeys: Record<string, boolean>[],\n searchPathKeys: string[],\n idx: number\n): boolean {\n for (\n let currAltIdx = 0;\n currAltIdx < altKnownPathsKeys.length;\n currAltIdx++\n ) {\n // We only want to test vs the other alternatives\n if (currAltIdx === idx) {\n continue\n }\n const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx]\n for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n const searchKey = searchPathKeys[searchIdx]\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false\n }\n }\n }\n // None of the SearchPathKeys were found in any of the other alternatives\n return true\n}\n\nexport function lookAheadSequenceFromAlternatives(\n altsDefs: IProduction[],\n k: number\n): LookaheadSequence[] {\n const partialAlts = map(altsDefs, (currAlt) =>\n possiblePathsFrom([currAlt], 1)\n )\n const finalResult = initializeArrayOfArrays(partialAlts.length)\n const altsHashes = map(partialAlts, (currAltPaths) => {\n const dict: { [key: string]: boolean } = {}\n forEach(currAltPaths, (item) => {\n const keys = pathToHashKeys(item.partialPath)\n forEach(keys, (currKey) => {\n dict[currKey] = true\n })\n })\n return dict\n })\n let newData = partialAlts\n\n // maxLookahead loop\n for (let pathLength = 1; pathLength <= k; pathLength++) {\n const currDataset = newData\n newData = initializeArrayOfArrays(currDataset.length)\n\n // alternatives loop\n for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {\n const currAltPathsAndSuffixes = currDataset[altIdx]\n // paths in current alternative loop\n for (\n let currPathIdx = 0;\n currPathIdx < currAltPathsAndSuffixes.length;\n currPathIdx++\n ) {\n const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath\n const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef\n const prefixKeys = pathToHashKeys(currPathPrefix)\n const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx)\n // End of the line for this path.\n if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n const currAltResult = finalResult[altIdx]\n // TODO: Can we implement a containsPath using Maps/Dictionaries?\n if (containsPath(currAltResult, currPathPrefix) === false) {\n currAltResult.push(currPathPrefix)\n // Update all new keys for the current path.\n for (let j = 0; j < prefixKeys.length; j++) {\n const currKey = prefixKeys[j]\n altsHashes[altIdx][currKey] = true\n }\n }\n }\n // Expand longer paths\n else {\n const newPartialPathsAndSuffixes = possiblePathsFrom(\n suffixDef,\n pathLength + 1,\n currPathPrefix\n )\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes)\n\n // Update keys for new known paths\n forEach(newPartialPathsAndSuffixes, (item) => {\n const prefixKeys = pathToHashKeys(item.partialPath)\n forEach(prefixKeys, (key) => {\n altsHashes[altIdx][key] = true\n })\n })\n }\n }\n }\n }\n\n return finalResult\n}\n\nexport function getLookaheadPathsForOr(\n occurrence: number,\n ruleGrammar: Rule,\n k: number,\n orProd?: Alternation\n): LookaheadSequence[] {\n const visitor = new InsideDefinitionFinderVisitor(\n occurrence,\n PROD_TYPE.ALTERNATION,\n orProd\n )\n ruleGrammar.accept(visitor)\n return lookAheadSequenceFromAlternatives(visitor.result, k)\n}\n\nexport function getLookaheadPathsForOptionalProd(\n occurrence: number,\n ruleGrammar: Rule,\n prodType: PROD_TYPE,\n k: number\n): LookaheadSequence[] {\n const insideDefVisitor = new InsideDefinitionFinderVisitor(\n occurrence,\n prodType\n )\n ruleGrammar.accept(insideDefVisitor)\n const insideDef = insideDefVisitor.result\n\n const afterDefWalker = new RestDefinitionFinderWalker(\n ruleGrammar,\n occurrence,\n prodType\n )\n const afterDef = afterDefWalker.startWalking()\n\n const insideFlat = new AlternativeGAST({ definition: insideDef })\n const afterFlat = new AlternativeGAST({ definition: afterDef })\n\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k)\n}\n\nexport function containsPath(\n alternative: Alternative,\n searchPath: TokenType[]\n): boolean {\n compareOtherPath: for (let i = 0; i < alternative.length; i++) {\n const otherPath = alternative[i]\n if (otherPath.length !== searchPath.length) {\n continue\n }\n for (let j = 0; j < otherPath.length; j++) {\n const searchTok = searchPath[j]\n const otherTok = otherPath[j]\n\n const matchingTokens =\n searchTok === otherTok ||\n otherTok.categoryMatchesMap![searchTok.tokenTypeIdx!] !== undefined\n if (matchingTokens === false) {\n continue compareOtherPath\n }\n }\n return true\n }\n\n return false\n}\n\nexport function isStrictPrefixOfPath(\n prefix: TokenType[],\n other: TokenType[]\n): boolean {\n return (\n prefix.length < other.length &&\n every(prefix, (tokType, idx) => {\n const otherTokType = other[idx]\n return (\n tokType === otherTokType ||\n otherTokType.categoryMatchesMap![tokType.tokenTypeIdx!]\n )\n })\n )\n}\n\nexport function areTokenCategoriesNotUsed(\n lookAheadPaths: LookaheadSequence[]\n): boolean {\n return every(lookAheadPaths, (singleAltPaths) =>\n every(singleAltPaths, (singlePath) =>\n every(singlePath, (token) => isEmpty(token.categoryMatches!))\n )\n )\n}\n", "import first from \"lodash/first\"\nimport isEmpty from \"lodash/isEmpty\"\nimport drop from \"lodash/drop\"\nimport flatten from \"lodash/flatten\"\nimport filter from \"lodash/filter\"\nimport reject from \"lodash/reject\"\nimport difference from \"lodash/difference\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport groupBy from \"lodash/groupBy\"\nimport reduce from \"lodash/reduce\"\nimport pickBy from \"lodash/pickBy\"\nimport values from \"lodash/values\"\nimport includes from \"lodash/includes\"\nimport flatMap from \"lodash/flatMap\"\nimport clone from \"lodash/clone\"\nimport {\n IParserAmbiguousAlternativesDefinitionError,\n IParserDuplicatesDefinitionError,\n IParserEmptyAlternativeDefinitionError,\n ParserDefinitionErrorType\n} from \"../parser/parser\"\nimport { getProductionDslName, isOptionalProd } from \"@chevrotain/gast\"\nimport {\n Alternative,\n containsPath,\n getLookaheadPathsForOptionalProd,\n getLookaheadPathsForOr,\n getProdType,\n isStrictPrefixOfPath\n} from \"./lookahead\"\nimport { nextPossibleTokensAfter } from \"./interpreter\"\nimport {\n Alternation,\n Alternative as AlternativeGAST,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Terminal\n} from \"@chevrotain/gast\"\nimport { GAstVisitor } from \"@chevrotain/gast\"\nimport {\n ILookaheadStrategy,\n IProduction,\n IProductionWithOccurrence,\n TokenType,\n Rule\n} from \"@chevrotain/types\"\nimport {\n IGrammarValidatorErrorMessageProvider,\n IParserDefinitionError\n} from \"./types\"\nimport dropRight from \"lodash/dropRight\"\nimport compact from \"lodash/compact\"\nimport { tokenStructuredMatcher } from \"../../scan/tokens\"\n\nexport function validateLookahead(options: {\n lookaheadStrategy: ILookaheadStrategy\n rules: Rule[]\n tokenTypes: TokenType[]\n grammarName: string\n}): IParserDefinitionError[] {\n const lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({\n rules: options.rules,\n tokenTypes: options.tokenTypes,\n grammarName: options.grammarName\n })\n return map(lookaheadValidationErrorMessages, (errorMessage) => ({\n type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION,\n ...errorMessage\n }))\n}\n\nexport function validateGrammar(\n topLevels: Rule[],\n tokenTypes: TokenType[],\n errMsgProvider: IGrammarValidatorErrorMessageProvider,\n grammarName: string\n): IParserDefinitionError[] {\n const duplicateErrors: IParserDefinitionError[] = flatMap(\n topLevels,\n (currTopLevel) => validateDuplicateProductions(currTopLevel, errMsgProvider)\n )\n\n const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(\n topLevels,\n tokenTypes,\n errMsgProvider\n )\n\n const tooManyAltsErrors = flatMap(topLevels, (curRule) =>\n validateTooManyAlts(curRule, errMsgProvider)\n )\n\n const duplicateRulesError = flatMap(topLevels, (curRule) =>\n validateRuleDoesNotAlreadyExist(\n curRule,\n topLevels,\n grammarName,\n errMsgProvider\n )\n )\n\n return duplicateErrors.concat(\n termsNamespaceConflictErrors,\n tooManyAltsErrors,\n duplicateRulesError\n )\n}\n\nfunction validateDuplicateProductions(\n topLevelRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDuplicatesDefinitionError[] {\n const collectorVisitor = new OccurrenceValidationCollector()\n topLevelRule.accept(collectorVisitor)\n const allRuleProductions = collectorVisitor.allProductions\n\n const productionGroups = groupBy(\n allRuleProductions,\n identifyProductionForDuplicates\n )\n\n const duplicates: any = pickBy(productionGroups, (currGroup) => {\n return currGroup.length > 1\n })\n\n const errors = map(values(duplicates), (currDuplicates: any) => {\n const firstProd: any = first(currDuplicates)\n const msg = errMsgProvider.buildDuplicateFoundError(\n topLevelRule,\n currDuplicates\n )\n const dslName = getProductionDslName(firstProd)\n const defError: IParserDuplicatesDefinitionError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName: dslName,\n occurrence: firstProd.idx\n }\n\n const param = getExtraProductionArgument(firstProd)\n if (param) {\n defError.parameter = param\n }\n\n return defError\n })\n return errors\n}\n\nexport function identifyProductionForDuplicates(\n prod: IProductionWithOccurrence\n): string {\n return `${getProductionDslName(prod)}_#_${\n prod.idx\n }_#_${getExtraProductionArgument(prod)}`\n}\n\nfunction getExtraProductionArgument(prod: IProductionWithOccurrence): string {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return \"\"\n }\n}\n\nexport class OccurrenceValidationCollector extends GAstVisitor {\n public allProductions: IProductionWithOccurrence[] = []\n\n public visitNonTerminal(subrule: NonTerminal): void {\n this.allProductions.push(subrule)\n }\n\n public visitOption(option: Option): void {\n this.allProductions.push(option)\n }\n\n public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n this.allProductions.push(manySep)\n }\n\n public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n this.allProductions.push(atLeastOne)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n atLeastOneSep: RepetitionMandatoryWithSeparator\n ): void {\n this.allProductions.push(atLeastOneSep)\n }\n\n public visitRepetition(many: Repetition): void {\n this.allProductions.push(many)\n }\n\n public visitAlternation(or: Alternation): void {\n this.allProductions.push(or)\n }\n\n public visitTerminal(terminal: Terminal): void {\n this.allProductions.push(terminal)\n }\n}\n\nexport function validateRuleDoesNotAlreadyExist(\n rule: Rule,\n allRules: Rule[],\n className: string,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n const errors = []\n const occurrences = reduce(\n allRules,\n (result, curRule) => {\n if (curRule.name === rule.name) {\n return result + 1\n }\n return result\n },\n 0\n )\n if (occurrences > 1) {\n const errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name\n })\n }\n\n return errors\n}\n\n// TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n// This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n// The grammar structure, only at runtime.\nexport function validateRuleIsOverridden(\n ruleName: string,\n definedRulesNames: string[],\n className: string\n): IParserDefinitionError[] {\n const errors = []\n let errMsg\n\n if (!includes(definedRulesNames, ruleName)) {\n errMsg =\n `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-` +\n `as it is not defined in any of the super grammars `\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName: ruleName\n })\n }\n\n return errors\n}\n\nexport function validateNoLeftRecursion(\n topRule: Rule,\n currRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider,\n path: Rule[] = []\n): IParserDefinitionError[] {\n const errors: IParserDefinitionError[] = []\n const nextNonTerminals = getFirstNoneTerminal(currRule.definition)\n if (isEmpty(nextNonTerminals)) {\n return []\n } else {\n const ruleName = topRule.name\n const foundLeftRecursion = includes(nextNonTerminals, topRule)\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName: ruleName\n })\n }\n\n // we are only looking for cyclic paths leading back to the specific topRule\n // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n const validNextSteps = difference(nextNonTerminals, path.concat([topRule]))\n const errorsFromNextSteps = flatMap(validNextSteps, (currRefRule) => {\n const newPath = clone(path)\n newPath.push(currRefRule)\n return validateNoLeftRecursion(\n topRule,\n currRefRule,\n errMsgProvider,\n newPath\n )\n })\n\n return errors.concat(errorsFromNextSteps)\n }\n}\n\nexport function getFirstNoneTerminal(definition: IProduction[]): Rule[] {\n let result: Rule[] = []\n if (isEmpty(definition)) {\n return result\n }\n const firstProd = first(definition)\n\n /* istanbul ignore else */\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule)\n } else if (\n firstProd instanceof AlternativeGAST ||\n firstProd instanceof Option ||\n firstProd instanceof RepetitionMandatory ||\n firstProd instanceof RepetitionMandatoryWithSeparator ||\n firstProd instanceof RepetitionWithSeparator ||\n firstProd instanceof Repetition\n ) {\n result = result.concat(\n getFirstNoneTerminal(<IProduction[]>firstProd.definition)\n )\n } else if (firstProd instanceof Alternation) {\n // each sub definition in alternation is a FLAT\n result = flatten(\n map(firstProd.definition, (currSubDef) =>\n getFirstNoneTerminal((<AlternativeGAST>currSubDef).definition)\n )\n )\n } else if (firstProd instanceof Terminal) {\n // nothing to see, move along\n } else {\n throw Error(\"non exhaustive match\")\n }\n\n const isFirstOptional = isOptionalProd(firstProd)\n const hasMore = definition.length > 1\n if (isFirstOptional && hasMore) {\n const rest = drop(definition)\n return result.concat(getFirstNoneTerminal(rest))\n } else {\n return result\n }\n}\n\nclass OrCollector extends GAstVisitor {\n public alternations: Alternation[] = []\n\n public visitAlternation(node: Alternation): void {\n this.alternations.push(node)\n }\n}\n\nexport function validateEmptyOrAlternative(\n topLevelRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserEmptyAlternativeDefinitionError[] {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n const ors = orCollector.alternations\n\n const errors = flatMap<Alternation, IParserEmptyAlternativeDefinitionError>(\n ors,\n (currOr) => {\n const exceptLast = dropRight(currOr.definition)\n return flatMap(exceptLast, (currAlternative, currAltIdx) => {\n const possibleFirstInAlt = nextPossibleTokensAfter(\n [currAlternative],\n [],\n tokenStructuredMatcher,\n 1\n )\n if (isEmpty(possibleFirstInAlt)) {\n return [\n {\n message: errMsgProvider.buildEmptyAlternationError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n emptyChoiceIdx: currAltIdx\n }),\n type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n alternative: currAltIdx + 1\n }\n ]\n } else {\n return []\n }\n })\n }\n )\n\n return errors\n}\n\nexport function validateAmbiguousAlternationAlternatives(\n topLevelRule: Rule,\n globalMaxLookahead: number,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserAmbiguousAlternativesDefinitionError[] {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n let ors = orCollector.alternations\n\n // New Handling of ignoring ambiguities\n // - https://github.com/chevrotain/chevrotain/issues/869\n ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true)\n\n const errors = flatMap(ors, (currOr: Alternation) => {\n const currOccurrence = currOr.idx\n const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead\n const alternatives = getLookaheadPathsForOr(\n currOccurrence,\n topLevelRule,\n actualMaxLookahead,\n currOr\n )\n const altsAmbiguityErrors = checkAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider\n )\n const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider\n )\n\n return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors)\n })\n\n return errors\n}\n\nexport class RepetitionCollector extends GAstVisitor {\n public allProductions: (IProductionWithOccurrence & {\n maxLookahead?: number\n })[] = []\n\n public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n this.allProductions.push(manySep)\n }\n\n public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n this.allProductions.push(atLeastOne)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n atLeastOneSep: RepetitionMandatoryWithSeparator\n ): void {\n this.allProductions.push(atLeastOneSep)\n }\n\n public visitRepetition(many: Repetition): void {\n this.allProductions.push(many)\n }\n}\n\nexport function validateTooManyAlts(\n topLevelRule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n const ors = orCollector.alternations\n\n const errors = flatMap(ors, (currOr) => {\n if (currOr.definition.length > 255) {\n return [\n {\n message: errMsgProvider.buildTooManyAlternativesError({\n topLevelRule: topLevelRule,\n alternation: currOr\n }),\n type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx\n }\n ]\n } else {\n return []\n }\n })\n\n return errors\n}\n\nexport function validateSomeNonEmptyLookaheadPath(\n topLevelRules: Rule[],\n maxLookahead: number,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n const errors: IParserDefinitionError[] = []\n forEach(topLevelRules, (currTopRule) => {\n const collectorVisitor = new RepetitionCollector()\n currTopRule.accept(collectorVisitor)\n const allRuleProductions = collectorVisitor.allProductions\n forEach(allRuleProductions, (currProd) => {\n const prodType = getProdType(currProd)\n const actualMaxLookahead = currProd.maxLookahead || maxLookahead\n const currOccurrence = currProd.idx\n const paths = getLookaheadPathsForOptionalProd(\n currOccurrence,\n currTopRule,\n prodType,\n actualMaxLookahead\n )\n const pathsInsideProduction = paths[0]\n if (isEmpty(flatten(pathsInsideProduction))) {\n const errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name\n })\n }\n })\n })\n\n return errors\n}\n\nexport interface IAmbiguityDescriptor {\n alts: number[]\n path: TokenType[]\n}\n\nfunction checkAlternativesAmbiguities(\n alternatives: Alternative[],\n alternation: Alternation,\n rule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserAmbiguousAlternativesDefinitionError[] {\n const foundAmbiguousPaths: Alternative = []\n const identicalAmbiguities = reduce(\n alternatives,\n (result, currAlt, currAltIdx) => {\n // ignore (skip) ambiguities with this alternative\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result\n }\n\n forEach(currAlt, (currPath) => {\n const altsCurrPathAppearsIn = [currAltIdx]\n forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n if (\n currAltIdx !== currOtherAltIdx &&\n containsPath(currOtherAlt, currPath) &&\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true\n ) {\n altsCurrPathAppearsIn.push(currOtherAltIdx)\n }\n })\n\n if (\n altsCurrPathAppearsIn.length > 1 &&\n !containsPath(foundAmbiguousPaths, currPath)\n ) {\n foundAmbiguousPaths.push(currPath)\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath\n })\n }\n })\n return result\n },\n [] as { alts: number[]; path: TokenType[] }[]\n )\n\n const currErrors = map(identicalAmbiguities, (currAmbDescriptor) => {\n const ambgIndices = map(\n currAmbDescriptor.alts,\n (currAltIdx) => currAltIdx + 1\n )\n\n const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path\n })\n\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: currAmbDescriptor.alts\n }\n })\n\n return currErrors\n}\n\nexport function checkPrefixAlternativesAmbiguities(\n alternatives: Alternative[],\n alternation: Alternation,\n rule: Rule,\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserAmbiguousAlternativesDefinitionError[] {\n // flatten\n const pathsAndIndices = reduce(\n alternatives,\n (result, currAlt, idx) => {\n const currPathsAndIdx = map(currAlt, (currPath) => {\n return { idx: idx, path: currPath }\n })\n return result.concat(currPathsAndIdx)\n },\n [] as { idx: number; path: TokenType[] }[]\n )\n\n const errors = compact(\n flatMap(pathsAndIndices, (currPathAndIdx) => {\n const alternativeGast = alternation.definition[currPathAndIdx.idx]\n // ignore (skip) ambiguities with this alternative\n if (alternativeGast.ignoreAmbiguities === true) {\n return []\n }\n const targetIdx = currPathAndIdx.idx\n const targetPath = currPathAndIdx.path\n\n const prefixAmbiguitiesPathsAndIndices = filter(\n pathsAndIndices,\n (searchPathAndIdx) => {\n // prefix ambiguity can only be created from lower idx (higher priority) path\n return (\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !==\n true &&\n searchPathAndIdx.idx < targetIdx &&\n // checking for strict prefix because identical lookaheads\n // will be be detected using a different validation.\n isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)\n )\n }\n )\n\n const currPathPrefixErrors = map(\n prefixAmbiguitiesPathsAndIndices,\n (currAmbPathAndIdx): IParserAmbiguousAlternativesDefinitionError => {\n const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1]\n const occurrence = alternation.idx === 0 ? \"\" : alternation.idx\n\n const message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbPathAndIdx.path\n })\n return {\n message: message,\n type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n ruleName: rule.name,\n occurrence: occurrence,\n alternatives: ambgIndices\n }\n }\n )\n\n return currPathPrefixErrors\n })\n )\n\n return errors\n}\n\nfunction checkTerminalAndNoneTerminalsNameSpace(\n topLevels: Rule[],\n tokenTypes: TokenType[],\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n): IParserDefinitionError[] {\n const errors: IParserDefinitionError[] = []\n\n const tokenNames = map(tokenTypes, (currToken) => currToken.name)\n\n forEach(topLevels, (currRule) => {\n const currRuleName = currRule.name\n if (includes(tokenNames, currRuleName)) {\n const errMsg = errMsgProvider.buildNamespaceConflictError(currRule)\n\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName\n })\n }\n })\n\n return errors\n}\n", "import { Rule } from \"@chevrotain/gast\"\nimport forEach from \"lodash/forEach\"\nimport defaults from \"lodash/defaults\"\nimport { resolveGrammar as orgResolveGrammar } from \"../resolver\"\nimport { validateGrammar as orgValidateGrammar } from \"../checks\"\nimport {\n defaultGrammarResolverErrorProvider,\n defaultGrammarValidatorErrorProvider\n} from \"../../errors_public\"\nimport { TokenType } from \"@chevrotain/types\"\nimport {\n IGrammarResolverErrorMessageProvider,\n IGrammarValidatorErrorMessageProvider,\n IParserDefinitionError\n} from \"../types\"\n\ntype ResolveGrammarOpts = {\n rules: Rule[]\n errMsgProvider?: IGrammarResolverErrorMessageProvider\n}\nexport function resolveGrammar(\n options: ResolveGrammarOpts\n): IParserDefinitionError[] {\n const actualOptions: Required<ResolveGrammarOpts> = defaults(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider\n })\n\n const topRulesTable: { [ruleName: string]: Rule } = {}\n forEach(options.rules, (rule) => {\n topRulesTable[rule.name] = rule\n })\n return orgResolveGrammar(topRulesTable, actualOptions.errMsgProvider)\n}\n\nexport function validateGrammar(options: {\n rules: Rule[]\n tokenTypes: TokenType[]\n grammarName: string\n errMsgProvider: IGrammarValidatorErrorMessageProvider\n}): IParserDefinitionError[] {\n options = defaults(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider\n })\n\n return orgValidateGrammar(\n options.rules,\n options.tokenTypes,\n options.errMsgProvider,\n options.grammarName\n )\n}\n", "import includes from \"lodash/includes\"\nimport {\n IToken,\n IRecognitionException,\n IRecognizerContext\n} from \"@chevrotain/types\"\n\nconst MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\"\nconst NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\"\nconst EARLY_EXIT_EXCEPTION = \"EarlyExitException\"\nconst NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\"\n\nconst RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION\n]\n\nObject.freeze(RECOGNITION_EXCEPTION_NAMES)\n\n// hacks to bypass no support for custom Errors in javascript/typescript\nexport function isRecognitionException(error: Error) {\n // can't do instanceof on hacked custom js exceptions\n return includes(RECOGNITION_EXCEPTION_NAMES, error.name)\n}\n\nabstract class RecognitionException\n extends Error\n implements IRecognitionException\n{\n context: IRecognizerContext\n resyncedTokens: IToken[] = []\n\n protected constructor(message: string, public token: IToken) {\n super(message)\n\n // fix prototype chain when typescript target is ES5\n Object.setPrototypeOf(this, new.target.prototype)\n\n /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\nexport class MismatchedTokenException extends RecognitionException {\n constructor(message: string, token: IToken, public previousToken: IToken) {\n super(message, token)\n this.name = MISMATCHED_TOKEN_EXCEPTION\n }\n}\n\nexport class NoViableAltException extends RecognitionException {\n constructor(message: string, token: IToken, public previousToken: IToken) {\n super(message, token)\n this.name = NO_VIABLE_ALT_EXCEPTION\n }\n}\n\nexport class NotAllInputParsedException extends RecognitionException {\n constructor(message: string, token: IToken) {\n super(message, token)\n this.name = NOT_ALL_INPUT_PARSED_EXCEPTION\n }\n}\n\nexport class EarlyExitException extends RecognitionException {\n constructor(message: string, token: IToken, public previousToken: IToken) {\n super(message, token)\n this.name = EARLY_EXIT_EXCEPTION\n }\n}\n", "import {\n createTokenInstance,\n EOF,\n tokenMatcher\n} from \"../../../scan/tokens_public\"\nimport {\n AbstractNextTerminalAfterProductionWalker,\n IFirstAfterRepetition\n} from \"../../grammar/interpreter\"\nimport isEmpty from \"lodash/isEmpty\"\nimport dropRight from \"lodash/dropRight\"\nimport flatten from \"lodash/flatten\"\nimport map from \"lodash/map\"\nimport find from \"lodash/find\"\nimport has from \"lodash/has\"\nimport includes from \"lodash/includes\"\nimport clone from \"lodash/clone\"\nimport {\n IParserConfig,\n IToken,\n ITokenGrammarPath,\n TokenType\n} from \"@chevrotain/types\"\nimport { MismatchedTokenException } from \"../../exceptions_public\"\nimport { IN } from \"../../constants\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\nexport const EOF_FOLLOW_KEY: any = {}\n\nexport interface IFollowKey {\n ruleName: string\n idxInCallingRule: number\n inRule: string\n}\n\nexport const IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\"\n\nexport class InRuleRecoveryException extends Error {\n constructor(message: string) {\n super(message)\n this.name = IN_RULE_RECOVERY_EXCEPTION\n }\n}\n\n/**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\nexport class Recoverable {\n recoveryEnabled: boolean\n firstAfterRepMap: Record<string, IFirstAfterRepetition>\n resyncFollows: Record<string, TokenType[]>\n\n initRecoverable(config: IParserConfig) {\n this.firstAfterRepMap = {}\n this.resyncFollows = {}\n\n this.recoveryEnabled = has(config, \"recoveryEnabled\")\n ? (config.recoveryEnabled as boolean) // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.recoveryEnabled\n\n // performance optimization, NOOP will be inlined which\n // effectively means that this optional feature does not exist\n // when not used.\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery\n }\n }\n\n public getTokenToInsert(tokType: TokenType): IToken {\n const tokToInsert = createTokenInstance(\n tokType,\n \"\",\n NaN,\n NaN,\n NaN,\n NaN,\n NaN,\n NaN\n )\n tokToInsert.isInsertedInRecovery = true\n return tokToInsert\n }\n\n public canTokenTypeBeInsertedInRecovery(tokType: TokenType): boolean {\n return true\n }\n\n public canTokenTypeBeDeletedInRecovery(tokType: TokenType): boolean {\n return true\n }\n\n tryInRepetitionRecovery(\n this: MixedInParser,\n grammarRule: Function,\n grammarRuleArgs: any[],\n lookAheadFunc: () => boolean,\n expectedTokType: TokenType\n ): void {\n // TODO: can the resyncTokenType be cached?\n const reSyncTokType = this.findReSyncTokenType()\n const savedLexerState = this.exportLexerState()\n const resyncedTokens: IToken[] = []\n let passedResyncPoint = false\n\n const nextTokenWithoutResync = this.LA(1)\n let currToken = this.LA(1)\n\n const generateErrorMessage = () => {\n const previousToken = this.LA(0)\n // we are preemptively re-syncing before an error has been detected, therefor we must reproduce\n // the error that would have been thrown\n const msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n })\n const error = new MismatchedTokenException(\n msg,\n nextTokenWithoutResync,\n this.LA(0)\n )\n // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n error.resyncedTokens = dropRight(resyncedTokens)\n this.SAVE_ERROR(error)\n }\n\n while (!passedResyncPoint) {\n // re-synced to a point where we can safely exit the repetition/\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage()\n return // must return here to avoid reverting the inputIdx\n } else if (lookAheadFunc.call(this)) {\n // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n generateErrorMessage()\n // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n grammarRule.apply(this, grammarRuleArgs)\n return // must return here to avoid reverting the inputIdx\n } else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true\n } else {\n currToken = this.SKIP_TOKEN()\n this.addToResyncTokens(currToken, resyncedTokens)\n }\n }\n\n // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n // \"between rules\" resync recovery later in the flow.\n this.importLexerState(savedLexerState)\n }\n\n shouldInRepetitionRecoveryBeTried(\n this: MixedInParser,\n expectTokAfterLastMatch: TokenType,\n nextTokIdx: number,\n notStuck: boolean | undefined\n ): boolean {\n // Edge case of arriving from a MANY repetition which is stuck\n // Attempting recovery in this case could cause an infinite loop\n if (notStuck === false) {\n return false\n }\n\n // no need to recover, next token is what we expect...\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false\n }\n\n // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n // and prefer some backtracking path that includes recovered errors.\n if (this.isBackTracking()) {\n return false\n }\n\n // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n //noinspection RedundantIfStatementJS\n if (\n this.canPerformInRuleRecovery(\n expectTokAfterLastMatch,\n this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx)\n )\n ) {\n return false\n }\n\n return true\n }\n\n // Error Recovery functionality\n getFollowsForInRuleRecovery(\n this: MixedInParser,\n tokType: TokenType,\n tokIdxInRule: number\n ): TokenType[] {\n const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule)\n const follows = this.getNextPossibleTokenTypes(grammarPath)\n return follows\n }\n\n tryInRuleRecovery(\n this: MixedInParser,\n expectedTokType: TokenType,\n follows: TokenType[]\n ): IToken {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n const tokToInsert = this.getTokenToInsert(expectedTokType)\n return tokToInsert\n }\n\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n const nextTok = this.SKIP_TOKEN()\n this.consumeToken()\n return nextTok\n }\n\n throw new InRuleRecoveryException(\"sad sad panda\")\n }\n\n canPerformInRuleRecovery(\n this: MixedInParser,\n expectedToken: TokenType,\n follows: TokenType[]\n ): boolean {\n return (\n this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n this.canRecoverWithSingleTokenDeletion(expectedToken)\n )\n }\n\n canRecoverWithSingleTokenInsertion(\n this: MixedInParser,\n expectedTokType: TokenType,\n follows: TokenType[]\n ): boolean {\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false\n }\n\n // must know the possible following tokens to perform single token insertion\n if (isEmpty(follows)) {\n return false\n }\n\n const mismatchedTok = this.LA(1)\n const isMisMatchedTokInFollows =\n find(follows, (possibleFollowsTokType: TokenType) => {\n return this.tokenMatcher(mismatchedTok, possibleFollowsTokType)\n }) !== undefined\n\n return isMisMatchedTokInFollows\n }\n\n canRecoverWithSingleTokenDeletion(\n this: MixedInParser,\n expectedTokType: TokenType\n ): boolean {\n if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {\n return false\n }\n\n const isNextTokenWhatIsExpected = this.tokenMatcher(\n this.LA(2),\n expectedTokType\n )\n return isNextTokenWhatIsExpected\n }\n\n isInCurrentRuleReSyncSet(\n this: MixedInParser,\n tokenTypeIdx: TokenType\n ): boolean {\n const followKey = this.getCurrFollowKey()\n const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey)\n return includes(currentRuleReSyncSet, tokenTypeIdx)\n }\n\n findReSyncTokenType(this: MixedInParser): TokenType {\n const allPossibleReSyncTokTypes = this.flattenFollowSet()\n // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input\n let nextToken = this.LA(1)\n let k = 2\n while (true) {\n const foundMatch = find(allPossibleReSyncTokTypes, (resyncTokType) => {\n const canMatch = tokenMatcher(nextToken, resyncTokType)\n return canMatch\n })\n if (foundMatch !== undefined) {\n return foundMatch\n }\n nextToken = this.LA(k)\n k++\n }\n }\n\n getCurrFollowKey(this: MixedInParser): IFollowKey {\n // the length is at least one as we always add the ruleName to the stack before invoking the rule.\n if (this.RULE_STACK.length === 1) {\n return EOF_FOLLOW_KEY\n }\n const currRuleShortName = this.getLastExplicitRuleShortName()\n const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex()\n const prevRuleShortName = this.getPreviousExplicitRuleShortName()\n\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName)\n }\n }\n\n buildFullFollowKeyStack(this: MixedInParser): IFollowKey[] {\n const explicitRuleStack = this.RULE_STACK\n const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK\n\n return map(explicitRuleStack, (ruleName, idx) => {\n if (idx === 0) {\n return EOF_FOLLOW_KEY\n }\n return {\n ruleName: this.shortRuleNameToFullName(ruleName),\n idxInCallingRule: explicitOccurrenceStack[idx],\n inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1])\n }\n })\n }\n\n flattenFollowSet(this: MixedInParser): TokenType[] {\n const followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n return this.getFollowSetFromFollowKey(currKey)\n })\n return <any>flatten(followStack)\n }\n\n getFollowSetFromFollowKey(\n this: MixedInParser,\n followKey: IFollowKey\n ): TokenType[] {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF]\n }\n\n const followName =\n followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule\n\n return this.resyncFollows[followName]\n }\n\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n addToResyncTokens(\n this: MixedInParser,\n token: IToken,\n resyncTokens: IToken[]\n ): IToken[] {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token)\n }\n return resyncTokens\n }\n\n reSyncTo(this: MixedInParser, tokType: TokenType): IToken[] {\n const resyncedTokens: IToken[] = []\n let nextTok = this.LA(1)\n while (this.tokenMatcher(nextTok, tokType) === false) {\n nextTok = this.SKIP_TOKEN()\n this.addToResyncTokens(nextTok, resyncedTokens)\n }\n // the last token is not part of the error.\n return dropRight(resyncedTokens)\n }\n\n attemptInRepetitionRecovery(\n this: MixedInParser,\n prodFunc: Function,\n args: any[],\n lookaheadFunc: () => boolean,\n dslMethodIdx: number,\n prodOccurrence: number,\n nextToksWalker: typeof AbstractNextTerminalAfterProductionWalker,\n notStuck?: boolean\n ): void {\n // by default this is a NO-OP\n // The actual implementation is with the function(not method) below\n }\n\n getCurrentGrammarPath(\n this: MixedInParser,\n tokType: TokenType,\n tokIdxInRule: number\n ): ITokenGrammarPath {\n const pathRuleStack: string[] = this.getHumanReadableRuleStack()\n const pathOccurrenceStack: number[] = clone(this.RULE_OCCURRENCE_STACK)\n const grammarPath: any = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule\n }\n\n return grammarPath\n }\n getHumanReadableRuleStack(this: MixedInParser): string[] {\n return map(this.RULE_STACK, (currShortName) =>\n this.shortRuleNameToFullName(currShortName)\n )\n }\n}\n\nexport function attemptInRepetitionRecovery(\n this: MixedInParser,\n prodFunc: Function,\n args: any[],\n lookaheadFunc: () => boolean,\n dslMethodIdx: number,\n prodOccurrence: number,\n nextToksWalker: typeof AbstractNextTerminalAfterProductionWalker,\n notStuck?: boolean\n): void {\n const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence)\n let firstAfterRepInfo = this.firstAfterRepMap[key]\n if (firstAfterRepInfo === undefined) {\n const currRuleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[currRuleName]\n const walker: AbstractNextTerminalAfterProductionWalker =\n new nextToksWalker(ruleGrammar, prodOccurrence)\n firstAfterRepInfo = walker.startWalking()\n this.firstAfterRepMap[key] = firstAfterRepInfo\n }\n\n let expectTokAfterLastMatch = firstAfterRepInfo.token\n let nextTokIdx = firstAfterRepInfo.occurrence\n const isEndOfRule = firstAfterRepInfo.isEndOfRule\n\n // special edge case of a TOP most repetition after which the input should END.\n // this will force an attempt for inRule recovery in that scenario.\n if (\n this.RULE_STACK.length === 1 &&\n isEndOfRule &&\n expectTokAfterLastMatch === undefined\n ) {\n expectTokAfterLastMatch = EOF\n nextTokIdx = 1\n }\n\n // We don't have anything to re-sync to...\n // this condition was extracted from `shouldInRepetitionRecoveryBeTried` to act as a type-guard\n if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n return\n }\n\n if (\n this.shouldInRepetitionRecoveryBeTried(\n expectTokAfterLastMatch,\n nextTokIdx,\n notStuck\n )\n ) {\n // TODO: performance optimization: instead of passing the original args here, we modify\n // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n // to avoid searching the cache for it once more.\n this.tryInRepetitionRecovery(\n prodFunc,\n args,\n lookaheadFunc,\n expectTokAfterLastMatch\n )\n }\n}\n", "// Lookahead keys are 32Bit integers in the form\n// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n// XXXX -> Occurrence Index bitmap.\n// YYYY -> DSL Method Type bitmap.\n// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n// TTTTTTTTT -> alternation alternative index bitmap\n\nexport const BITS_FOR_METHOD_TYPE = 4\nexport const BITS_FOR_OCCURRENCE_IDX = 8\nexport const BITS_FOR_RULE_IDX = 12\n// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.\nexport const BITS_FOR_ALT_IDX = 8\n\n// short string used as part of mapping keys.\n// being short improves the performance when composing KEYS for maps out of these\n// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\nexport const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX\nexport const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX\nexport const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX\nexport const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX\nexport const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX\nexport const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX\n\n// this actually returns a number, but it is always used as a string (object prop key)\nexport function getKeyForAutomaticLookahead(\n ruleIdx: number,\n dslMethodIdx: number,\n occurrence: number\n): number {\n return occurrence | dslMethodIdx | ruleIdx\n}\n\nconst BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX\n", "import {\n ILookaheadStrategy,\n ILookaheadValidationError,\n IOrAlt,\n Rule,\n TokenType,\n OptionalProductionType\n} from \"@chevrotain/types\"\nimport flatMap from \"lodash/flatMap\"\nimport isEmpty from \"lodash/isEmpty\"\nimport { defaultGrammarValidatorErrorProvider } from \"../errors_public\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser/parser\"\nimport {\n validateAmbiguousAlternationAlternatives,\n validateEmptyOrAlternative,\n validateNoLeftRecursion,\n validateSomeNonEmptyLookaheadPath\n} from \"./checks\"\nimport {\n buildAlternativesLookAheadFunc,\n buildLookaheadFuncForOptionalProd,\n buildLookaheadFuncForOr,\n buildSingleAlternativeLookaheadFunction,\n getProdType\n} from \"./lookahead\"\nimport { IParserDefinitionError } from \"./types\"\n\nexport class LLkLookaheadStrategy implements ILookaheadStrategy {\n readonly maxLookahead: number\n\n constructor(options?: { maxLookahead?: number }) {\n this.maxLookahead =\n options?.maxLookahead ?? DEFAULT_PARSER_CONFIG.maxLookahead\n }\n\n validate(options: {\n rules: Rule[]\n tokenTypes: TokenType[]\n grammarName: string\n }): ILookaheadValidationError[] {\n const leftRecursionErrors = this.validateNoLeftRecursion(options.rules)\n\n if (isEmpty(leftRecursionErrors)) {\n const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules)\n const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(\n options.rules,\n this.maxLookahead\n )\n const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(\n options.rules,\n this.maxLookahead\n )\n const allErrors = [\n ...leftRecursionErrors,\n ...emptyAltErrors,\n ...ambiguousAltsErrors,\n ...emptyRepetitionErrors\n ]\n return allErrors\n }\n return leftRecursionErrors\n }\n\n validateNoLeftRecursion(rules: Rule[]): IParserDefinitionError[] {\n return flatMap(rules, (currTopRule) =>\n validateNoLeftRecursion(\n currTopRule,\n currTopRule,\n defaultGrammarValidatorErrorProvider\n )\n )\n }\n\n validateEmptyOrAlternatives(rules: Rule[]): IParserDefinitionError[] {\n return flatMap(rules, (currTopRule) =>\n validateEmptyOrAlternative(\n currTopRule,\n defaultGrammarValidatorErrorProvider\n )\n )\n }\n\n validateAmbiguousAlternationAlternatives(\n rules: Rule[],\n maxLookahead: number\n ): IParserDefinitionError[] {\n return flatMap(rules, (currTopRule) =>\n validateAmbiguousAlternationAlternatives(\n currTopRule,\n maxLookahead,\n defaultGrammarValidatorErrorProvider\n )\n )\n }\n\n validateSomeNonEmptyLookaheadPath(\n rules: Rule[],\n maxLookahead: number\n ): IParserDefinitionError[] {\n return validateSomeNonEmptyLookaheadPath(\n rules,\n maxLookahead,\n defaultGrammarValidatorErrorProvider\n )\n }\n\n buildLookaheadForAlternation(options: {\n prodOccurrence: number\n rule: Rule\n maxLookahead: number\n hasPredicates: boolean\n dynamicTokensEnabled: boolean\n }): (orAlts?: IOrAlt<any>[] | undefined) => number | undefined {\n return buildLookaheadFuncForOr(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.hasPredicates,\n options.dynamicTokensEnabled,\n buildAlternativesLookAheadFunc\n )\n }\n\n buildLookaheadForOptional(options: {\n prodOccurrence: number\n prodType: OptionalProductionType\n rule: Rule\n maxLookahead: number\n dynamicTokensEnabled: boolean\n }): () => boolean {\n return buildLookaheadFuncForOptionalProd(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.dynamicTokensEnabled,\n getProdType(options.prodType),\n buildSingleAlternativeLookaheadFunction\n )\n }\n}\n", "import forEach from \"lodash/forEach\"\nimport has from \"lodash/has\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\nimport {\n ILookaheadStrategy,\n IParserConfig,\n OptionalProductionType\n} from \"@chevrotain/types\"\nimport {\n AT_LEAST_ONE_IDX,\n AT_LEAST_ONE_SEP_IDX,\n getKeyForAutomaticLookahead,\n MANY_IDX,\n MANY_SEP_IDX,\n OPTION_IDX,\n OR_IDX\n} from \"../../grammar/keys\"\nimport { MixedInParser } from \"./parser_traits\"\nimport {\n Alternation,\n GAstVisitor,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule\n} from \"@chevrotain/gast\"\nimport { getProductionDslName } from \"@chevrotain/gast\"\nimport { LLkLookaheadStrategy } from \"../../grammar/llk_lookahead\"\n\n/**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\nexport class LooksAhead {\n maxLookahead: number\n lookAheadFuncsCache: any\n dynamicTokensEnabled: boolean\n lookaheadStrategy: ILookaheadStrategy\n\n initLooksAhead(config: IParserConfig) {\n this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\")\n ? (config.dynamicTokensEnabled as boolean) // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled\n\n this.maxLookahead = has(config, \"maxLookahead\")\n ? (config.maxLookahead as number) // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.maxLookahead\n\n this.lookaheadStrategy = has(config, \"lookaheadStrategy\")\n ? (config.lookaheadStrategy as ILookaheadStrategy) // assumes end user provides the correct config value/type\n : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead })\n\n this.lookAheadFuncsCache = new Map()\n }\n\n preComputeLookaheadFunctions(this: MixedInParser, rules: Rule[]): void {\n forEach(rules, (currRule) => {\n this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n const {\n alternation,\n repetition,\n option,\n repetitionMandatory,\n repetitionMandatoryWithSeparator,\n repetitionWithSeparator\n } = collectMethods(currRule)\n\n forEach(alternation, (currProd) => {\n const prodIdx = currProd.idx === 0 ? \"\" : currProd.idx\n this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({\n prodOccurrence: currProd.idx,\n rule: currRule,\n maxLookahead: currProd.maxLookahead || this.maxLookahead,\n hasPredicates: currProd.hasPredicates,\n dynamicTokensEnabled: this.dynamicTokensEnabled\n })\n\n const key = getKeyForAutomaticLookahead(\n this.fullRuleNameToShort[currRule.name],\n OR_IDX,\n currProd.idx\n )\n this.setLaFuncCache(key, laFunc)\n })\n })\n\n forEach(repetition, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_IDX,\n \"Repetition\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(option, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n OPTION_IDX,\n \"Option\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(repetitionMandatory, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_IDX,\n \"RepetitionMandatory\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(repetitionMandatoryWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_SEP_IDX,\n \"RepetitionMandatoryWithSeparator\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n\n forEach(repetitionWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_SEP_IDX,\n \"RepetitionWithSeparator\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n )\n })\n })\n })\n }\n\n computeLookaheadFunc(\n this: MixedInParser,\n rule: Rule,\n prodOccurrence: number,\n prodKey: number,\n prodType: OptionalProductionType,\n prodMaxLookahead: number | undefined,\n dslMethodName: string\n ): void {\n this.TRACE_INIT(\n `${dslMethodName}${prodOccurrence === 0 ? \"\" : prodOccurrence}`,\n () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({\n prodOccurrence,\n rule,\n maxLookahead: prodMaxLookahead || this.maxLookahead,\n dynamicTokensEnabled: this.dynamicTokensEnabled,\n prodType\n })\n const key = getKeyForAutomaticLookahead(\n this.fullRuleNameToShort[rule.name],\n prodKey,\n prodOccurrence\n )\n this.setLaFuncCache(key, laFunc)\n }\n )\n }\n\n // this actually returns a number, but it is always used as a string (object prop key)\n getKeyForAutomaticLookahead(\n this: MixedInParser,\n dslMethodIdx: number,\n occurrence: number\n ): number {\n const currRuleShortName: any = this.getLastExplicitRuleShortName()\n return getKeyForAutomaticLookahead(\n currRuleShortName,\n dslMethodIdx,\n occurrence\n )\n }\n\n getLaFuncFromCache(this: MixedInParser, key: number): Function {\n return this.lookAheadFuncsCache.get(key)\n }\n\n /* istanbul ignore next */\n setLaFuncCache(this: MixedInParser, key: number, value: Function): void {\n this.lookAheadFuncsCache.set(key, value)\n }\n}\n\nclass DslMethodsCollectorVisitor extends GAstVisitor {\n public dslMethods: {\n option: Option[]\n alternation: Alternation[]\n repetition: Repetition[]\n repetitionWithSeparator: RepetitionWithSeparator[]\n repetitionMandatory: RepetitionMandatory[]\n repetitionMandatoryWithSeparator: RepetitionMandatoryWithSeparator[]\n } = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n }\n\n reset() {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n }\n }\n\n public visitOption(option: Option): void {\n this.dslMethods.option.push(option)\n }\n\n public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n this.dslMethods.repetitionWithSeparator.push(manySep)\n }\n\n public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n this.dslMethods.repetitionMandatory.push(atLeastOne)\n }\n\n public visitRepetitionMandatoryWithSeparator(\n atLeastOneSep: RepetitionMandatoryWithSeparator\n ): void {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep)\n }\n\n public visitRepetition(many: Repetition): void {\n this.dslMethods.repetition.push(many)\n }\n\n public visitAlternation(or: Alternation): void {\n this.dslMethods.alternation.push(or)\n }\n}\n\nconst collectorVisitor = new DslMethodsCollectorVisitor()\nexport function collectMethods(rule: Rule): {\n option: Option[]\n alternation: Alternation[]\n repetition: Repetition[]\n repetitionWithSeparator: RepetitionWithSeparator[]\n repetitionMandatory: RepetitionMandatory[]\n repetitionMandatoryWithSeparator: RepetitionMandatoryWithSeparator[]\n} {\n collectorVisitor.reset()\n rule.accept(collectorVisitor)\n const dslMethods = collectorVisitor.dslMethods\n // avoid uncleaned references\n collectorVisitor.reset()\n return <any>dslMethods\n}\n", "import { CstNode, CstNodeLocation, IToken } from \"@chevrotain/types\"\n\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationOnlyOffset(\n currNodeLocation: CstNodeLocation,\n newLocationInfo: Required<Pick<IToken, \"startOffset\" | \"endOffset\">>\n): void {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (both start/end offsets exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n // Once the startOffset has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset! < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n}\n\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationFull(\n currNodeLocation: CstNodeLocation,\n newLocationInfo: CstNodeLocation\n): void {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (all start/end props exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.startColumn = newLocationInfo.startColumn\n currNodeLocation.startLine = newLocationInfo.startLine\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n // Once the start props has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset! < newLocationInfo.endOffset! === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n}\n\nexport function addTerminalToCst(\n node: CstNode,\n token: IToken,\n tokenTypeName: string\n): void {\n if (node.children[tokenTypeName] === undefined) {\n node.children[tokenTypeName] = [token]\n } else {\n node.children[tokenTypeName].push(token)\n }\n}\n\nexport function addNoneTerminalToCst(\n node: CstNode,\n ruleName: string,\n ruleResult: any\n): void {\n if (node.children[ruleName] === undefined) {\n node.children[ruleName] = [ruleResult]\n } else {\n node.children[ruleName].push(ruleResult)\n }\n}\n", "const NAME = \"name\"\n\nexport function defineNameProp(obj: {}, nameValue: string): void {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue\n })\n}\n", "import isEmpty from \"lodash/isEmpty\"\nimport compact from \"lodash/compact\"\nimport isArray from \"lodash/isArray\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport filter from \"lodash/filter\"\nimport keys from \"lodash/keys\"\nimport isFunction from \"lodash/isFunction\"\nimport isUndefined from \"lodash/isUndefined\"\nimport { defineNameProp } from \"../../lang/lang_extensions\"\nimport { CstNode, ICstVisitor } from \"@chevrotain/types\"\n\nexport function defaultVisit<IN>(ctx: any, param: IN): void {\n const childrenNames = keys(ctx)\n const childrenNamesLength = childrenNames.length\n for (let i = 0; i < childrenNamesLength; i++) {\n const currChildName = childrenNames[i]\n const currChildArray = ctx[currChildName]\n const currChildArrayLength = currChildArray.length\n for (let j = 0; j < currChildArrayLength; j++) {\n const currChild: any = currChildArray[j]\n // distinction between Tokens Children and CstNode children\n if (currChild.tokenTypeIdx === undefined) {\n this[currChild.name](currChild.children, param)\n }\n }\n }\n // defaultVisit does not support generic out param\n}\n\nexport function createBaseSemanticVisitorConstructor(\n grammarName: string,\n ruleNames: string[]\n): {\n new (...args: any[]): ICstVisitor<any, any>\n} {\n const derivedConstructor: any = function () {}\n\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemantics\")\n\n const semanticProto = {\n visit: function (cstNode: CstNode | CstNode[], param: any) {\n // enables writing more concise visitor methods when CstNode has only a single child\n if (isArray(cstNode)) {\n // A CST Node's children dictionary can never have empty arrays as values\n // If a key is defined there will be at least one element in the corresponding value array.\n cstNode = cstNode[0]\n }\n\n // enables passing optional CstNodes concisely.\n if (isUndefined(cstNode)) {\n return undefined\n }\n\n return this[cstNode.name](cstNode.children, param)\n },\n\n validateVisitor: function () {\n const semanticDefinitionErrors = validateVisitor(this, ruleNames)\n if (!isEmpty(semanticDefinitionErrors)) {\n const errorMessages = map(\n semanticDefinitionErrors,\n (currDefError) => currDefError.msg\n )\n throw Error(\n `Errors Detected in CST Visitor <${this.constructor.name}>:\\n\\t` +\n `${errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\\t\")}`\n )\n }\n }\n }\n\n derivedConstructor.prototype = semanticProto\n derivedConstructor.prototype.constructor = derivedConstructor\n\n derivedConstructor._RULE_NAMES = ruleNames\n\n return derivedConstructor\n}\n\nexport function createBaseVisitorConstructorWithDefaults(\n grammarName: string,\n ruleNames: string[],\n baseConstructor: Function\n): {\n new (...args: any[]): ICstVisitor<any, any>\n} {\n const derivedConstructor: any = function () {}\n\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemanticsWithDefaults\")\n\n const withDefaultsProto = Object.create(baseConstructor.prototype)\n forEach(ruleNames, (ruleName) => {\n withDefaultsProto[ruleName] = defaultVisit\n })\n\n derivedConstructor.prototype = withDefaultsProto\n derivedConstructor.prototype.constructor = derivedConstructor\n\n return derivedConstructor\n}\n\nexport enum CstVisitorDefinitionError {\n REDUNDANT_METHOD,\n MISSING_METHOD\n}\n\nexport interface IVisitorDefinitionError {\n msg: string\n type: CstVisitorDefinitionError\n methodName: string\n}\n\nexport function validateVisitor(\n visitorInstance: ICstVisitor<unknown, unknown>,\n ruleNames: string[]\n): IVisitorDefinitionError[] {\n const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames)\n\n return missingErrors\n}\n\nexport function validateMissingCstMethods(\n visitorInstance: ICstVisitor<unknown, unknown>,\n ruleNames: string[]\n): IVisitorDefinitionError[] {\n const missingRuleNames = filter(ruleNames, (currRuleName) => {\n return isFunction((visitorInstance as any)[currRuleName]) === false\n })\n\n const errors: IVisitorDefinitionError[] = map(\n missingRuleNames,\n (currRuleName) => {\n return {\n msg: `Missing visitor method: <${currRuleName}> on ${<any>(\n visitorInstance.constructor.name\n )} CST Visitor.`,\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName\n }\n }\n )\n\n return compact<IVisitorDefinitionError>(errors)\n}\n", "import {\n addNoneTerminalToCst,\n addTerminalToCst,\n setNodeLocationFull,\n setNodeLocationOnlyOffset\n} from \"../../cst/cst\"\nimport noop from \"lodash/noop\"\nimport has from \"lodash/has\"\nimport keys from \"lodash/keys\"\nimport isUndefined from \"lodash/isUndefined\"\nimport {\n createBaseSemanticVisitorConstructor,\n createBaseVisitorConstructorWithDefaults\n} from \"../../cst/cst_visitor\"\nimport {\n CstNode,\n CstNodeLocation,\n ICstVisitor,\n IParserConfig,\n IToken,\n nodeLocationTrackingOptions\n} from \"@chevrotain/types\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\n/**\n * This trait is responsible for the CST building logic.\n */\nexport class TreeBuilder {\n outputCst: boolean\n CST_STACK: CstNode[]\n baseCstVisitorConstructor: Function\n baseCstVisitorWithDefaultsConstructor: Function\n\n // dynamically assigned Methods\n setNodeLocationFromNode: (\n nodeLocation: CstNodeLocation,\n locationInformation: CstNodeLocation\n ) => void\n setNodeLocationFromToken: (\n nodeLocation: CstNodeLocation,\n locationInformation: CstNodeLocation\n ) => void\n cstPostRule: (this: MixedInParser, ruleCstNode: CstNode) => void\n\n setInitialNodeLocation: (cstNode: CstNode) => void\n nodeLocationTracking: nodeLocationTrackingOptions\n\n initTreeBuilder(this: MixedInParser, config: IParserConfig) {\n this.CST_STACK = []\n\n // outputCst is no longer exposed/defined in the pubic API\n this.outputCst = (config as any).outputCst\n\n this.nodeLocationTracking = has(config, \"nodeLocationTracking\")\n ? (config.nodeLocationTracking as nodeLocationTrackingOptions) // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.nodeLocationTracking\n\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = noop\n this.cstFinallyStateUpdate = noop\n this.cstPostTerminal = noop\n this.cstPostNonTerminal = noop\n this.cstPostRule = noop\n } else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull\n this.setNodeLocationFromNode = setNodeLocationFull\n this.cstPostRule = noop\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery\n } else {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = this.cstPostRuleFull\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular\n }\n } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = <any>setNodeLocationOnlyOffset\n this.setNodeLocationFromNode = <any>setNodeLocationOnlyOffset\n this.cstPostRule = noop\n this.setInitialNodeLocation =\n this.setInitialNodeLocationOnlyOffsetRecovery\n } else {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = this.cstPostRuleOnlyOffset\n this.setInitialNodeLocation =\n this.setInitialNodeLocationOnlyOffsetRegular\n }\n } else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = noop\n this.setInitialNodeLocation = noop\n } else {\n throw Error(\n `Invalid <nodeLocationTracking> config option: \"${config.nodeLocationTracking}\"`\n )\n }\n }\n }\n\n setInitialNodeLocationOnlyOffsetRecovery(\n this: MixedInParser,\n cstNode: any\n ): void {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN\n }\n }\n\n setInitialNodeLocationOnlyOffsetRegular(\n this: MixedInParser,\n cstNode: any\n ): void {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN\n }\n }\n\n setInitialNodeLocationFullRecovery(this: MixedInParser, cstNode: any): void {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n }\n }\n\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n\n * @param cstNode\n */\n setInitialNodeLocationFullRegular(this: MixedInParser, cstNode: any): void {\n const nextToken = this.LA(1)\n cstNode.location = {\n startOffset: nextToken.startOffset,\n startLine: nextToken.startLine,\n startColumn: nextToken.startColumn,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n }\n }\n\n cstInvocationStateUpdate(this: MixedInParser, fullRuleName: string): void {\n const cstNode: CstNode = {\n name: fullRuleName,\n children: Object.create(null)\n }\n\n this.setInitialNodeLocation(cstNode)\n this.CST_STACK.push(cstNode)\n }\n\n cstFinallyStateUpdate(this: MixedInParser): void {\n this.CST_STACK.pop()\n }\n\n cstPostRuleFull(this: MixedInParser, ruleCstNode: CstNode): void {\n // casts to `required<CstNodeLocation>` are safe because `cstPostRuleFull` should only be invoked when full location is enabled\n const prevToken = this.LA(0) as Required<CstNodeLocation>\n const loc = ruleCstNode.location as Required<CstNodeLocation>\n\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n loc.endLine = prevToken.endLine\n loc.endColumn = prevToken.endColumn\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n loc.startLine = NaN\n loc.startColumn = NaN\n }\n }\n\n cstPostRuleOnlyOffset(this: MixedInParser, ruleCstNode: CstNode): void {\n const prevToken = this.LA(0)\n // `location' is not null because `cstPostRuleOnlyOffset` will only be invoked when location tracking is enabled.\n const loc = ruleCstNode.location!\n\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n }\n }\n\n cstPostTerminal(\n this: MixedInParser,\n key: string,\n consumedToken: IToken\n ): void {\n const rootCst = this.CST_STACK[this.CST_STACK.length - 1]\n addTerminalToCst(rootCst, consumedToken, key)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromToken(rootCst.location!, <any>consumedToken)\n }\n\n cstPostNonTerminal(\n this: MixedInParser,\n ruleCstResult: CstNode,\n ruleName: string\n ): void {\n const preCstNode = this.CST_STACK[this.CST_STACK.length - 1]\n addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromNode(preCstNode.location!, ruleCstResult.location!)\n }\n\n getBaseCstVisitorConstructor<IN = any, OUT = any>(\n this: MixedInParser\n ): {\n new (...args: any[]): ICstVisitor<IN, OUT>\n } {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(\n this.className,\n keys(this.gastProductionsCache)\n )\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor\n return newBaseCstVisitorConstructor\n }\n\n return <any>this.baseCstVisitorConstructor\n }\n\n getBaseCstVisitorConstructorWithDefaults<IN = any, OUT = any>(\n this: MixedInParser\n ): {\n new (...args: any[]): ICstVisitor<IN, OUT>\n } {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n const newConstructor = createBaseVisitorConstructorWithDefaults(\n this.className,\n keys(this.gastProductionsCache),\n this.getBaseCstVisitorConstructor()\n )\n this.baseCstVisitorWithDefaultsConstructor = newConstructor\n return newConstructor\n }\n\n return <any>this.baseCstVisitorWithDefaultsConstructor\n }\n\n getLastExplicitRuleShortName(this: MixedInParser): number {\n const ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 1]\n }\n\n getPreviousExplicitRuleShortName(this: MixedInParser): number {\n const ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 2]\n }\n\n getLastExplicitRuleOccurrenceIndex(this: MixedInParser): number {\n const occurrenceStack = this.RULE_OCCURRENCE_STACK\n return occurrenceStack[occurrenceStack.length - 1]\n }\n}\n", "import { END_OF_FILE } from \"../parser\"\nimport { IToken } from \"@chevrotain/types\"\nimport { MixedInParser } from \"./parser_traits\"\n\n/**\n * Trait responsible abstracting over the interaction with Lexer output (Token vector).\n *\n * This could be generalized to support other kinds of lexers, e.g.\n * - Just in Time Lexing / Lexer-Less parsing.\n * - Streaming Lexer.\n */\nexport class LexerAdapter {\n tokVector: IToken[]\n tokVectorLength: number\n currIdx: number\n\n initLexerAdapter() {\n this.tokVector = []\n this.tokVectorLength = 0\n this.currIdx = -1\n }\n\n set input(newInput: IToken[]) {\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n if (this.selfAnalysisDone !== true) {\n throw Error(\n `Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`\n )\n }\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n this.reset()\n this.tokVector = newInput\n this.tokVectorLength = newInput.length\n }\n\n get input(): IToken[] {\n return this.tokVector\n }\n\n // skips a token and returns the next token\n SKIP_TOKEN(this: MixedInParser): IToken {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken()\n return this.LA(1)\n } else {\n return END_OF_FILE\n }\n }\n\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LA(this: MixedInParser, howMuch: number): IToken {\n const soughtIdx = this.currIdx + howMuch\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE\n } else {\n return this.tokVector[soughtIdx]\n }\n }\n\n consumeToken(this: MixedInParser) {\n this.currIdx++\n }\n\n exportLexerState(this: MixedInParser): number {\n return this.currIdx\n }\n\n importLexerState(this: MixedInParser, newState: number) {\n this.currIdx = newState\n }\n\n resetLexerState(this: MixedInParser): void {\n this.currIdx = -1\n }\n\n moveToTerminatedState(this: MixedInParser): void {\n this.currIdx = this.tokVector.length - 1\n }\n\n getLexerPosition(this: MixedInParser): number {\n return this.exportLexerState()\n }\n}\n", "import {\n AtLeastOneSepMethodOpts,\n ConsumeMethodOpts,\n DSLMethodOpts,\n DSLMethodOptsWithErr,\n GrammarAction,\n IOrAlt,\n IRuleConfig,\n ISerializedGast,\n IToken,\n ManySepMethodOpts,\n OrMethodOpts,\n SubruleMethodOpts,\n TokenType\n} from \"@chevrotain/types\"\nimport values from \"lodash/values\"\nimport includes from \"lodash/includes\"\nimport { isRecognitionException } from \"../../exceptions_public\"\nimport { DEFAULT_RULE_CONFIG, ParserDefinitionErrorType } from \"../parser\"\nimport { defaultGrammarValidatorErrorProvider } from \"../../errors_public\"\nimport { validateRuleIsOverridden } from \"../../grammar/checks\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { Rule, serializeGrammar } from \"@chevrotain/gast\"\nimport { IParserDefinitionError } from \"../../grammar/types\"\nimport { ParserMethodInternal } from \"../types\"\n\n/**\n * This trait is responsible for implementing the public API\n * for defining Chevrotain parsers, i.e:\n * - CONSUME\n * - RULE\n * - OPTION\n * - ...\n */\nexport class RecognizerApi {\n ACTION<T>(this: MixedInParser, impl: () => T): T {\n return impl.call(this)\n }\n\n consume(\n this: MixedInParser,\n idx: number,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, idx, options)\n }\n\n subrule<ARGS extends unknown[], R>(\n this: MixedInParser,\n idx: number,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, idx, options)\n }\n\n option<OUT>(\n this: MixedInParser,\n idx: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, idx)\n }\n\n or(\n this: MixedInParser,\n idx: number,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<any>\n ): any {\n return this.orInternal(altsOrOpts, idx)\n }\n\n many(\n this: MixedInParser,\n idx: number,\n actionORMethodDef: GrammarAction<any> | DSLMethodOpts<any>\n ): void {\n return this.manyInternal(idx, actionORMethodDef)\n }\n\n atLeastOne(\n this: MixedInParser,\n idx: number,\n actionORMethodDef: GrammarAction<any> | DSLMethodOptsWithErr<any>\n ): void {\n return this.atLeastOneInternal(idx, actionORMethodDef)\n }\n\n CONSUME(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 0, options)\n }\n\n CONSUME1(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 1, options)\n }\n\n CONSUME2(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 2, options)\n }\n\n CONSUME3(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 3, options)\n }\n\n CONSUME4(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 4, options)\n }\n\n CONSUME5(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 5, options)\n }\n\n CONSUME6(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 6, options)\n }\n\n CONSUME7(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 7, options)\n }\n\n CONSUME8(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 8, options)\n }\n\n CONSUME9(\n this: MixedInParser,\n tokType: TokenType,\n options?: ConsumeMethodOpts\n ): IToken {\n return this.consumeInternal(tokType, 9, options)\n }\n\n SUBRULE<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 0, options)\n }\n\n SUBRULE1<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 1, options)\n }\n\n SUBRULE2<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 2, options)\n }\n\n SUBRULE3<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 3, options)\n }\n\n SUBRULE4<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 4, options)\n }\n\n SUBRULE5<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 5, options)\n }\n\n SUBRULE6<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 6, options)\n }\n\n SUBRULE7<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 7, options)\n }\n\n SUBRULE8<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 8, options)\n }\n\n SUBRULE9<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n return this.subruleInternal(ruleToCall, 9, options)\n }\n\n OPTION<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 0)\n }\n\n OPTION1<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 1)\n }\n\n OPTION2<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 2)\n }\n\n OPTION3<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 3)\n }\n\n OPTION4<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 4)\n }\n\n OPTION5<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 5)\n }\n\n OPTION6<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 6)\n }\n\n OPTION7<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 7)\n }\n\n OPTION8<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 8)\n }\n\n OPTION9<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): OUT | undefined {\n return this.optionInternal(actionORMethodDef, 9)\n }\n\n OR<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 0)\n }\n\n OR1<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 1)\n }\n\n OR2<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 2)\n }\n\n OR3<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 3)\n }\n\n OR4<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 4)\n }\n\n OR5<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 5)\n }\n\n OR6<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 6)\n }\n\n OR7<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 7)\n }\n\n OR8<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 8)\n }\n\n OR9<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>\n ): T {\n return this.orInternal(altsOrOpts, 9)\n }\n\n MANY<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(0, actionORMethodDef)\n }\n\n MANY1<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(1, actionORMethodDef)\n }\n\n MANY2<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(2, actionORMethodDef)\n }\n\n MANY3<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(3, actionORMethodDef)\n }\n\n MANY4<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(4, actionORMethodDef)\n }\n\n MANY5<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(5, actionORMethodDef)\n }\n\n MANY6<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(6, actionORMethodDef)\n }\n\n MANY7<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(7, actionORMethodDef)\n }\n\n MANY8<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(8, actionORMethodDef)\n }\n\n MANY9<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n this.manyInternal(9, actionORMethodDef)\n }\n\n MANY_SEP<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(0, options)\n }\n\n MANY_SEP1<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(1, options)\n }\n\n MANY_SEP2<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(2, options)\n }\n\n MANY_SEP3<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(3, options)\n }\n\n MANY_SEP4<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(4, options)\n }\n\n MANY_SEP5<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(5, options)\n }\n\n MANY_SEP6<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(6, options)\n }\n\n MANY_SEP7<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(7, options)\n }\n\n MANY_SEP8<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(8, options)\n }\n\n MANY_SEP9<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n this.manySepFirstInternal(9, options)\n }\n\n AT_LEAST_ONE<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(0, actionORMethodDef)\n }\n\n AT_LEAST_ONE1<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n return this.atLeastOneInternal(1, actionORMethodDef)\n }\n\n AT_LEAST_ONE2<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(2, actionORMethodDef)\n }\n\n AT_LEAST_ONE3<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(3, actionORMethodDef)\n }\n\n AT_LEAST_ONE4<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(4, actionORMethodDef)\n }\n\n AT_LEAST_ONE5<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(5, actionORMethodDef)\n }\n\n AT_LEAST_ONE6<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(6, actionORMethodDef)\n }\n\n AT_LEAST_ONE7<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(7, actionORMethodDef)\n }\n\n AT_LEAST_ONE8<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(8, actionORMethodDef)\n }\n\n AT_LEAST_ONE9<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n this.atLeastOneInternal(9, actionORMethodDef)\n }\n\n AT_LEAST_ONE_SEP<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(0, options)\n }\n\n AT_LEAST_ONE_SEP1<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(1, options)\n }\n\n AT_LEAST_ONE_SEP2<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(2, options)\n }\n\n AT_LEAST_ONE_SEP3<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(3, options)\n }\n\n AT_LEAST_ONE_SEP4<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(4, options)\n }\n\n AT_LEAST_ONE_SEP5<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(5, options)\n }\n\n AT_LEAST_ONE_SEP6<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(6, options)\n }\n\n AT_LEAST_ONE_SEP7<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(7, options)\n }\n\n AT_LEAST_ONE_SEP8<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(8, options)\n }\n\n AT_LEAST_ONE_SEP9<OUT>(\n this: MixedInParser,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n this.atLeastOneSepFirstInternal(9, options)\n }\n\n RULE<T>(\n this: MixedInParser,\n name: string,\n implementation: (...implArgs: any[]) => T,\n config: IRuleConfig<T> = DEFAULT_RULE_CONFIG\n ): (idxInCallingRule?: number, ...args: any[]) => T | any {\n if (includes(this.definedRulesNames, name)) {\n const errMsg =\n defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n topLevelRule: name,\n grammarName: this.className\n })\n\n const error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name\n }\n this.definitionErrors.push(error)\n }\n\n this.definedRulesNames.push(name)\n\n const ruleImplementation = this.defineRule(name, implementation, config)\n ;(this as any)[name] = ruleImplementation\n return ruleImplementation\n }\n\n OVERRIDE_RULE<T>(\n this: MixedInParser,\n name: string,\n impl: (...implArgs: any[]) => T,\n config: IRuleConfig<T> = DEFAULT_RULE_CONFIG\n ): (idxInCallingRule?: number, ...args: any[]) => T {\n const ruleErrors: IParserDefinitionError[] = validateRuleIsOverridden(\n name,\n this.definedRulesNames,\n this.className\n )\n this.definitionErrors = this.definitionErrors.concat(ruleErrors)\n\n const ruleImplementation = this.defineRule(name, impl, config)\n ;(this as any)[name] = ruleImplementation\n return ruleImplementation\n }\n\n BACKTRACK<T>(\n this: MixedInParser,\n grammarRule: (...args: any[]) => T,\n args?: any[]\n ): () => boolean {\n return function () {\n // save org state\n this.isBackTrackingStack.push(1)\n const orgState = this.saveRecogState()\n try {\n grammarRule.apply(this, args)\n // if no exception was thrown we have succeed parsing the rule.\n return true\n } catch (e) {\n if (isRecognitionException(e)) {\n return false\n } else {\n throw e\n }\n } finally {\n this.reloadRecogState(orgState)\n this.isBackTrackingStack.pop()\n }\n }\n }\n\n // GAST export APIs\n public getGAstProductions(this: MixedInParser): Record<string, Rule> {\n return this.gastProductionsCache\n }\n\n public getSerializedGastProductions(this: MixedInParser): ISerializedGast[] {\n return serializeGrammar(values(this.gastProductionsCache))\n }\n}\n", "import {\n AtLeastOneSepMethodOpts,\n ConsumeMethodOpts,\n DSLMethodOpts,\n DSLMethodOptsWithErr,\n GrammarAction,\n IOrAlt,\n IParserConfig,\n IRuleConfig,\n IToken,\n ManySepMethodOpts,\n OrMethodOpts,\n ParserMethod,\n SubruleMethodOpts,\n TokenType,\n TokenTypeDictionary,\n TokenVocabulary\n} from \"@chevrotain/types\"\nimport isEmpty from \"lodash/isEmpty\"\nimport isArray from \"lodash/isArray\"\nimport flatten from \"lodash/flatten\"\nimport every from \"lodash/every\"\nimport uniq from \"lodash/uniq\"\nimport isObject from \"lodash/isObject\"\nimport has from \"lodash/has\"\nimport values from \"lodash/values\"\nimport reduce from \"lodash/reduce\"\nimport clone from \"lodash/clone\"\nimport {\n AT_LEAST_ONE_IDX,\n AT_LEAST_ONE_SEP_IDX,\n BITS_FOR_METHOD_TYPE,\n BITS_FOR_OCCURRENCE_IDX,\n MANY_IDX,\n MANY_SEP_IDX,\n OPTION_IDX,\n OR_IDX\n} from \"../../grammar/keys\"\nimport {\n isRecognitionException,\n MismatchedTokenException,\n NotAllInputParsedException\n} from \"../../exceptions_public\"\nimport { PROD_TYPE } from \"../../grammar/lookahead\"\nimport {\n AbstractNextTerminalAfterProductionWalker,\n NextTerminalAfterAtLeastOneSepWalker,\n NextTerminalAfterAtLeastOneWalker,\n NextTerminalAfterManySepWalker,\n NextTerminalAfterManyWalker\n} from \"../../grammar/interpreter\"\nimport { DEFAULT_RULE_CONFIG, IParserState, TokenMatcher } from \"../parser\"\nimport { IN_RULE_RECOVERY_EXCEPTION } from \"./recoverable\"\nimport { EOF } from \"../../../scan/tokens_public\"\nimport { MixedInParser } from \"./parser_traits\"\nimport {\n augmentTokenTypes,\n isTokenType,\n tokenStructuredMatcher,\n tokenStructuredMatcherNoCategories\n} from \"../../../scan/tokens\"\nimport { Rule } from \"@chevrotain/gast\"\nimport { ParserMethodInternal } from \"../types\"\n\n/**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\nexport class RecognizerEngine {\n isBackTrackingStack: boolean[]\n className: string\n RULE_STACK: number[]\n RULE_OCCURRENCE_STACK: number[]\n definedRulesNames: string[]\n tokensMap: { [fqn: string]: TokenType }\n gastProductionsCache: Record<string, Rule>\n shortRuleNameToFull: Record<string, string>\n fullRuleNameToShort: Record<string, number>\n // The shortName Index must be coded \"after\" the first 8bits to enable building unique lookahead keys\n ruleShortNameIdx: number\n tokenMatcher: TokenMatcher\n subruleIdx: number\n\n initRecognizerEngine(\n tokenVocabulary: TokenVocabulary,\n config: IParserConfig\n ) {\n this.className = this.constructor.name\n // TODO: would using an ES6 Map or plain object be faster (CST building scenario)\n this.shortRuleNameToFull = {}\n this.fullRuleNameToShort = {}\n this.ruleShortNameIdx = 256\n this.tokenMatcher = tokenStructuredMatcherNoCategories\n this.subruleIdx = 0\n\n this.definedRulesNames = []\n this.tokensMap = {}\n this.isBackTrackingStack = []\n this.RULE_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n this.gastProductionsCache = {}\n\n if (has(config, \"serializedGrammar\")) {\n throw Error(\n \"The Parser's configuration can no longer contain a <serializedGrammar> property.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n\" +\n \"\\tFor Further details.\"\n )\n }\n\n if (isArray(tokenVocabulary)) {\n // This only checks for Token vocabularies provided as arrays.\n // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n // rather than all edge cases of empty Token vocabularies.\n if (isEmpty(tokenVocabulary as any[])) {\n throw Error(\n \"A Token Vocabulary cannot be empty.\\n\" +\n \"\\tNote that the first argument for the parser constructor\\n\" +\n \"\\tis no longer a Token vector (since v4.0).\"\n )\n }\n\n if (typeof (tokenVocabulary as any[])[0].startOffset === \"number\") {\n throw Error(\n \"The Parser constructor no longer accepts a token vector as the first argument.\\n\" +\n \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n\" +\n \"\\tFor Further details.\"\n )\n }\n }\n\n if (isArray(tokenVocabulary)) {\n this.tokensMap = reduce(\n tokenVocabulary,\n (acc, tokType: TokenType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {} as { [tokenName: string]: TokenType }\n )\n } else if (\n has(tokenVocabulary, \"modes\") &&\n every(flatten(values((<any>tokenVocabulary).modes)), isTokenType)\n ) {\n const allTokenTypes = flatten(values((<any>tokenVocabulary).modes))\n const uniqueTokens = uniq(allTokenTypes)\n this.tokensMap = <any>reduce(\n uniqueTokens,\n (acc, tokType: TokenType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {} as { [tokenName: string]: TokenType }\n )\n } else if (isObject(tokenVocabulary)) {\n this.tokensMap = clone(tokenVocabulary as TokenTypeDictionary)\n } else {\n throw new Error(\n \"<tokensDictionary> argument must be An Array of Token constructors,\" +\n \" A dictionary of Token constructors or an IMultiModeLexerDefinition\"\n )\n }\n\n // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n // parsed with a clear error message (\"expecting EOF but found ...\")\n this.tokensMap[\"EOF\"] = EOF\n\n const allTokenTypes = has(tokenVocabulary, \"modes\")\n ? flatten(values((<any>tokenVocabulary).modes))\n : values(tokenVocabulary)\n const noTokenCategoriesUsed = every(allTokenTypes, (tokenConstructor) =>\n isEmpty(tokenConstructor.categoryMatches)\n )\n\n this.tokenMatcher = noTokenCategoriesUsed\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n\n // Because ES2015+ syntax should be supported for creating Token classes\n // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n augmentTokenTypes(values(this.tokensMap))\n }\n\n defineRule<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleName: string,\n impl: (...args: ARGS) => R,\n config: IRuleConfig<R>\n ): ParserMethodInternal<ARGS, R> {\n if (this.selfAnalysisDone) {\n throw Error(\n `Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'\\n` +\n `Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`\n )\n }\n const resyncEnabled: boolean = has(config, \"resyncEnabled\")\n ? (config.resyncEnabled as boolean) // assumes end user provides the correct config value/type\n : DEFAULT_RULE_CONFIG.resyncEnabled\n const recoveryValueFunc = has(config, \"recoveryValueFunc\")\n ? (config.recoveryValueFunc as () => R) // assumes end user provides the correct config value/type\n : DEFAULT_RULE_CONFIG.recoveryValueFunc\n\n // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n const shortName =\n this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX)\n\n this.ruleShortNameIdx++\n this.shortRuleNameToFull[shortName] = ruleName\n this.fullRuleNameToShort[ruleName] = shortName\n\n let invokeRuleWithTry: ParserMethod<ARGS, R>\n\n // Micro optimization, only check the condition **once** on rule definition\n // instead of **every single** rule invocation.\n if (this.outputCst === true) {\n invokeRuleWithTry = function invokeRuleWithTry(\n this: MixedInParser,\n ...args: ARGS\n ): R {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx)\n impl.apply(this, args)\n const cst = this.CST_STACK[this.CST_STACK.length - 1]\n this.cstPostRule(cst)\n return cst as unknown as R\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc) as R\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n } else {\n invokeRuleWithTry = function invokeRuleWithTryCst(\n this: MixedInParser,\n ...args: ARGS\n ): R {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx)\n return impl.apply(this, args)\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc) as R\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n }\n\n const wrappedGrammarRule: ParserMethodInternal<ARGS, R> = Object.assign(\n invokeRuleWithTry as any,\n { ruleName, originalGrammarAction: impl }\n )\n\n return wrappedGrammarRule\n }\n\n invokeRuleCatch(\n this: MixedInParser,\n e: Error,\n resyncEnabledConfig: boolean,\n recoveryValueFunc: Function\n ): unknown {\n const isFirstInvokedRule = this.RULE_STACK.length === 1\n // note the reSync is always enabled for the first rule invocation, because we must always be able to\n // reSync with EOF and just output some INVALID ParseTree\n // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking\n // path is really the most valid one\n const reSyncEnabled =\n resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled\n\n if (isRecognitionException(e)) {\n const recogError: any = e\n if (reSyncEnabled) {\n const reSyncTokType = this.findReSyncTokenType()\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType)\n if (this.outputCst) {\n const partialCstResult: any =\n this.CST_STACK[this.CST_STACK.length - 1]\n partialCstResult.recoveredNode = true\n return partialCstResult\n } else {\n return recoveryValueFunc(e)\n }\n } else {\n if (this.outputCst) {\n const partialCstResult: any =\n this.CST_STACK[this.CST_STACK.length - 1]\n partialCstResult.recoveredNode = true\n recogError.partialCstResult = partialCstResult\n }\n // to be handled Further up the call stack\n throw recogError\n }\n } else if (isFirstInvokedRule) {\n // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n this.moveToTerminatedState()\n // the parser should never throw one of its own errors outside its flow.\n // even if error recovery is disabled\n return recoveryValueFunc(e)\n } else {\n // to be recovered Further up the call stack\n throw recogError\n }\n } else {\n // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n throw e\n }\n }\n\n // Implementation of parsing DSL\n optionInternal<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n occurrence: number\n ): OUT | undefined {\n const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence)\n return this.optionInternalLogic(actionORMethodDef, occurrence, key)\n }\n\n optionInternalLogic<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n occurrence: number,\n key: number\n ): OUT | undefined {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action: GrammarAction<OUT>\n if (typeof actionORMethodDef !== \"function\") {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n\n if (lookAheadFunc.call(this) === true) {\n return action.call(this)\n }\n return undefined\n }\n\n atLeastOneInternal<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n const laKey = this.getKeyForAutomaticLookahead(\n AT_LEAST_ONE_IDX,\n prodOccurrence\n )\n return this.atLeastOneInternalLogic(\n prodOccurrence,\n actionORMethodDef,\n laKey\n )\n }\n\n atLeastOneInternalLogic<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n key: number\n ): void {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== \"function\") {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n\n if ((<Function>lookAheadFunc).call(this) === true) {\n let notStuck = this.doSingleRepetition(action)\n while (\n (<Function>lookAheadFunc).call(this) === true &&\n notStuck === true\n ) {\n notStuck = this.doSingleRepetition(action)\n }\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY,\n (<DSLMethodOptsWithErr<OUT>>actionORMethodDef).ERR_MSG\n )\n }\n\n // note that while it may seem that this can cause an error because by using a recursive call to\n // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.atLeastOneInternal,\n [prodOccurrence, actionORMethodDef],\n <any>lookAheadFunc,\n AT_LEAST_ONE_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneWalker\n )\n }\n\n atLeastOneSepFirstInternal<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n const laKey = this.getKeyForAutomaticLookahead(\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence\n )\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n\n atLeastOneSepFirstInternalLogic<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n options: AtLeastOneSepMethodOpts<OUT>,\n key: number\n ): void {\n const action = options.DEF\n const separator = options.SEP\n\n const firstIterationLookaheadFunc = this.getLaFuncFromCache(key)\n\n // 1st iteration\n if (firstIterationLookaheadFunc.call(this) === true) {\n ;(<GrammarAction<OUT>>action).call(this)\n\n // TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n // because it is only needed in error recovery scenarios.\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n ;(<GrammarAction<OUT>>action).call(this)\n }\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterAtLeastOneSepWalker\n ],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneSepWalker\n )\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n options.ERR_MSG\n )\n }\n }\n\n manyInternal<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence)\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey)\n }\n\n manyInternalLogic<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n key: number\n ) {\n let lookaheadFunction = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== \"function\") {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookaheadFunction\n lookaheadFunction = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n\n let notStuck = true\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action)\n }\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.manyInternal,\n [prodOccurrence, actionORMethodDef],\n <any>lookaheadFunction,\n MANY_IDX,\n prodOccurrence,\n NextTerminalAfterManyWalker,\n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck\n )\n }\n\n manySepFirstInternal<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n options: ManySepMethodOpts<OUT>\n ): void {\n const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence)\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n\n manySepFirstInternalLogic<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n options: ManySepMethodOpts<OUT>,\n key: number\n ): void {\n const action = options.DEF\n const separator = options.SEP\n const firstIterationLaFunc = this.getLaFuncFromCache(key)\n\n // 1st iteration\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this)\n\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this)\n }\n\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterManySepWalker\n ],\n separatorLookAheadFunc,\n MANY_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterManySepWalker\n )\n }\n }\n\n repetitionSepSecondInternal<OUT>(\n this: MixedInParser,\n prodOccurrence: number,\n separator: TokenType,\n separatorLookAheadFunc: () => boolean,\n action: GrammarAction<OUT>,\n nextTerminalAfterWalker: typeof AbstractNextTerminalAfterProductionWalker\n ): void {\n while (separatorLookAheadFunc()) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n action.call(this)\n }\n\n // we can only arrive to this function after an error\n // has occurred (hence the name 'second') so the following\n // IF will always be entered, its possible to remove it...\n // however it is kept to avoid confusion and be consistent.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n /* istanbul ignore else */\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n nextTerminalAfterWalker\n ],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n nextTerminalAfterWalker\n )\n }\n\n doSingleRepetition(this: MixedInParser, action: Function): any {\n const beforeIteration = this.getLexerPosition()\n action.call(this)\n const afterIteration = this.getLexerPosition()\n\n // This boolean will indicate if this repetition progressed\n // or if we are \"stuck\" (potential infinite loop in the repetition).\n return afterIteration > beforeIteration\n }\n\n orInternal<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n occurrence: number\n ): T {\n const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence)\n const alts = isArray(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF\n\n const laFunc = this.getLaFuncFromCache(laKey)\n const altIdxToTake = laFunc.call(this, alts)\n if (altIdxToTake !== undefined) {\n const chosenAlternative: any = alts[altIdxToTake]\n return chosenAlternative.ALT.call(this)\n }\n this.raiseNoAltException(\n occurrence,\n (altsOrOpts as OrMethodOpts<unknown>).ERR_MSG\n )\n }\n\n ruleFinallyStateUpdate(this: MixedInParser): void {\n this.RULE_STACK.pop()\n this.RULE_OCCURRENCE_STACK.pop()\n\n // NOOP when cst is disabled\n this.cstFinallyStateUpdate()\n\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n const firstRedundantTok = this.LA(1)\n const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName()\n })\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok))\n }\n }\n\n subruleInternal<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n idx: number,\n options?: SubruleMethodOpts<ARGS>\n ): R {\n let ruleResult\n try {\n const args = options !== undefined ? options.ARGS : undefined\n this.subruleIdx = idx\n ruleResult = ruleToCall.apply(this, args)\n this.cstPostNonTerminal(\n ruleResult,\n options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleToCall.ruleName\n )\n return ruleResult\n } catch (e) {\n throw this.subruleInternalError(e, options, ruleToCall.ruleName)\n }\n }\n\n subruleInternalError(\n this: MixedInParser,\n e: any,\n options: SubruleMethodOpts<unknown[]> | undefined,\n ruleName: string\n ): void {\n if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n this.cstPostNonTerminal(\n e.partialCstResult,\n options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleName\n )\n\n delete e.partialCstResult\n }\n throw e\n }\n\n consumeInternal(\n this: MixedInParser,\n tokType: TokenType,\n idx: number,\n options: ConsumeMethodOpts | undefined\n ): IToken {\n let consumedToken!: IToken\n try {\n const nextToken = this.LA(1)\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken()\n consumedToken = nextToken\n } else {\n this.consumeInternalError(tokType, nextToken, options)\n }\n } catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(\n tokType,\n idx,\n eFromConsumption\n )\n }\n\n this.cstPostTerminal(\n options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : tokType.name,\n consumedToken\n )\n return consumedToken\n }\n\n consumeInternalError(\n this: MixedInParser,\n tokType: TokenType,\n nextToken: IToken,\n options: ConsumeMethodOpts | undefined\n ): void {\n let msg\n const previousToken = this.LA(0)\n if (options !== undefined && options.ERR_MSG) {\n msg = options.ERR_MSG\n } else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n })\n }\n throw this.SAVE_ERROR(\n new MismatchedTokenException(msg, nextToken, previousToken)\n )\n }\n\n consumeInternalRecovery(\n this: MixedInParser,\n tokType: TokenType,\n idx: number,\n eFromConsumption: Error\n ): IToken {\n // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n // but the original syntax could have been parsed successfully without any backtracking + recovery\n if (\n this.recoveryEnabled &&\n // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === \"MismatchedTokenException\" &&\n !this.isBackTracking()\n ) {\n const follows = this.getFollowsForInRuleRecovery(<any>tokType, idx)\n try {\n return this.tryInRuleRecovery(<any>tokType, follows)\n } catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n // failed in RuleRecovery.\n // throw the original error in order to trigger reSync error recovery\n throw eFromConsumption\n } else {\n throw eFromInRuleRecovery\n }\n }\n } else {\n throw eFromConsumption\n }\n }\n\n saveRecogState(this: MixedInParser): IParserState {\n // errors is a getter which will clone the errors array\n const savedErrors = this.errors\n const savedRuleStack = clone(this.RULE_STACK)\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK\n }\n }\n\n reloadRecogState(this: MixedInParser, newState: IParserState) {\n this.errors = newState.errors\n this.importLexerState(newState.lexerState)\n this.RULE_STACK = newState.RULE_STACK\n }\n\n ruleInvocationStateUpdate(\n this: MixedInParser,\n shortName: number,\n fullName: string,\n idxInCallingRule: number\n ): void {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule)\n this.RULE_STACK.push(shortName)\n // NOOP when cst is disabled\n this.cstInvocationStateUpdate(fullName)\n }\n\n isBackTracking(this: MixedInParser): boolean {\n return this.isBackTrackingStack.length !== 0\n }\n\n getCurrRuleFullName(this: MixedInParser): string {\n const shortName = this.getLastExplicitRuleShortName()\n return this.shortRuleNameToFull[shortName]\n }\n\n shortRuleNameToFullName(this: MixedInParser, shortName: number) {\n return this.shortRuleNameToFull[shortName]\n }\n\n public isAtEndOfInput(this: MixedInParser): boolean {\n return this.tokenMatcher(this.LA(1), EOF)\n }\n\n public reset(this: MixedInParser): void {\n this.resetLexerState()\n this.subruleIdx = 0\n this.isBackTrackingStack = []\n this.errors = []\n this.RULE_STACK = []\n // TODO: extract a specific reset for TreeBuilder trait\n this.CST_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n }\n}\n", "import {\n IParserConfig,\n IParserErrorMessageProvider,\n IRecognitionException\n} from \"@chevrotain/types\"\nimport {\n EarlyExitException,\n isRecognitionException,\n NoViableAltException\n} from \"../../exceptions_public\"\nimport has from \"lodash/has\"\nimport clone from \"lodash/clone\"\nimport {\n getLookaheadPathsForOptionalProd,\n getLookaheadPathsForOr,\n PROD_TYPE\n} from \"../../grammar/lookahead\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class ErrorHandler {\n _errors: IRecognitionException[]\n errorMessageProvider: IParserErrorMessageProvider\n\n initErrorHandler(config: IParserConfig) {\n this._errors = []\n this.errorMessageProvider = has(config, \"errorMessageProvider\")\n ? (config.errorMessageProvider as IParserErrorMessageProvider) // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.errorMessageProvider\n }\n\n SAVE_ERROR(\n this: MixedInParser,\n error: IRecognitionException\n ): IRecognitionException {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: clone(this.RULE_OCCURRENCE_STACK)\n }\n this._errors.push(error)\n return error\n } else {\n throw Error(\"Trying to save an Error which is not a RecognitionException\")\n }\n }\n\n get errors(): IRecognitionException[] {\n return clone(this._errors)\n }\n\n set errors(newErrors: IRecognitionException[]) {\n this._errors = newErrors\n }\n\n // TODO: consider caching the error message computed information\n raiseEarlyExitException(\n this: MixedInParser,\n occurrence: number,\n prodType: PROD_TYPE,\n userDefinedErrMsg: string | undefined\n ): never {\n const ruleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[ruleName]\n const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n this.maxLookahead\n )\n const insideProdPaths = lookAheadPathsPerAlternative[0]\n const actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n const msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName: ruleName\n })\n\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)))\n }\n\n // TODO: consider caching the error message computed information\n raiseNoAltException(\n this: MixedInParser,\n occurrence: number,\n errMsgTypes: string | undefined\n ): never {\n const ruleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[ruleName]\n // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n const lookAheadPathsPerAlternative = getLookaheadPathsForOr(\n occurrence,\n ruleGrammar,\n this.maxLookahead\n )\n\n const actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n const previousToken = this.LA(0)\n\n const errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName()\n })\n\n throw this.SAVE_ERROR(\n new NoViableAltException(errMsg, this.LA(1), previousToken)\n )\n }\n}\n", "import {\n ISyntacticContentAssistPath,\n IToken,\n ITokenGrammarPath,\n TokenType\n} from \"@chevrotain/types\"\nimport {\n NextAfterTokenWalker,\n nextPossibleTokensAfter\n} from \"../../grammar/interpreter\"\nimport first from \"lodash/first\"\nimport isUndefined from \"lodash/isUndefined\"\nimport { MixedInParser } from \"./parser_traits\"\n\nexport class ContentAssist {\n initContentAssist() {}\n\n public computeContentAssist(\n this: MixedInParser,\n startRuleName: string,\n precedingInput: IToken[]\n ): ISyntacticContentAssistPath[] {\n const startRuleGast = this.gastProductionsCache[startRuleName]\n\n if (isUndefined(startRuleGast)) {\n throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`)\n }\n\n return nextPossibleTokensAfter(\n [startRuleGast],\n precedingInput,\n this.tokenMatcher,\n this.maxLookahead\n )\n }\n\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n public getNextPossibleTokenTypes(\n this: MixedInParser,\n grammarPath: ITokenGrammarPath\n ): TokenType[] {\n const topRuleName = first(grammarPath.ruleStack)!\n const gastProductions = this.getGAstProductions()\n const topProduction = gastProductions[topRuleName]\n const nextPossibleTokenTypes = new NextAfterTokenWalker(\n topProduction,\n grammarPath\n ).startWalking()\n return nextPossibleTokenTypes\n }\n}\n", "import {\n AtLeastOneSepMethodOpts,\n ConsumeMethodOpts,\n CstNode,\n DSLMethodOpts,\n DSLMethodOptsWithErr,\n GrammarAction,\n IOrAlt,\n IParserConfig,\n IProduction,\n IToken,\n ManySepMethodOpts,\n OrMethodOpts,\n SubruleMethodOpts,\n TokenType\n} from \"@chevrotain/types\"\nimport peek from \"lodash/last\"\nimport isArray from \"lodash/isArray\"\nimport some from \"lodash/some\"\nimport forEach from \"lodash/forEach\"\nimport isFunction from \"lodash/isFunction\"\nimport has from \"lodash/has\"\nimport { MixedInParser } from \"./parser_traits\"\nimport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"@chevrotain/gast\"\nimport { Lexer } from \"../../../scan/lexer_public\"\nimport { augmentTokenTypes, hasShortKeyProperty } from \"../../../scan/tokens\"\nimport { createToken, createTokenInstance } from \"../../../scan/tokens_public\"\nimport { END_OF_FILE } from \"../parser\"\nimport { BITS_FOR_OCCURRENCE_IDX } from \"../../grammar/keys\"\nimport { ParserMethodInternal } from \"../types\"\n\ntype ProdWithDef = IProduction & { definition?: IProduction[] }\nconst RECORDING_NULL_OBJECT = {\n description: \"This Object indicates the Parser is during Recording Phase\"\n}\nObject.freeze(RECORDING_NULL_OBJECT)\n\nconst HANDLE_SEPARATOR = true\nconst MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1\n\nconst RFT = createToken({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer.NA })\naugmentTokenTypes([RFT])\nconst RECORDING_PHASE_TOKEN = createTokenInstance(\n RFT,\n \"This IToken indicates the Parser is in Recording Phase\\n\\t\" +\n \"\" +\n \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n // Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n -1,\n -1,\n -1,\n -1,\n -1,\n -1\n)\nObject.freeze(RECORDING_PHASE_TOKEN)\n\nconst RECORDING_PHASE_CSTNODE: CstNode = {\n name:\n \"This CSTNode indicates the Parser is in Recording Phase\\n\\t\" +\n \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n children: {}\n}\n\n/**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\nexport class GastRecorder {\n recordingProdStack: ProdWithDef[]\n RECORDING_PHASE: boolean\n\n initGastRecorder(this: MixedInParser, config: IParserConfig): void {\n this.recordingProdStack = []\n this.RECORDING_PHASE = false\n }\n\n enableRecording(this: MixedInParser): void {\n this.RECORDING_PHASE = true\n\n this.TRACE_INIT(\"Enable Recording\", () => {\n /**\n * Warning Dark Voodoo Magic upcoming!\n * We are \"replacing\" the public parsing DSL methods API\n * With **new** alternative implementations on the Parser **instance**\n *\n * So far this is the only way I've found to avoid performance regressions during parsing time.\n * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the \"internal\"\n * implementations directly instead.\n */\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : \"\"\n this[`CONSUME${idx}` as \"CONSUME\"] = function (arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2)\n }\n this[`SUBRULE${idx}` as \"SUBRULE\"] = function (arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2) as any\n }\n this[`OPTION${idx}` as \"OPTION\"] = function (arg1) {\n return this.optionInternalRecord(arg1, i)\n }\n this[`OR${idx}` as \"OR\"] = function (arg1) {\n return this.orInternalRecord(arg1, i)\n }\n this[`MANY${idx}` as \"MANY\"] = function (arg1) {\n this.manyInternalRecord(i, arg1)\n }\n this[`MANY_SEP${idx}` as \"MANY_SEP\"] = function (arg1) {\n this.manySepFirstInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE${idx}` as \"AT_LEAST_ONE\"] = function (arg1) {\n this.atLeastOneInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE_SEP${idx}` as \"AT_LEAST_ONE_SEP\"] = function (arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1)\n }\n }\n\n // DSL methods with the idx(suffix) as an argument\n this[`consume`] = function (idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2)\n }\n this[`subrule`] = function (idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2) as any\n }\n this[`option`] = function (idx, arg1) {\n return this.optionInternalRecord(arg1, idx)\n }\n this[`or`] = function (idx, arg1) {\n return this.orInternalRecord(arg1, idx)\n }\n this[`many`] = function (idx, arg1) {\n this.manyInternalRecord(idx, arg1)\n }\n this[`atLeastOne`] = function (idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1)\n }\n\n this.ACTION = this.ACTION_RECORD\n this.BACKTRACK = this.BACKTRACK_RECORD\n this.LA = this.LA_RECORD\n })\n }\n\n disableRecording(this: MixedInParser) {\n this.RECORDING_PHASE = false\n // By deleting these **instance** properties, any future invocation\n // will be deferred to the original methods on the **prototype** object\n // This seems to get rid of any incorrect optimizations that V8 may\n // do during the recording phase.\n this.TRACE_INIT(\"Deleting Recording methods\", () => {\n const that: any = this\n\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : \"\"\n delete that[`CONSUME${idx}`]\n delete that[`SUBRULE${idx}`]\n delete that[`OPTION${idx}`]\n delete that[`OR${idx}`]\n delete that[`MANY${idx}`]\n delete that[`MANY_SEP${idx}`]\n delete that[`AT_LEAST_ONE${idx}`]\n delete that[`AT_LEAST_ONE_SEP${idx}`]\n }\n\n delete that[`consume`]\n delete that[`subrule`]\n delete that[`option`]\n delete that[`or`]\n delete that[`many`]\n delete that[`atLeastOne`]\n\n delete that.ACTION\n delete that.BACKTRACK\n delete that.LA\n })\n }\n\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n // @ts-expect-error -- noop place holder\n ACTION_RECORD<T>(this: MixedInParser, impl: () => T): T {\n // NO-OP during recording\n }\n\n // Executing backtracking logic will break our recording logic assumptions\n BACKTRACK_RECORD<T>(\n grammarRule: (...args: any[]) => T,\n args?: any[]\n ): () => boolean {\n return () => true\n }\n\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n LA_RECORD(howMuch: number): IToken {\n // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n // On LA return EOF at the end of the input so an infinite loop may occur.\n return END_OF_FILE\n }\n\n topLevelRuleRecord(name: string, def: Function): Rule {\n try {\n const newTopLevelRule = new Rule({ definition: [], name: name })\n newTopLevelRule.name = name\n this.recordingProdStack.push(newTopLevelRule)\n def.call(this)\n this.recordingProdStack.pop()\n return newTopLevelRule\n } catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message =\n originalError.message +\n '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n \"https://chevrotain.io/docs/guide/internals.html#grammar-recording\"\n } catch (mutabilityError) {\n // We may not be able to modify the original error object\n throw originalError\n }\n }\n throw originalError\n }\n }\n\n // Implementation of parsing DSL\n optionInternalRecord<OUT>(\n this: MixedInParser,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n occurrence: number\n ): OUT {\n return recordProd.call(this, Option, actionORMethodDef, occurrence)\n }\n\n atLeastOneInternalRecord<OUT>(\n this: MixedInParser,\n occurrence: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>\n ): void {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence)\n }\n\n atLeastOneSepFirstInternalRecord<OUT>(\n this: MixedInParser,\n occurrence: number,\n options: AtLeastOneSepMethodOpts<OUT>\n ): void {\n recordProd.call(\n this,\n RepetitionMandatoryWithSeparator,\n options,\n occurrence,\n HANDLE_SEPARATOR\n )\n }\n\n manyInternalRecord<OUT>(\n this: MixedInParser,\n occurrence: number,\n actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>\n ): void {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence)\n }\n\n manySepFirstInternalRecord<OUT>(\n this: MixedInParser,\n occurrence: number,\n options: ManySepMethodOpts<OUT>\n ): void {\n recordProd.call(\n this,\n RepetitionWithSeparator,\n options,\n occurrence,\n HANDLE_SEPARATOR\n )\n }\n\n orInternalRecord<T>(\n this: MixedInParser,\n altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n occurrence: number\n ): T {\n return recordOrProd.call(this, altsOrOpts, occurrence)\n }\n\n subruleInternalRecord<ARGS extends unknown[], R>(\n this: MixedInParser,\n ruleToCall: ParserMethodInternal<ARGS, R>,\n occurrence: number,\n options?: SubruleMethodOpts<ARGS>\n ): R | CstNode {\n assertMethodIdxIsValid(occurrence)\n if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n const error: any = new Error(\n `<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid` +\n ` expecting a Parser method reference but got: <${JSON.stringify(\n ruleToCall\n )}>` +\n `\\n inside top level rule: <${\n (<Rule>this.recordingProdStack[0]).name\n }>`\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n\n const prevProd: any = peek(this.recordingProdStack)\n const ruleName = ruleToCall.ruleName\n const newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n label: options?.LABEL,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: undefined\n })\n prevProd.definition.push(newNoneTerminal)\n\n return this.outputCst ? RECORDING_PHASE_CSTNODE : <any>RECORDING_NULL_OBJECT\n }\n\n consumeInternalRecord(\n this: MixedInParser,\n tokType: TokenType,\n occurrence: number,\n options?: ConsumeMethodOpts\n ): IToken {\n assertMethodIdxIsValid(occurrence)\n if (!hasShortKeyProperty(tokType)) {\n const error: any = new Error(\n `<CONSUME${getIdxSuffix(occurrence)}> argument is invalid` +\n ` expecting a TokenType reference but got: <${JSON.stringify(\n tokType\n )}>` +\n `\\n inside top level rule: <${\n (<Rule>this.recordingProdStack[0]).name\n }>`\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n const prevProd: any = peek(this.recordingProdStack)\n const newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType,\n label: options?.LABEL\n })\n prevProd.definition.push(newNoneTerminal)\n\n return RECORDING_PHASE_TOKEN\n }\n}\n\nfunction recordProd(\n prodConstructor: any,\n mainProdArg: any,\n occurrence: number,\n handleSep: boolean = false\n): any {\n assertMethodIdxIsValid(occurrence)\n const prevProd: any = peek(this.recordingProdStack)\n const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF\n\n const newProd = new prodConstructor({ definition: [], idx: occurrence })\n if (handleSep) {\n newProd.separator = mainProdArg.SEP\n }\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n\n this.recordingProdStack.push(newProd)\n grammarAction.call(this)\n prevProd.definition.push(newProd)\n this.recordingProdStack.pop()\n\n return RECORDING_NULL_OBJECT\n}\n\nfunction recordOrProd(mainProdArg: any, occurrence: number): any {\n assertMethodIdxIsValid(occurrence)\n const prevProd: any = peek(this.recordingProdStack)\n // Only an array of alternatives\n const hasOptions = isArray(mainProdArg) === false\n const alts: IOrAlt<unknown>[] =\n hasOptions === false ? mainProdArg : mainProdArg.DEF\n\n const newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true\n })\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n\n const hasPredicates = some(alts, (currAlt: any) => isFunction(currAlt.GATE))\n newOrProd.hasPredicates = hasPredicates\n\n prevProd.definition.push(newOrProd)\n\n forEach(alts, (currAlt) => {\n const currAltFlat = new Alternative({ definition: [] })\n newOrProd.definition.push(currAltFlat)\n if (has(currAlt, \"IGNORE_AMBIGUITIES\")) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES as boolean // assumes end user provides the correct config value/type\n }\n // **implicit** ignoreAmbiguities due to usage of gate\n else if (has(currAlt, \"GATE\")) {\n currAltFlat.ignoreAmbiguities = true\n }\n this.recordingProdStack.push(currAltFlat)\n currAlt.ALT.call(this)\n this.recordingProdStack.pop()\n })\n return RECORDING_NULL_OBJECT\n}\n\nfunction getIdxSuffix(idx: number): string {\n return idx === 0 ? \"\" : `${idx}`\n}\n\nfunction assertMethodIdxIsValid(idx: number): void {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n const error: any = new Error(\n // The stack trace will contain all the needed details\n `Invalid DSL Method idx value: <${idx}>\\n\\t` +\n `Idx value must be a none negative value smaller than ${\n MAX_METHOD_IDX + 1\n }`\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n}\n", "import { IParserConfig } from \"@chevrotain/types\"\nimport has from \"lodash/has\"\nimport { timer } from \"@chevrotain/utils\"\nimport { MixedInParser } from \"./parser_traits\"\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\"\n\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class PerformanceTracer {\n traceInitPerf: boolean | number\n traceInitMaxIdent: number\n traceInitIndent: number\n\n initPerformanceTracer(config: IParserConfig) {\n if (has(config, \"traceInitPerf\")) {\n const userTraceInitPerf = config.traceInitPerf\n const traceIsNumber = typeof userTraceInitPerf === \"number\"\n this.traceInitMaxIdent = traceIsNumber\n ? <number>userTraceInitPerf\n : Infinity\n this.traceInitPerf = traceIsNumber\n ? userTraceInitPerf > 0\n : (userTraceInitPerf as boolean) // assumes end user provides the correct config value/type\n } else {\n this.traceInitMaxIdent = 0\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf\n }\n\n this.traceInitIndent = -1\n }\n\n TRACE_INIT<T>(this: MixedInParser, phaseDesc: string, phaseImpl: () => T): T {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join(\"\\t\")\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n}\n", "export function applyMixins(derivedCtor: any, baseCtors: any[]) {\n baseCtors.forEach((baseCtor) => {\n const baseProto = baseCtor.prototype\n Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n if (propName === \"constructor\") {\n return\n }\n\n const basePropDescriptor = Object.getOwnPropertyDescriptor(\n baseProto,\n propName\n )\n // Handle Accessors\n if (\n basePropDescriptor &&\n (basePropDescriptor.get || basePropDescriptor.set)\n ) {\n Object.defineProperty(\n derivedCtor.prototype,\n propName,\n basePropDescriptor\n )\n } else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName]\n }\n })\n })\n}\n", "import isEmpty from \"lodash/isEmpty\"\nimport map from \"lodash/map\"\nimport forEach from \"lodash/forEach\"\nimport values from \"lodash/values\"\nimport has from \"lodash/has\"\nimport clone from \"lodash/clone\"\nimport { toFastProperties } from \"@chevrotain/utils\"\nimport { computeAllProdsFollows } from \"../grammar/follow\"\nimport { createTokenInstance, EOF } from \"../../scan/tokens_public\"\nimport {\n defaultGrammarValidatorErrorProvider,\n defaultParserErrorProvider\n} from \"../errors_public\"\nimport {\n resolveGrammar,\n validateGrammar\n} from \"../grammar/gast/gast_resolver_public\"\nimport {\n CstNode,\n IParserConfig,\n IRecognitionException,\n IRuleConfig,\n IToken,\n TokenType,\n TokenVocabulary\n} from \"@chevrotain/types\"\nimport { Recoverable } from \"./traits/recoverable\"\nimport { LooksAhead } from \"./traits/looksahead\"\nimport { TreeBuilder } from \"./traits/tree_builder\"\nimport { LexerAdapter } from \"./traits/lexer_adapter\"\nimport { RecognizerApi } from \"./traits/recognizer_api\"\nimport { RecognizerEngine } from \"./traits/recognizer_engine\"\n\nimport { ErrorHandler } from \"./traits/error_handler\"\nimport { MixedInParser } from \"./traits/parser_traits\"\nimport { ContentAssist } from \"./traits/context_assist\"\nimport { GastRecorder } from \"./traits/gast_recorder\"\nimport { PerformanceTracer } from \"./traits/perf_tracer\"\nimport { applyMixins } from \"./utils/apply_mixins\"\nimport { IParserDefinitionError } from \"../grammar/types\"\nimport { Rule } from \"@chevrotain/gast\"\nimport { IParserConfigInternal, ParserMethodInternal } from \"./types\"\nimport { validateLookahead } from \"../grammar/checks\"\n\nexport const END_OF_FILE = createTokenInstance(\n EOF,\n \"\",\n NaN,\n NaN,\n NaN,\n NaN,\n NaN,\n NaN\n)\nObject.freeze(END_OF_FILE)\n\nexport type TokenMatcher = (token: IToken, tokType: TokenType) => boolean\n\nexport const DEFAULT_PARSER_CONFIG: Required<\n Omit<IParserConfigInternal, \"lookaheadStrategy\">\n> = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 3,\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: \"none\",\n traceInitPerf: false,\n skipValidations: false\n})\n\nexport const DEFAULT_RULE_CONFIG: Required<IRuleConfig<any>> = Object.freeze({\n recoveryValueFunc: () => undefined,\n resyncEnabled: true\n})\n\nexport enum ParserDefinitionErrorType {\n INVALID_RULE_NAME = 0,\n DUPLICATE_RULE_NAME = 1,\n INVALID_RULE_OVERRIDE = 2,\n DUPLICATE_PRODUCTIONS = 3,\n UNRESOLVED_SUBRULE_REF = 4,\n LEFT_RECURSION = 5,\n NONE_LAST_EMPTY_ALT = 6,\n AMBIGUOUS_ALTS = 7,\n CONFLICT_TOKENS_RULES_NAMESPACE = 8,\n INVALID_TOKEN_NAME = 9,\n NO_NON_EMPTY_LOOKAHEAD = 10,\n AMBIGUOUS_PREFIX_ALTS = 11,\n TOO_MANY_ALTS = 12,\n CUSTOM_LOOKAHEAD_VALIDATION = 13\n}\n\nexport interface IParserDuplicatesDefinitionError\n extends IParserDefinitionError {\n dslName: string\n occurrence: number\n parameter?: string\n}\n\nexport interface IParserEmptyAlternativeDefinitionError\n extends IParserDefinitionError {\n occurrence: number\n alternative: number\n}\n\nexport interface IParserAmbiguousAlternativesDefinitionError\n extends IParserDefinitionError {\n occurrence: number | string\n alternatives: number[]\n}\n\nexport interface IParserUnresolvedRefDefinitionError\n extends IParserDefinitionError {\n unresolvedRefName: string\n}\n\nexport interface IParserState {\n errors: IRecognitionException[]\n lexerState: any\n RULE_STACK: number[]\n CST_STACK: CstNode[]\n}\n\nexport type Predicate = () => boolean\n\nexport function EMPTY_ALT(): () => undefined\nexport function EMPTY_ALT<T>(value: T): () => T\nexport function EMPTY_ALT(value: any = undefined) {\n return function () {\n return value\n }\n}\n\nexport class Parser {\n // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n // (normally during the parser's constructor).\n // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n // for example: duplicate rule names, referencing an unresolved subrule, ect...\n // This flag should not be enabled during normal usage, it is used in special situations, for example when\n // needing to display the parser definition errors in some GUI(online playground).\n static DEFER_DEFINITION_ERRORS_HANDLING: boolean = false\n\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n static performSelfAnalysis(parserInstance: Parser): void {\n throw Error(\n \"The **static** `performSelfAnalysis` method has been deprecated.\" +\n \"\\t\\nUse the **instance** method with the same name instead.\"\n )\n }\n\n public performSelfAnalysis(this: MixedInParser): void {\n this.TRACE_INIT(\"performSelfAnalysis\", () => {\n let defErrorsMsgs\n\n this.selfAnalysisDone = true\n const className = this.className\n\n this.TRACE_INIT(\"toFastProps\", () => {\n // Without this voodoo magic the parser would be x3-x4 slower\n // It seems it is better to invoke `toFastProperties` **before**\n // Any manipulations of the `this` object done during the recording phase.\n toFastProperties(this)\n })\n\n this.TRACE_INIT(\"Grammar Recording\", () => {\n try {\n this.enableRecording()\n // Building the GAST\n forEach(this.definedRulesNames, (currRuleName) => {\n const wrappedRule = (this as any)[\n currRuleName\n ] as ParserMethodInternal<unknown[], unknown>\n const originalGrammarAction = wrappedRule[\"originalGrammarAction\"]\n let recordedRuleGast!: Rule\n this.TRACE_INIT(`${currRuleName} Rule`, () => {\n recordedRuleGast = this.topLevelRuleRecord(\n currRuleName,\n originalGrammarAction\n )\n })\n this.gastProductionsCache[currRuleName] = recordedRuleGast\n })\n } finally {\n this.disableRecording()\n }\n })\n\n let resolverErrors: IParserDefinitionError[] = []\n this.TRACE_INIT(\"Grammar Resolving\", () => {\n resolverErrors = resolveGrammar({\n rules: values(this.gastProductionsCache)\n })\n this.definitionErrors = this.definitionErrors.concat(resolverErrors)\n })\n\n this.TRACE_INIT(\"Grammar Validations\", () => {\n // only perform additional grammar validations IFF no resolving errors have occurred.\n // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.\n if (isEmpty(resolverErrors) && this.skipValidations === false) {\n const validationErrors = validateGrammar({\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className\n })\n const lookaheadValidationErrors = validateLookahead({\n lookaheadStrategy: this.lookaheadStrategy,\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n grammarName: className\n })\n this.definitionErrors = this.definitionErrors.concat(\n validationErrors,\n lookaheadValidationErrors\n )\n }\n })\n\n // this analysis may fail if the grammar is not perfectly valid\n if (isEmpty(this.definitionErrors)) {\n // The results of these computations are not needed unless error recovery is enabled.\n if (this.recoveryEnabled) {\n this.TRACE_INIT(\"computeAllProdsFollows\", () => {\n const allFollows = computeAllProdsFollows(\n values(this.gastProductionsCache)\n )\n this.resyncFollows = allFollows\n })\n }\n\n this.TRACE_INIT(\"ComputeLookaheadFunctions\", () => {\n this.lookaheadStrategy.initialize?.({\n rules: values(this.gastProductionsCache)\n })\n this.preComputeLookaheadFunctions(values(this.gastProductionsCache))\n })\n }\n\n if (\n !Parser.DEFER_DEFINITION_ERRORS_HANDLING &&\n !isEmpty(this.definitionErrors)\n ) {\n defErrorsMsgs = map(\n this.definitionErrors,\n (defError) => defError.message\n )\n throw new Error(\n `Parser Definition Errors detected:\\n ${defErrorsMsgs.join(\n \"\\n-------------------------------\\n\"\n )}`\n )\n }\n })\n }\n\n definitionErrors: IParserDefinitionError[] = []\n selfAnalysisDone = false\n protected skipValidations: boolean\n\n constructor(tokenVocabulary: TokenVocabulary, config: IParserConfig) {\n const that: MixedInParser = this as any\n that.initErrorHandler(config)\n that.initLexerAdapter()\n that.initLooksAhead(config)\n that.initRecognizerEngine(tokenVocabulary, config)\n that.initRecoverable(config)\n that.initTreeBuilder(config)\n that.initContentAssist()\n that.initGastRecorder(config)\n that.initPerformanceTracer(config)\n\n if (has(config, \"ignoredIssues\")) {\n throw new Error(\n \"The <ignoredIssues> IParserConfig property has been deprecated.\\n\\t\" +\n \"Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\\n\\t\" +\n \"See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\\t\" +\n \"For further details.\"\n )\n }\n\n this.skipValidations = has(config, \"skipValidations\")\n ? (config.skipValidations as boolean) // casting assumes the end user passing the correct type\n : DEFAULT_PARSER_CONFIG.skipValidations\n }\n}\n\napplyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer\n])\n\nexport class CstParser extends Parser {\n constructor(\n tokenVocabulary: TokenVocabulary,\n config: IParserConfigInternal = DEFAULT_PARSER_CONFIG\n ) {\n const configClone = clone(config)\n configClone.outputCst = true\n super(tokenVocabulary, configClone)\n }\n}\n\nexport class EmbeddedActionsParser extends Parser {\n constructor(\n tokenVocabulary: TokenVocabulary,\n config: IParserConfigInternal = DEFAULT_PARSER_CONFIG\n ) {\n const configClone = clone(config)\n configClone.outputCst = false\n super(tokenVocabulary, configClone)\n }\n}\n", "import type {\n Alternation,\n Alternative,\n IProduction,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal,\n TokenType\n} from \"@chevrotain/types\"\nimport { NonTerminal, GAstVisitor } from \"@chevrotain/gast\"\nimport map from \"lodash/map\"\nimport flatten from \"lodash/flatten\"\nimport values from \"lodash/values\"\nimport some from \"lodash/some\"\nimport groupBy from \"lodash/groupBy\"\nimport assign from \"lodash/assign\"\n\nexport function buildModel(\n productions: Record<string, Rule>\n): CstNodeTypeDefinition[] {\n const generator = new CstNodeDefinitionGenerator()\n const allRules = values(productions)\n return map(allRules, (rule) => generator.visitRule(rule))\n}\n\nexport type CstNodeTypeDefinition = {\n name: string\n properties: PropertyTypeDefinition[]\n}\n\nexport type PropertyTypeDefinition = {\n name: string\n type: PropertyArrayType\n optional: boolean\n}\n\nexport type PropertyArrayType =\n | TokenArrayType\n | RuleArrayType\n | (TokenArrayType | RuleArrayType)[]\n\nexport type TokenArrayType = { kind: \"token\" }\nexport type RuleArrayType = {\n kind: \"rule\"\n name: string\n}\n\nclass CstNodeDefinitionGenerator extends GAstVisitor {\n visitRule(node: Rule): CstNodeTypeDefinition {\n const rawElements = this.visitEach(node.definition)\n\n const grouped = groupBy(rawElements, (el) => el.propertyName)\n const properties = map(grouped, (group, propertyName) => {\n const allNullable = !some(group, (el) => !el.canBeNull)\n\n // In an alternation with a label a property name can have\n // multiple types.\n let propertyType: PropertyArrayType = group[0].type\n if (group.length > 1) {\n propertyType = map(group, (g) => g.type)\n }\n\n return {\n name: propertyName,\n type: propertyType,\n optional: allNullable\n } as PropertyTypeDefinition\n })\n\n return {\n name: node.name,\n properties: properties\n }\n }\n\n visitAlternative(node: Alternative) {\n return this.visitEachAndOverrideWith(node.definition, { canBeNull: true })\n }\n\n visitOption(node: Option) {\n return this.visitEachAndOverrideWith(node.definition, { canBeNull: true })\n }\n\n visitRepetition(node: Repetition) {\n return this.visitEachAndOverrideWith(node.definition, { canBeNull: true })\n }\n\n visitRepetitionMandatory(node: RepetitionMandatory) {\n return this.visitEach(node.definition)\n }\n\n visitRepetitionMandatoryWithSeparator(\n node: RepetitionMandatoryWithSeparator\n ) {\n return this.visitEach(node.definition).concat({\n propertyName: node.separator.name,\n canBeNull: true,\n type: getType(node.separator)\n })\n }\n\n visitRepetitionWithSeparator(node: RepetitionWithSeparator) {\n return this.visitEachAndOverrideWith(node.definition, {\n canBeNull: true\n }).concat({\n propertyName: node.separator.name,\n canBeNull: true,\n type: getType(node.separator)\n })\n }\n\n visitAlternation(node: Alternation) {\n return this.visitEachAndOverrideWith(node.definition, { canBeNull: true })\n }\n\n visitTerminal(node: Terminal): PropertyTupleElement[] {\n return [\n {\n propertyName: node.label || node.terminalType.name,\n canBeNull: false,\n type: getType(node)\n }\n ]\n }\n\n visitNonTerminal(node: NonTerminal): PropertyTupleElement[] {\n return [\n {\n propertyName: node.label || node.nonTerminalName,\n canBeNull: false,\n type: getType(node)\n }\n ]\n }\n\n private visitEachAndOverrideWith(\n definition: IProduction[],\n override: Partial<PropertyTupleElement>\n ) {\n return map(\n this.visitEach(definition),\n (definition) => assign({}, definition, override) as PropertyTupleElement\n )\n }\n\n private visitEach(definition: IProduction[]) {\n return flatten<PropertyTupleElement>(\n map(\n definition,\n (definition) => this.visit(definition) as PropertyTupleElement[]\n )\n )\n }\n}\n\ntype PropertyTupleElement = {\n propertyName: string\n canBeNull: boolean\n type: TokenArrayType | RuleArrayType\n}\n\nfunction getType(\n production: Terminal | NonTerminal | TokenType\n): TokenArrayType | RuleArrayType {\n if (production instanceof NonTerminal) {\n return {\n kind: \"rule\",\n name: production.referencedRule.name\n }\n }\n\n return { kind: \"token\" }\n}\n", "var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n", "/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n", "var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n", "var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n", "var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n", "import flatten from \"lodash/flatten\"\nimport isArray from \"lodash/isArray\"\nimport map from \"lodash/map\"\nimport reduce from \"lodash/reduce\"\nimport uniq from \"lodash/uniq\"\nimport upperFirst from \"lodash/upperFirst\"\nimport { GenerateDtsOptions } from \"@chevrotain/types\"\nimport {\n CstNodeTypeDefinition,\n PropertyTypeDefinition,\n PropertyArrayType,\n TokenArrayType,\n RuleArrayType\n} from \"./model\"\n\nexport function genDts(\n model: CstNodeTypeDefinition[],\n options: Required<GenerateDtsOptions>\n): string {\n let contentParts: string[] = []\n\n contentParts = contentParts.concat(\n `import type { CstNode, ICstVisitor, IToken } from \"chevrotain\";`\n )\n\n contentParts = contentParts.concat(\n flatten(map(model, (node) => genCstNodeTypes(node)))\n )\n\n if (options.includeVisitorInterface) {\n contentParts = contentParts.concat(\n genVisitor(options.visitorInterfaceName, model)\n )\n }\n\n return contentParts.join(\"\\n\\n\") + \"\\n\"\n}\n\nfunction genCstNodeTypes(node: CstNodeTypeDefinition) {\n const nodeCstInterface = genNodeInterface(node)\n const nodeChildrenInterface = genNodeChildrenType(node)\n\n return [nodeCstInterface, nodeChildrenInterface]\n}\n\nfunction genNodeInterface(node: CstNodeTypeDefinition) {\n const nodeInterfaceName = getNodeInterfaceName(node.name)\n const childrenTypeName = getNodeChildrenTypeName(node.name)\n\n return `export interface ${nodeInterfaceName} extends CstNode {\n name: \"${node.name}\";\n children: ${childrenTypeName};\n}`\n}\n\nfunction genNodeChildrenType(node: CstNodeTypeDefinition) {\n const typeName = getNodeChildrenTypeName(node.name)\n\n return `export type ${typeName} = {\n ${map(node.properties, (property) => genChildProperty(property)).join(\"\\n \")}\n};`\n}\n\nfunction genChildProperty(prop: PropertyTypeDefinition) {\n const typeName = buildTypeString(prop.type)\n return `${prop.name}${prop.optional ? \"?\" : \"\"}: ${typeName}[];`\n}\n\nfunction genVisitor(name: string, nodes: CstNodeTypeDefinition[]) {\n return `export interface ${name}<IN, OUT> extends ICstVisitor<IN, OUT> {\n ${map(nodes, (node) => genVisitorFunction(node)).join(\"\\n \")}\n}`\n}\n\nfunction genVisitorFunction(node: CstNodeTypeDefinition) {\n const childrenTypeName = getNodeChildrenTypeName(node.name)\n return `${node.name}(children: ${childrenTypeName}, param?: IN): OUT;`\n}\n\nfunction buildTypeString(type: PropertyArrayType) {\n if (isArray(type)) {\n const typeNames = uniq(map(type, (t) => getTypeString(t)))\n const typeString = reduce(typeNames, (sum, t) => sum + \" | \" + t)\n return \"(\" + typeString + \")\"\n } else {\n return getTypeString(type)\n }\n}\n\nfunction getTypeString(type: TokenArrayType | RuleArrayType) {\n if (type.kind === \"token\") {\n return \"IToken\"\n }\n return getNodeInterfaceName(type.name)\n}\n\nfunction getNodeInterfaceName(ruleName: string) {\n return upperFirst(ruleName) + \"CstNode\"\n}\n\nfunction getNodeChildrenTypeName(ruleName: string) {\n return upperFirst(ruleName) + \"CstChildren\"\n}\n", "import { Rule, GenerateDtsOptions } from \"@chevrotain/types\"\nimport { buildModel } from \"./model\"\nimport { genDts } from \"./generate\"\n\nconst defaultOptions: Required<GenerateDtsOptions> = {\n includeVisitorInterface: true,\n visitorInterfaceName: \"ICstNodeVisitor\"\n}\n\nexport function generateCstDts(\n productions: Record<string, Rule>,\n options?: GenerateDtsOptions\n): string {\n const effectiveOptions = {\n ...defaultOptions,\n ...options\n }\n\n const model = buildModel(productions)\n\n return genDts(model, effectiveOptions)\n}\n", "import { VERSION } from \"../version\"\nimport { ISerializedGast } from \"@chevrotain/types\"\n\nexport function createSyntaxDiagramsCode(\n grammar: ISerializedGast[],\n {\n resourceBase = `https://unpkg.com/chevrotain@${VERSION}/diagrams/`,\n css = `https://unpkg.com/chevrotain@${VERSION}/diagrams/diagrams.css`\n }: {\n resourceBase?: string\n css?: string\n } = {}\n) {\n const header = `\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n body {\n background-color: hsl(30, 20%, 95%)\n }\n</style>\n\n`\n const cssHtml = `\n<link rel='stylesheet' href='${css}'>\n`\n\n const scripts = `\n<script src='${resourceBase}vendor/railroad-diagrams.js'></script>\n<script src='${resourceBase}src/diagrams_builder.js'></script>\n<script src='${resourceBase}src/diagrams_behavior.js'></script>\n<script src='${resourceBase}src/main.js'></script>\n`\n const diagramsDiv = `\n<div id=\"diagrams\" align=\"center\"></div> \n`\n const serializedGrammar = `\n<script>\n window.serializedGrammar = ${JSON.stringify(grammar, null, \" \")};\n</script>\n`\n\n const initLogic = `\n<script>\n var diagramsDiv = document.getElementById(\"diagrams\");\n main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n</script>\n`\n return (\n header + cssHtml + scripts + diagramsDiv + serializedGrammar + initLogic\n )\n}\n", "/* istanbul ignore file - tricky to import some things from this module during testing */\n\n// semantic version\nexport { VERSION } from \"./version\"\n\nexport {\n CstParser,\n EmbeddedActionsParser,\n ParserDefinitionErrorType,\n EMPTY_ALT\n} from \"./parse/parser/parser\"\n\nexport { Lexer, LexerDefinitionErrorType } from \"./scan/lexer_public\"\n\n// Tokens utilities\nexport {\n createToken,\n createTokenInstance,\n EOF,\n tokenLabel,\n tokenMatcher,\n tokenName\n} from \"./scan/tokens_public\"\n\n// Lookahead\n\nexport { getLookaheadPaths } from \"./parse/grammar/lookahead\"\n\nexport { LLkLookaheadStrategy } from \"./parse/grammar/llk_lookahead\"\n\n// Other Utilities\n\nexport { defaultParserErrorProvider } from \"./parse/errors_public\"\n\nexport {\n EarlyExitException,\n isRecognitionException,\n MismatchedTokenException,\n NotAllInputParsedException,\n NoViableAltException\n} from \"./parse/exceptions_public\"\n\nexport { defaultLexerErrorProvider } from \"./scan/lexer_errors_public\"\n\n// grammar reflection API\nexport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal\n} from \"@chevrotain/gast\"\n\n// GAST Utilities\n\nexport {\n serializeGrammar,\n serializeProduction,\n GAstVisitor\n} from \"@chevrotain/gast\"\n\nexport { generateCstDts } from \"@chevrotain/cst-dts-gen\"\n\n/* istanbul ignore next */\nexport function clearCache() {\n console.warn(\n \"The clearCache function was 'soft' removed from the Chevrotain API.\" +\n \"\\n\\t It performs no action other than printing this message.\" +\n \"\\n\\t Please avoid using it as it will be completely removed in the future\"\n )\n}\n\nexport { createSyntaxDiagramsCode } from \"./diagrams/render_public\"\n\nexport class Parser {\n constructor() {\n throw new Error(\n \"The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\\t\\n\" +\n \"See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0\"\n )\n }\n}\n"],
|
|
"mappings": "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",
|
|
"names": ["exports", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Symbol", "exports", "module", "Symbol", "exports", "module", "exports", "module", "Symbol", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Map", "exports", "module", "Promise", "exports", "module", "exports", "module", "exports", "module", "Map", "Promise", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Buffer", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Map", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Map", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "othValue", "exports", "module", "Uint8Array", "exports", "module", "exports", "module", "exports", "module", "Symbol", "Uint8Array", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Symbol", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "collection", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Buffer", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "Uint8Array", "exports", "module", "exports", "module", "exports", "module", "Symbol", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "key", "exports", "module", "exports", "exports", "exports", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "AbstractProduction", "exports", "NonTerminal", "Rule", "Alternative", "Option", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "Repetition", "RepetitionWithSeparator", "Alternation", "Terminal", "GAstVisitor", "exports", "exports", "module", "collection", "exports", "module", "exports", "module", "exports", "module", "collection", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "RestWalker", "exports", "exports", "module", "Symbol", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "ResyncFollowsWalker", "exports", "exports", "module", "exports", "module", "i", "exports", "module", "require_first", "exports", "module", "exports", "module", "exports", "module", "collection", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "collection", "exports", "module", "exports", "exports", "CharCodeFinder", "exports", "charCode", "EndAnchorFinder", "StartAnchorFinder", "exports", "module", "exports", "exports", "LexerDefinitionErrorType", "exports", "Lexer", "exports", "exports", "exports", "GastRefResolverVisitor", "exports", "module", "exports", "module", "collection", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "AbstractNextPossibleTokensWalker", "exports", "NextAfterTokenWalker", "AbstractNextTerminalAfterProductionWalker", "NextTerminalAfterManyWalker", "NextTerminalAfterManySepWalker", "NextTerminalAfterAtLeastOneWalker", "NextTerminalAfterAtLeastOneSepWalker", "PROD_TYPE", "exports", "currAlt", "RestDefinitionFinderWalker", "InsideDefinitionFinderVisitor", "altIdx", "prefixKeys", "exports", "OccurrenceValidationCollector", "OrCollector", "RepetitionCollector", "exports", "exports", "RecognitionException", "MismatchedTokenException", "NoViableAltException", "NotAllInputParsedException", "EarlyExitException", "exports", "InRuleRecoveryException", "Recoverable", "exports", "LLkLookaheadStrategy", "exports", "LooksAhead", "exports", "DslMethodsCollectorVisitor", "exports", "exports", "exports", "CstVisitorDefinitionError", "TreeBuilder", "exports", "LexerAdapter", "exports", "RecognizerApi", "exports", "RecognizerEngine", "invokeRuleWithTry", "exports", "ErrorHandler", "exports", "ContentAssist", "exports", "GastRecorder", "i", "exports", "PerformanceTracer", "exports", "exports", "exports", "ParserDefinitionErrorType", "Parser", "CstParser", "EmbeddedActionsParser", "exports", "CstNodeDefinitionGenerator", "definition", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "exports", "exports", "Parser"]
|
|
}
|