{"version":3,"file":"mermaid-parser.core-CaaXzgY-.cjs","sources":["../node_modules/lodash-es/flatMap.js","../node_modules/lodash-es/uniqBy.js","../node_modules/langium/lib/syntax-tree.js","../node_modules/langium/lib/utils/stream.js","../node_modules/langium/lib/utils/cst-utils.js","../node_modules/langium/lib/utils/errors.js","../node_modules/langium/lib/languages/generated/ast.js","../node_modules/langium/lib/utils/ast-utils.js","../node_modules/@chevrotain/regexp-to-ast/lib/src/utils.js","../node_modules/@chevrotain/regexp-to-ast/lib/src/character-classes.js","../node_modules/@chevrotain/regexp-to-ast/lib/src/regexp-parser.js","../node_modules/@chevrotain/regexp-to-ast/lib/src/base-regexp-visitor.js","../node_modules/langium/lib/utils/regexp-utils.js","../node_modules/langium/lib/utils/grammar-utils.js","../node_modules/langium/lib/languages/grammar-config.js","../node_modules/chevrotain/node_modules/lodash-es/_freeGlobal.js","../node_modules/chevrotain/node_modules/lodash-es/_root.js","../node_modules/chevrotain/node_modules/lodash-es/_Symbol.js","../node_modules/chevrotain/node_modules/lodash-es/_getRawTag.js","../node_modules/chevrotain/node_modules/lodash-es/_objectToString.js","../node_modules/chevrotain/node_modules/lodash-es/_baseGetTag.js","../node_modules/chevrotain/node_modules/lodash-es/isObjectLike.js","../node_modules/chevrotain/node_modules/lodash-es/isSymbol.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayMap.js","../node_modules/chevrotain/node_modules/lodash-es/isArray.js","../node_modules/chevrotain/node_modules/lodash-es/_baseToString.js","../node_modules/chevrotain/node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/chevrotain/node_modules/lodash-es/_baseTrim.js","../node_modules/chevrotain/node_modules/lodash-es/isObject.js","../node_modules/chevrotain/node_modules/lodash-es/toNumber.js","../node_modules/chevrotain/node_modules/lodash-es/toFinite.js","../node_modules/chevrotain/node_modules/lodash-es/toInteger.js","../node_modules/chevrotain/node_modules/lodash-es/identity.js","../node_modules/chevrotain/node_modules/lodash-es/isFunction.js","../node_modules/chevrotain/node_modules/lodash-es/_coreJsData.js","../node_modules/chevrotain/node_modules/lodash-es/_isMasked.js","../node_modules/chevrotain/node_modules/lodash-es/_toSource.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsNative.js","../node_modules/chevrotain/node_modules/lodash-es/_getValue.js","../node_modules/chevrotain/node_modules/lodash-es/_getNative.js","../node_modules/chevrotain/node_modules/lodash-es/_WeakMap.js","../node_modules/chevrotain/node_modules/lodash-es/_baseCreate.js","../node_modules/chevrotain/node_modules/lodash-es/_apply.js","../node_modules/chevrotain/node_modules/lodash-es/noop.js","../node_modules/chevrotain/node_modules/lodash-es/_copyArray.js","../node_modules/chevrotain/node_modules/lodash-es/_shortOut.js","../node_modules/chevrotain/node_modules/lodash-es/constant.js","../node_modules/chevrotain/node_modules/lodash-es/_defineProperty.js","../node_modules/chevrotain/node_modules/lodash-es/_baseSetToString.js","../node_modules/chevrotain/node_modules/lodash-es/_setToString.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayEach.js","../node_modules/chevrotain/node_modules/lodash-es/_baseFindIndex.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsNaN.js","../node_modules/chevrotain/node_modules/lodash-es/_strictIndexOf.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIndexOf.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayIncludes.js","../node_modules/chevrotain/node_modules/lodash-es/_isIndex.js","../node_modules/chevrotain/node_modules/lodash-es/_baseAssignValue.js","../node_modules/chevrotain/node_modules/lodash-es/eq.js","../node_modules/chevrotain/node_modules/lodash-es/_assignValue.js","../node_modules/chevrotain/node_modules/lodash-es/_copyObject.js","../node_modules/chevrotain/node_modules/lodash-es/_overRest.js","../node_modules/chevrotain/node_modules/lodash-es/_baseRest.js","../node_modules/chevrotain/node_modules/lodash-es/isLength.js","../node_modules/chevrotain/node_modules/lodash-es/isArrayLike.js","../node_modules/chevrotain/node_modules/lodash-es/_isIterateeCall.js","../node_modules/chevrotain/node_modules/lodash-es/_createAssigner.js","../node_modules/chevrotain/node_modules/lodash-es/_isPrototype.js","../node_modules/chevrotain/node_modules/lodash-es/_baseTimes.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsArguments.js","../node_modules/chevrotain/node_modules/lodash-es/isArguments.js","../node_modules/chevrotain/node_modules/lodash-es/stubFalse.js","../node_modules/chevrotain/node_modules/lodash-es/isBuffer.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/chevrotain/node_modules/lodash-es/_baseUnary.js","../node_modules/chevrotain/node_modules/lodash-es/_nodeUtil.js","../node_modules/chevrotain/node_modules/lodash-es/isTypedArray.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/chevrotain/node_modules/lodash-es/_overArg.js","../node_modules/chevrotain/node_modules/lodash-es/_nativeKeys.js","../node_modules/chevrotain/node_modules/lodash-es/_baseKeys.js","../node_modules/chevrotain/node_modules/lodash-es/keys.js","../node_modules/chevrotain/node_modules/lodash-es/assign.js","../node_modules/chevrotain/node_modules/lodash-es/_nativeKeysIn.js","../node_modules/chevrotain/node_modules/lodash-es/_baseKeysIn.js","../node_modules/chevrotain/node_modules/lodash-es/keysIn.js","../node_modules/chevrotain/node_modules/lodash-es/_isKey.js","../node_modules/chevrotain/node_modules/lodash-es/_nativeCreate.js","../node_modules/chevrotain/node_modules/lodash-es/_hashClear.js","../node_modules/chevrotain/node_modules/lodash-es/_hashDelete.js","../node_modules/chevrotain/node_modules/lodash-es/_hashGet.js","../node_modules/chevrotain/node_modules/lodash-es/_hashHas.js","../node_modules/chevrotain/node_modules/lodash-es/_hashSet.js","../node_modules/chevrotain/node_modules/lodash-es/_Hash.js","../node_modules/chevrotain/node_modules/lodash-es/_listCacheClear.js","../node_modules/chevrotain/node_modules/lodash-es/_assocIndexOf.js","../node_modules/chevrotain/node_modules/lodash-es/_listCacheDelete.js","../node_modules/chevrotain/node_modules/lodash-es/_listCacheGet.js","../node_modules/chevrotain/node_modules/lodash-es/_listCacheHas.js","../node_modules/chevrotain/node_modules/lodash-es/_listCacheSet.js","../node_modules/chevrotain/node_modules/lodash-es/_ListCache.js","../node_modules/chevrotain/node_modules/lodash-es/_Map.js","../node_modules/chevrotain/node_modules/lodash-es/_mapCacheClear.js","../node_modules/chevrotain/node_modules/lodash-es/_isKeyable.js","../node_modules/chevrotain/node_modules/lodash-es/_getMapData.js","../node_modules/chevrotain/node_modules/lodash-es/_mapCacheDelete.js","../node_modules/chevrotain/node_modules/lodash-es/_mapCacheGet.js","../node_modules/chevrotain/node_modules/lodash-es/_mapCacheHas.js","../node_modules/chevrotain/node_modules/lodash-es/_mapCacheSet.js","../node_modules/chevrotain/node_modules/lodash-es/_MapCache.js","../node_modules/chevrotain/node_modules/lodash-es/memoize.js","../node_modules/chevrotain/node_modules/lodash-es/_memoizeCapped.js","../node_modules/chevrotain/node_modules/lodash-es/_stringToPath.js","../node_modules/chevrotain/node_modules/lodash-es/toString.js","../node_modules/chevrotain/node_modules/lodash-es/_castPath.js","../node_modules/chevrotain/node_modules/lodash-es/_toKey.js","../node_modules/chevrotain/node_modules/lodash-es/_baseGet.js","../node_modules/chevrotain/node_modules/lodash-es/get.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayPush.js","../node_modules/chevrotain/node_modules/lodash-es/_isFlattenable.js","../node_modules/chevrotain/node_modules/lodash-es/_baseFlatten.js","../node_modules/chevrotain/node_modules/lodash-es/flatten.js","../node_modules/chevrotain/node_modules/lodash-es/_getPrototype.js","../node_modules/chevrotain/node_modules/lodash-es/_baseSlice.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayReduce.js","../node_modules/chevrotain/node_modules/lodash-es/_stackClear.js","../node_modules/chevrotain/node_modules/lodash-es/_stackDelete.js","../node_modules/chevrotain/node_modules/lodash-es/_stackGet.js","../node_modules/chevrotain/node_modules/lodash-es/_stackHas.js","../node_modules/chevrotain/node_modules/lodash-es/_stackSet.js","../node_modules/chevrotain/node_modules/lodash-es/_Stack.js","../node_modules/chevrotain/node_modules/lodash-es/_baseAssign.js","../node_modules/chevrotain/node_modules/lodash-es/_baseAssignIn.js","../node_modules/chevrotain/node_modules/lodash-es/_cloneBuffer.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayFilter.js","../node_modules/chevrotain/node_modules/lodash-es/stubArray.js","../node_modules/chevrotain/node_modules/lodash-es/_getSymbols.js","../node_modules/chevrotain/node_modules/lodash-es/_copySymbols.js","../node_modules/chevrotain/node_modules/lodash-es/_getSymbolsIn.js","../node_modules/chevrotain/node_modules/lodash-es/_copySymbolsIn.js","../node_modules/chevrotain/node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/chevrotain/node_modules/lodash-es/_getAllKeys.js","../node_modules/chevrotain/node_modules/lodash-es/_getAllKeysIn.js","../node_modules/chevrotain/node_modules/lodash-es/_DataView.js","../node_modules/chevrotain/node_modules/lodash-es/_Promise.js","../node_modules/chevrotain/node_modules/lodash-es/_Set.js","../node_modules/chevrotain/node_modules/lodash-es/_getTag.js","../node_modules/chevrotain/node_modules/lodash-es/_initCloneArray.js","../node_modules/chevrotain/node_modules/lodash-es/_Uint8Array.js","../node_modules/chevrotain/node_modules/lodash-es/_cloneArrayBuffer.js","../node_modules/chevrotain/node_modules/lodash-es/_cloneDataView.js","../node_modules/chevrotain/node_modules/lodash-es/_cloneRegExp.js","../node_modules/chevrotain/node_modules/lodash-es/_cloneSymbol.js","../node_modules/chevrotain/node_modules/lodash-es/_cloneTypedArray.js","../node_modules/chevrotain/node_modules/lodash-es/_initCloneByTag.js","../node_modules/chevrotain/node_modules/lodash-es/_initCloneObject.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsMap.js","../node_modules/chevrotain/node_modules/lodash-es/isMap.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsSet.js","../node_modules/chevrotain/node_modules/lodash-es/isSet.js","../node_modules/chevrotain/node_modules/lodash-es/_baseClone.js","../node_modules/chevrotain/node_modules/lodash-es/clone.js","../node_modules/chevrotain/node_modules/lodash-es/compact.js","../node_modules/chevrotain/node_modules/lodash-es/_setCacheAdd.js","../node_modules/chevrotain/node_modules/lodash-es/_setCacheHas.js","../node_modules/chevrotain/node_modules/lodash-es/_SetCache.js","../node_modules/chevrotain/node_modules/lodash-es/_arraySome.js","../node_modules/chevrotain/node_modules/lodash-es/_cacheHas.js","../node_modules/chevrotain/node_modules/lodash-es/_equalArrays.js","../node_modules/chevrotain/node_modules/lodash-es/_mapToArray.js","../node_modules/chevrotain/node_modules/lodash-es/_setToArray.js","../node_modules/chevrotain/node_modules/lodash-es/_equalByTag.js","../node_modules/chevrotain/node_modules/lodash-es/_equalObjects.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsEqual.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsMatch.js","../node_modules/chevrotain/node_modules/lodash-es/_isStrictComparable.js","../node_modules/chevrotain/node_modules/lodash-es/_getMatchData.js","../node_modules/chevrotain/node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/chevrotain/node_modules/lodash-es/_baseMatches.js","../node_modules/chevrotain/node_modules/lodash-es/_baseHasIn.js","../node_modules/chevrotain/node_modules/lodash-es/_hasPath.js","../node_modules/chevrotain/node_modules/lodash-es/hasIn.js","../node_modules/chevrotain/node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/chevrotain/node_modules/lodash-es/_baseProperty.js","../node_modules/chevrotain/node_modules/lodash-es/_basePropertyDeep.js","../node_modules/chevrotain/node_modules/lodash-es/property.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIteratee.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayAggregator.js","../node_modules/chevrotain/node_modules/lodash-es/_createBaseFor.js","../node_modules/chevrotain/node_modules/lodash-es/_baseFor.js","../node_modules/chevrotain/node_modules/lodash-es/_baseForOwn.js","../node_modules/chevrotain/node_modules/lodash-es/_createBaseEach.js","../node_modules/chevrotain/node_modules/lodash-es/_baseEach.js","../node_modules/chevrotain/node_modules/lodash-es/_baseAggregator.js","../node_modules/chevrotain/node_modules/lodash-es/_createAggregator.js","../node_modules/chevrotain/node_modules/lodash-es/defaults.js","../node_modules/chevrotain/node_modules/lodash-es/isArrayLikeObject.js","../node_modules/chevrotain/node_modules/lodash-es/_baseDifference.js","../node_modules/chevrotain/node_modules/lodash-es/difference.js","../node_modules/chevrotain/node_modules/lodash-es/last.js","../node_modules/chevrotain/node_modules/lodash-es/drop.js","../node_modules/chevrotain/node_modules/lodash-es/dropRight.js","../node_modules/chevrotain/node_modules/lodash-es/_castFunction.js","../node_modules/chevrotain/node_modules/lodash-es/forEach.js","../node_modules/chevrotain/node_modules/lodash-es/_arrayEvery.js","../node_modules/chevrotain/node_modules/lodash-es/_baseEvery.js","../node_modules/chevrotain/node_modules/lodash-es/every.js","../node_modules/chevrotain/node_modules/lodash-es/_baseFilter.js","../node_modules/chevrotain/node_modules/lodash-es/filter.js","../node_modules/chevrotain/node_modules/lodash-es/_createFind.js","../node_modules/chevrotain/node_modules/lodash-es/findIndex.js","../node_modules/chevrotain/node_modules/lodash-es/find.js","../node_modules/chevrotain/node_modules/lodash-es/head.js","../node_modules/chevrotain/node_modules/lodash-es/_baseMap.js","../node_modules/chevrotain/node_modules/lodash-es/map.js","../node_modules/chevrotain/node_modules/lodash-es/flatMap.js","../node_modules/chevrotain/node_modules/lodash-es/groupBy.js","../node_modules/chevrotain/node_modules/lodash-es/_baseHas.js","../node_modules/chevrotain/node_modules/lodash-es/has.js","../node_modules/chevrotain/node_modules/lodash-es/isString.js","../node_modules/chevrotain/node_modules/lodash-es/_baseValues.js","../node_modules/chevrotain/node_modules/lodash-es/values.js","../node_modules/chevrotain/node_modules/lodash-es/includes.js","../node_modules/chevrotain/node_modules/lodash-es/indexOf.js","../node_modules/chevrotain/node_modules/lodash-es/isEmpty.js","../node_modules/chevrotain/node_modules/lodash-es/_baseIsRegExp.js","../node_modules/chevrotain/node_modules/lodash-es/isRegExp.js","../node_modules/chevrotain/node_modules/lodash-es/isUndefined.js","../node_modules/chevrotain/node_modules/lodash-es/negate.js","../node_modules/chevrotain/node_modules/lodash-es/_baseSet.js","../node_modules/chevrotain/node_modules/lodash-es/_basePickBy.js","../node_modules/chevrotain/node_modules/lodash-es/pickBy.js","../node_modules/chevrotain/node_modules/lodash-es/_baseReduce.js","../node_modules/chevrotain/node_modules/lodash-es/reduce.js","../node_modules/chevrotain/node_modules/lodash-es/reject.js","../node_modules/chevrotain/node_modules/lodash-es/_baseSome.js","../node_modules/chevrotain/node_modules/lodash-es/some.js","../node_modules/chevrotain/node_modules/lodash-es/_createSet.js","../node_modules/chevrotain/node_modules/lodash-es/_baseUniq.js","../node_modules/chevrotain/node_modules/lodash-es/uniq.js","../node_modules/@chevrotain/utils/lib/src/print.js","../node_modules/@chevrotain/utils/lib/src/timer.js","../node_modules/@chevrotain/utils/lib/src/to-fast-properties.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_freeGlobal.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_root.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Symbol.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getRawTag.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_objectToString.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseGetTag.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isObjectLike.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isSymbol.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arrayMap.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isArray.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseToString.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseTrim.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isObject.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/toNumber.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/toFinite.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/toInteger.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/identity.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isFunction.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_coreJsData.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isMasked.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_toSource.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsNative.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getValue.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getNative.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_WeakMap.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_apply.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_shortOut.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/constant.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_defineProperty.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseSetToString.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_setToString.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arrayEach.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseFindIndex.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsNaN.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_strictIndexOf.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIndexOf.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isIndex.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseAssignValue.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/eq.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_assignValue.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_copyObject.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_overRest.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseRest.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isLength.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isArrayLike.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isIterateeCall.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_createAssigner.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isPrototype.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseTimes.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsArguments.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isArguments.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/stubFalse.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isBuffer.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseUnary.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_nodeUtil.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isTypedArray.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_overArg.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_nativeKeys.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseKeys.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/keys.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/assign.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_nativeKeysIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseKeysIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/keysIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isKey.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_nativeCreate.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_hashClear.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_hashDelete.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_hashGet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_hashHas.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_hashSet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Hash.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_listCacheClear.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_assocIndexOf.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_listCacheDelete.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_listCacheGet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_listCacheHas.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_listCacheSet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_ListCache.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Map.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_mapCacheClear.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isKeyable.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getMapData.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_mapCacheDelete.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_mapCacheGet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_mapCacheHas.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_mapCacheSet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_MapCache.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/memoize.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_memoizeCapped.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_stringToPath.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/toString.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_castPath.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_toKey.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseGet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/get.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arrayPush.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getPrototype.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_stackClear.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_stackDelete.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_stackGet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_stackHas.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_stackSet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Stack.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arrayFilter.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/stubArray.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getSymbols.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getSymbolsIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getAllKeys.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getAllKeysIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_DataView.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Promise.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Set.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getTag.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_Uint8Array.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_setCacheAdd.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_setCacheHas.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_SetCache.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arraySome.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_cacheHas.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_equalArrays.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_mapToArray.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_setToArray.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_equalByTag.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_equalObjects.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsEqual.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsMatch.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_isStrictComparable.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_getMatchData.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseMatches.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseHasIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_hasPath.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/hasIn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseProperty.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_basePropertyDeep.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/property.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIteratee.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_createBaseFor.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseFor.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseForOwn.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_createBaseEach.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseEach.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_castFunction.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/forEach.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_arrayEvery.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseEvery.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/every.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseMap.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/map.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isString.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseValues.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/values.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/includes.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseIsRegExp.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/isRegExp.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseSet.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_basePickBy.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/pickBy.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/_baseSome.js","../node_modules/@chevrotain/gast/node_modules/lodash-es/some.js","../node_modules/@chevrotain/gast/lib/src/model.js","../node_modules/@chevrotain/gast/lib/src/visitor.js","../node_modules/@chevrotain/gast/lib/src/helpers.js","../node_modules/chevrotain/lib/src/parse/grammar/rest.js","../node_modules/chevrotain/lib/src/parse/grammar/first.js","../node_modules/chevrotain/lib/src/parse/constants.js","../node_modules/chevrotain/lib/src/parse/grammar/follow.js","../node_modules/chevrotain/lib/src/scan/reg_exp_parser.js","../node_modules/chevrotain/lib/src/scan/reg_exp.js","../node_modules/chevrotain/lib/src/scan/lexer.js","../node_modules/chevrotain/lib/src/scan/tokens.js","../node_modules/chevrotain/lib/src/scan/lexer_errors_public.js","../node_modules/chevrotain/lib/src/scan/lexer_public.js","../node_modules/chevrotain/lib/src/scan/tokens_public.js","../node_modules/chevrotain/lib/src/parse/errors_public.js","../node_modules/chevrotain/lib/src/parse/grammar/resolver.js","../node_modules/chevrotain/lib/src/parse/grammar/interpreter.js","../node_modules/chevrotain/lib/src/parse/grammar/lookahead.js","../node_modules/chevrotain/lib/src/parse/grammar/checks.js","../node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js","../node_modules/chevrotain/lib/src/parse/exceptions_public.js","../node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js","../node_modules/chevrotain/lib/src/parse/grammar/keys.js","../node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js","../node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js","../node_modules/chevrotain/lib/src/parse/cst/cst.js","../node_modules/chevrotain/lib/src/lang/lang_extensions.js","../node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js","../node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js","../node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js","../node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js","../node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js","../node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js","../node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js","../node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js","../node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js","../node_modules/chevrotain/lib/src/parse/parser/utils/apply_mixins.js","../node_modules/chevrotain/lib/src/parse/parser/parser.js","../node_modules/chevrotain-allstar/lib/atn.js","../node_modules/chevrotain-allstar/lib/dfa.js","../node_modules/chevrotain-allstar/lib/all-star-lookahead.js","../node_modules/vscode-languageserver-types/lib/esm/main.js","../node_modules/langium/lib/parser/cst-node-builder.js","../node_modules/langium/lib/parser/langium-parser.js","../node_modules/langium/lib/parser/parser-builder-base.js","../node_modules/langium/lib/parser/completion-parser-builder.js","../node_modules/langium/lib/parser/langium-parser-builder.js","../node_modules/langium/lib/parser/token-builder.js","../node_modules/langium/lib/parser/value-converter.js","../node_modules/vscode-jsonrpc/lib/common/ral.js","../node_modules/vscode-jsonrpc/lib/common/is.js","../node_modules/vscode-jsonrpc/lib/common/events.js","../node_modules/vscode-jsonrpc/lib/common/cancellation.js","../node_modules/langium/lib/utils/promise-utils.js","../node_modules/vscode-languageserver-textdocument/lib/esm/main.js","../node_modules/vscode-uri/lib/esm/index.mjs","../node_modules/langium/lib/utils/uri-utils.js","../node_modules/langium/lib/workspace/documents.js","../node_modules/langium/lib/references/linker.js","../node_modules/langium/lib/references/name-provider.js","../node_modules/langium/lib/references/references.js","../node_modules/langium/lib/utils/collections.js","../node_modules/langium/lib/references/scope-computation.js","../node_modules/langium/lib/references/scope.js","../node_modules/langium/lib/utils/caching.js","../node_modules/langium/lib/references/scope-provider.js","../node_modules/langium/lib/serializer/json-serializer.js","../node_modules/langium/lib/service-registry.js","../node_modules/langium/lib/validation/validation-registry.js","../node_modules/langium/lib/validation/document-validator.js","../node_modules/langium/lib/workspace/ast-descriptions.js","../node_modules/langium/lib/workspace/ast-node-locator.js","../node_modules/langium/lib/workspace/configuration.js","../node_modules/langium/lib/utils/disposable.js","../node_modules/langium/lib/workspace/document-builder.js","../node_modules/langium/lib/workspace/index-manager.js","../node_modules/langium/lib/workspace/workspace-manager.js","../node_modules/langium/lib/parser/lexer.js","../node_modules/langium/lib/documentation/jsdoc.js","../node_modules/langium/lib/documentation/documentation-provider.js","../node_modules/langium/lib/documentation/comment-provider.js","../node_modules/langium/lib/parser/async-parser.js","../node_modules/langium/lib/workspace/workspace-lock.js","../node_modules/langium/lib/serializer/hydrator.js","../node_modules/langium/lib/default-module.js","../node_modules/langium/lib/dependency-injection.js","../node_modules/langium/lib/workspace/file-system-provider.js","../node_modules/langium/lib/utils/grammar-loader.js","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-FPAJGGOC.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-S6J4BHB3.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-LBM3YZW2.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-76Q3JFCE.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-T53DSG4Q.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-O7ZBX7Z2.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-LHMN2FUI.mjs","../node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-FWNWRKHM.mjs","../node_modules/@mermaid-js/parser/dist/mermaid-parser.core.mjs"],"sourcesContent":["import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\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\nexport default flatMap;\n","import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport function isAstNode(obj) {\n    return typeof obj === 'object' && obj !== null && typeof obj.$type === 'string';\n}\nexport function isReference(obj) {\n    return typeof obj === 'object' && obj !== null && typeof obj.$refText === 'string';\n}\nexport function isAstNodeDescription(obj) {\n    return typeof obj === 'object' && obj !== null\n        && typeof obj.name === 'string'\n        && typeof obj.type === 'string'\n        && typeof obj.path === 'string';\n}\nexport function isLinkingError(obj) {\n    return typeof obj === 'object' && obj !== null\n        && isAstNode(obj.container)\n        && isReference(obj.reference)\n        && typeof obj.message === 'string';\n}\n/**\n * An abstract implementation of the {@link AstReflection} interface.\n * Serves to cache subtype computation results to improve performance throughout different parts of Langium.\n */\nexport class AbstractAstReflection {\n    constructor() {\n        this.subtypes = {};\n        this.allSubtypes = {};\n    }\n    isInstance(node, type) {\n        return isAstNode(node) && this.isSubtype(node.$type, type);\n    }\n    isSubtype(subtype, supertype) {\n        if (subtype === supertype) {\n            return true;\n        }\n        let nested = this.subtypes[subtype];\n        if (!nested) {\n            nested = this.subtypes[subtype] = {};\n        }\n        const existing = nested[supertype];\n        if (existing !== undefined) {\n            return existing;\n        }\n        else {\n            const result = this.computeIsSubtype(subtype, supertype);\n            nested[supertype] = result;\n            return result;\n        }\n    }\n    getAllSubTypes(type) {\n        const existing = this.allSubtypes[type];\n        if (existing) {\n            return existing;\n        }\n        else {\n            const allTypes = this.getAllTypes();\n            const types = [];\n            for (const possibleSubType of allTypes) {\n                if (this.isSubtype(possibleSubType, type)) {\n                    types.push(possibleSubType);\n                }\n            }\n            this.allSubtypes[type] = types;\n            return types;\n        }\n    }\n}\nexport function isCompositeCstNode(node) {\n    return typeof node === 'object' && node !== null && Array.isArray(node.content);\n}\nexport function isLeafCstNode(node) {\n    return typeof node === 'object' && node !== null && typeof node.tokenType === 'object';\n}\nexport function isRootCstNode(node) {\n    return isCompositeCstNode(node) && typeof node.fullText === 'string';\n}\n//# sourceMappingURL=syntax-tree.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\n/**\n * The default implementation of `Stream` works with two input functions:\n *  - The first function creates the initial state of an iteration.\n *  - The second function gets the current state as argument and returns an `IteratorResult`.\n */\nexport class StreamImpl {\n    constructor(startFn, nextFn) {\n        this.startFn = startFn;\n        this.nextFn = nextFn;\n    }\n    iterator() {\n        const iterator = {\n            state: this.startFn(),\n            next: () => this.nextFn(iterator.state),\n            [Symbol.iterator]: () => iterator\n        };\n        return iterator;\n    }\n    [Symbol.iterator]() {\n        return this.iterator();\n    }\n    isEmpty() {\n        const iterator = this.iterator();\n        return Boolean(iterator.next().done);\n    }\n    count() {\n        const iterator = this.iterator();\n        let count = 0;\n        let next = iterator.next();\n        while (!next.done) {\n            count++;\n            next = iterator.next();\n        }\n        return count;\n    }\n    toArray() {\n        const result = [];\n        const iterator = this.iterator();\n        let next;\n        do {\n            next = iterator.next();\n            if (next.value !== undefined) {\n                result.push(next.value);\n            }\n        } while (!next.done);\n        return result;\n    }\n    toSet() {\n        return new Set(this);\n    }\n    toMap(keyFn, valueFn) {\n        const entryStream = this.map(element => [\n            keyFn ? keyFn(element) : element,\n            valueFn ? valueFn(element) : element\n        ]);\n        return new Map(entryStream);\n    }\n    toString() {\n        return this.join();\n    }\n    concat(other) {\n        return new StreamImpl(() => ({ first: this.startFn(), firstDone: false, iterator: other[Symbol.iterator]() }), state => {\n            let result;\n            if (!state.firstDone) {\n                do {\n                    result = this.nextFn(state.first);\n                    if (!result.done) {\n                        return result;\n                    }\n                } while (!result.done);\n                state.firstDone = true;\n            }\n            do {\n                result = state.iterator.next();\n                if (!result.done) {\n                    return result;\n                }\n            } while (!result.done);\n            return DONE_RESULT;\n        });\n    }\n    join(separator = ',') {\n        const iterator = this.iterator();\n        let value = '';\n        let result;\n        let addSeparator = false;\n        do {\n            result = iterator.next();\n            if (!result.done) {\n                if (addSeparator) {\n                    value += separator;\n                }\n                value += toString(result.value);\n            }\n            addSeparator = true;\n        } while (!result.done);\n        return value;\n    }\n    indexOf(searchElement, fromIndex = 0) {\n        const iterator = this.iterator();\n        let index = 0;\n        let next = iterator.next();\n        while (!next.done) {\n            if (index >= fromIndex && next.value === searchElement) {\n                return index;\n            }\n            next = iterator.next();\n            index++;\n        }\n        return -1;\n    }\n    every(predicate) {\n        const iterator = this.iterator();\n        let next = iterator.next();\n        while (!next.done) {\n            if (!predicate(next.value)) {\n                return false;\n            }\n            next = iterator.next();\n        }\n        return true;\n    }\n    some(predicate) {\n        const iterator = this.iterator();\n        let next = iterator.next();\n        while (!next.done) {\n            if (predicate(next.value)) {\n                return true;\n            }\n            next = iterator.next();\n        }\n        return false;\n    }\n    forEach(callbackfn) {\n        const iterator = this.iterator();\n        let index = 0;\n        let next = iterator.next();\n        while (!next.done) {\n            callbackfn(next.value, index);\n            next = iterator.next();\n            index++;\n        }\n    }\n    map(callbackfn) {\n        return new StreamImpl(this.startFn, (state) => {\n            const { done, value } = this.nextFn(state);\n            if (done) {\n                return DONE_RESULT;\n            }\n            else {\n                return { done: false, value: callbackfn(value) };\n            }\n        });\n    }\n    filter(predicate) {\n        return new StreamImpl(this.startFn, state => {\n            let result;\n            do {\n                result = this.nextFn(state);\n                if (!result.done && predicate(result.value)) {\n                    return result;\n                }\n            } while (!result.done);\n            return DONE_RESULT;\n        });\n    }\n    nonNullable() {\n        return this.filter(e => e !== undefined && e !== null);\n    }\n    reduce(callbackfn, initialValue) {\n        const iterator = this.iterator();\n        let previousValue = initialValue;\n        let next = iterator.next();\n        while (!next.done) {\n            if (previousValue === undefined) {\n                previousValue = next.value;\n            }\n            else {\n                previousValue = callbackfn(previousValue, next.value);\n            }\n            next = iterator.next();\n        }\n        return previousValue;\n    }\n    reduceRight(callbackfn, initialValue) {\n        return this.recursiveReduce(this.iterator(), callbackfn, initialValue);\n    }\n    recursiveReduce(iterator, callbackfn, initialValue) {\n        const next = iterator.next();\n        if (next.done) {\n            return initialValue;\n        }\n        const previousValue = this.recursiveReduce(iterator, callbackfn, initialValue);\n        if (previousValue === undefined) {\n            return next.value;\n        }\n        return callbackfn(previousValue, next.value);\n    }\n    find(predicate) {\n        const iterator = this.iterator();\n        let next = iterator.next();\n        while (!next.done) {\n            if (predicate(next.value)) {\n                return next.value;\n            }\n            next = iterator.next();\n        }\n        return undefined;\n    }\n    findIndex(predicate) {\n        const iterator = this.iterator();\n        let index = 0;\n        let next = iterator.next();\n        while (!next.done) {\n            if (predicate(next.value)) {\n                return index;\n            }\n            next = iterator.next();\n            index++;\n        }\n        return -1;\n    }\n    includes(searchElement) {\n        const iterator = this.iterator();\n        let next = iterator.next();\n        while (!next.done) {\n            if (next.value === searchElement) {\n                return true;\n            }\n            next = iterator.next();\n        }\n        return false;\n    }\n    flatMap(callbackfn) {\n        return new StreamImpl(() => ({ this: this.startFn() }), (state) => {\n            do {\n                if (state.iterator) {\n                    const next = state.iterator.next();\n                    if (next.done) {\n                        state.iterator = undefined;\n                    }\n                    else {\n                        return next;\n                    }\n                }\n                const { done, value } = this.nextFn(state.this);\n                if (!done) {\n                    const mapped = callbackfn(value);\n                    if (isIterable(mapped)) {\n                        state.iterator = mapped[Symbol.iterator]();\n                    }\n                    else {\n                        return { done: false, value: mapped };\n                    }\n                }\n            } while (state.iterator);\n            return DONE_RESULT;\n        });\n    }\n    flat(depth) {\n        if (depth === undefined) {\n            depth = 1;\n        }\n        if (depth <= 0) {\n            return this;\n        }\n        const stream = depth > 1 ? this.flat(depth - 1) : this;\n        return new StreamImpl(() => ({ this: stream.startFn() }), (state) => {\n            do {\n                if (state.iterator) {\n                    const next = state.iterator.next();\n                    if (next.done) {\n                        state.iterator = undefined;\n                    }\n                    else {\n                        return next;\n                    }\n                }\n                const { done, value } = stream.nextFn(state.this);\n                if (!done) {\n                    if (isIterable(value)) {\n                        state.iterator = value[Symbol.iterator]();\n                    }\n                    else {\n                        return { done: false, value: value };\n                    }\n                }\n            } while (state.iterator);\n            return DONE_RESULT;\n        });\n    }\n    head() {\n        const iterator = this.iterator();\n        const result = iterator.next();\n        if (result.done) {\n            return undefined;\n        }\n        return result.value;\n    }\n    tail(skipCount = 1) {\n        return new StreamImpl(() => {\n            const state = this.startFn();\n            for (let i = 0; i < skipCount; i++) {\n                const next = this.nextFn(state);\n                if (next.done) {\n                    return state;\n                }\n            }\n            return state;\n        }, this.nextFn);\n    }\n    limit(maxSize) {\n        return new StreamImpl(() => ({ size: 0, state: this.startFn() }), state => {\n            state.size++;\n            if (state.size > maxSize) {\n                return DONE_RESULT;\n            }\n            return this.nextFn(state.state);\n        });\n    }\n    distinct(by) {\n        return new StreamImpl(() => ({ set: new Set(), internalState: this.startFn() }), state => {\n            let result;\n            do {\n                result = this.nextFn(state.internalState);\n                if (!result.done) {\n                    const value = by ? by(result.value) : result.value;\n                    if (!state.set.has(value)) {\n                        state.set.add(value);\n                        return result;\n                    }\n                }\n            } while (!result.done);\n            return DONE_RESULT;\n        });\n    }\n    exclude(other, key) {\n        const otherKeySet = new Set();\n        for (const item of other) {\n            const value = key ? key(item) : item;\n            otherKeySet.add(value);\n        }\n        return this.filter(e => {\n            const ownKey = key ? key(e) : e;\n            return !otherKeySet.has(ownKey);\n        });\n    }\n}\nfunction toString(item) {\n    if (typeof item === 'string') {\n        return item;\n    }\n    if (typeof item === 'undefined') {\n        return 'undefined';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if (typeof item.toString === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return item.toString();\n    }\n    return Object.prototype.toString.call(item);\n}\nfunction isIterable(obj) {\n    return !!obj && typeof obj[Symbol.iterator] === 'function';\n}\n/**\n * An empty stream of any type.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const EMPTY_STREAM = new StreamImpl(() => undefined, () => DONE_RESULT);\n/**\n * Use this `IteratorResult` when implementing a `StreamImpl` to indicate that there are no more elements in the stream.\n */\nexport const DONE_RESULT = Object.freeze({ done: true, value: undefined });\n/**\n * Create a stream from one or more iterables or array-likes.\n */\nexport function stream(...collections) {\n    if (collections.length === 1) {\n        const collection = collections[0];\n        if (collection instanceof StreamImpl) {\n            return collection;\n        }\n        if (isIterable(collection)) {\n            return new StreamImpl(() => collection[Symbol.iterator](), (iterator) => iterator.next());\n        }\n        if (typeof collection.length === 'number') {\n            return new StreamImpl(() => ({ index: 0 }), (state) => {\n                if (state.index < collection.length) {\n                    return { done: false, value: collection[state.index++] };\n                }\n                else {\n                    return DONE_RESULT;\n                }\n            });\n        }\n    }\n    if (collections.length > 1) {\n        return new StreamImpl(() => ({ collIndex: 0, arrIndex: 0 }), (state) => {\n            do {\n                if (state.iterator) {\n                    const next = state.iterator.next();\n                    if (!next.done) {\n                        return next;\n                    }\n                    state.iterator = undefined;\n                }\n                if (state.array) {\n                    if (state.arrIndex < state.array.length) {\n                        return { done: false, value: state.array[state.arrIndex++] };\n                    }\n                    state.array = undefined;\n                    state.arrIndex = 0;\n                }\n                if (state.collIndex < collections.length) {\n                    const collection = collections[state.collIndex++];\n                    if (isIterable(collection)) {\n                        state.iterator = collection[Symbol.iterator]();\n                    }\n                    else if (collection && typeof collection.length === 'number') {\n                        state.array = collection;\n                    }\n                }\n            } while (state.iterator || state.array || state.collIndex < collections.length);\n            return DONE_RESULT;\n        });\n    }\n    return EMPTY_STREAM;\n}\n/**\n * The default implementation of `TreeStream` takes a root element and a function that computes the\n * children of its argument. Whether the root node included in the stream is controlled with the\n * `includeRoot` option, which defaults to `false`.\n */\nexport class TreeStreamImpl extends StreamImpl {\n    constructor(root, children, options) {\n        super(() => ({\n            iterators: (options === null || options === void 0 ? void 0 : options.includeRoot) ? [[root][Symbol.iterator]()] : [children(root)[Symbol.iterator]()],\n            pruned: false\n        }), state => {\n            if (state.pruned) {\n                state.iterators.pop();\n                state.pruned = false;\n            }\n            while (state.iterators.length > 0) {\n                const iterator = state.iterators[state.iterators.length - 1];\n                const next = iterator.next();\n                if (next.done) {\n                    state.iterators.pop();\n                }\n                else {\n                    state.iterators.push(children(next.value)[Symbol.iterator]());\n                    return next;\n                }\n            }\n            return DONE_RESULT;\n        });\n    }\n    iterator() {\n        const iterator = {\n            state: this.startFn(),\n            next: () => this.nextFn(iterator.state),\n            prune: () => {\n                iterator.state.pruned = true;\n            },\n            [Symbol.iterator]: () => iterator\n        };\n        return iterator;\n    }\n}\n/**\n * A set of utility functions that reduce a stream to a single value.\n */\nexport var Reduction;\n(function (Reduction) {\n    /**\n     * Compute the sum of a number stream.\n     */\n    function sum(stream) {\n        return stream.reduce((a, b) => a + b, 0);\n    }\n    Reduction.sum = sum;\n    /**\n     * Compute the product of a number stream.\n     */\n    function product(stream) {\n        return stream.reduce((a, b) => a * b, 0);\n    }\n    Reduction.product = product;\n    /**\n     * Compute the minimum of a number stream. Returns `undefined` if the stream is empty.\n     */\n    function min(stream) {\n        return stream.reduce((a, b) => Math.min(a, b));\n    }\n    Reduction.min = min;\n    /**\n     * Compute the maximum of a number stream. Returns `undefined` if the stream is empty.\n     */\n    function max(stream) {\n        return stream.reduce((a, b) => Math.max(a, b));\n    }\n    Reduction.max = max;\n})(Reduction || (Reduction = {}));\n//# sourceMappingURL=stream.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { isCompositeCstNode, isLeafCstNode, isRootCstNode } from '../syntax-tree.js';\nimport { TreeStreamImpl } from './stream.js';\n/**\n * Create a stream of all CST nodes that are directly and indirectly contained in the given root node,\n * including the root node itself.\n */\nexport function streamCst(node) {\n    return new TreeStreamImpl(node, element => {\n        if (isCompositeCstNode(element)) {\n            return element.content;\n        }\n        else {\n            return [];\n        }\n    }, { includeRoot: true });\n}\n/**\n * Create a stream of all leaf nodes that are directly and indirectly contained in the given root node.\n */\nexport function flattenCst(node) {\n    return streamCst(node).filter(isLeafCstNode);\n}\n/**\n * Determines whether the specified cst node is a child of the specified parent node.\n */\nexport function isChildNode(child, parent) {\n    while (child.container) {\n        child = child.container;\n        if (child === parent) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function tokenToRange(token) {\n    // Chevrotain uses 1-based indices everywhere\n    // So we subtract 1 from every value to align with the LSP\n    return {\n        start: {\n            character: token.startColumn - 1,\n            line: token.startLine - 1\n        },\n        end: {\n            character: token.endColumn, // endColumn uses the correct index\n            line: token.endLine - 1\n        }\n    };\n}\nexport function toDocumentSegment(node) {\n    if (!node) {\n        return undefined;\n    }\n    const { offset, end, range } = node;\n    return {\n        range,\n        offset,\n        end,\n        length: end - offset\n    };\n}\nexport var RangeComparison;\n(function (RangeComparison) {\n    RangeComparison[RangeComparison[\"Before\"] = 0] = \"Before\";\n    RangeComparison[RangeComparison[\"After\"] = 1] = \"After\";\n    RangeComparison[RangeComparison[\"OverlapFront\"] = 2] = \"OverlapFront\";\n    RangeComparison[RangeComparison[\"OverlapBack\"] = 3] = \"OverlapBack\";\n    RangeComparison[RangeComparison[\"Inside\"] = 4] = \"Inside\";\n    RangeComparison[RangeComparison[\"Outside\"] = 5] = \"Outside\";\n})(RangeComparison || (RangeComparison = {}));\nexport function compareRange(range, to) {\n    if (range.end.line < to.start.line || (range.end.line === to.start.line && range.end.character <= to.start.character)) {\n        return RangeComparison.Before;\n    }\n    else if (range.start.line > to.end.line || (range.start.line === to.end.line && range.start.character >= to.end.character)) {\n        return RangeComparison.After;\n    }\n    const startInside = range.start.line > to.start.line || (range.start.line === to.start.line && range.start.character >= to.start.character);\n    const endInside = range.end.line < to.end.line || (range.end.line === to.end.line && range.end.character <= to.end.character);\n    if (startInside && endInside) {\n        return RangeComparison.Inside;\n    }\n    else if (startInside) {\n        return RangeComparison.OverlapBack;\n    }\n    else if (endInside) {\n        return RangeComparison.OverlapFront;\n    }\n    else {\n        return RangeComparison.Outside;\n    }\n}\nexport function inRange(range, to) {\n    const comparison = compareRange(range, to);\n    return comparison > RangeComparison.After;\n}\n// The \\p{L} regex matches any unicode letter character, i.e. characters from non-english alphabets\n// Together with \\w it matches any kind of character which can commonly appear in IDs\nexport const DefaultNameRegexp = /^[\\w\\p{L}]$/u;\n/**\n * Performs `findLeafNodeAtOffset` with a minor difference: When encountering a character that matches the `nameRegexp` argument,\n * it will instead return the leaf node at the `offset - 1` position.\n *\n * For LSP services, users expect that the declaration of an element is available if the cursor is directly after the element.\n */\nexport function findDeclarationNodeAtOffset(cstNode, offset, nameRegexp = DefaultNameRegexp) {\n    if (cstNode) {\n        if (offset > 0) {\n            const localOffset = offset - cstNode.offset;\n            const textAtOffset = cstNode.text.charAt(localOffset);\n            if (!nameRegexp.test(textAtOffset)) {\n                offset--;\n            }\n        }\n        return findLeafNodeAtOffset(cstNode, offset);\n    }\n    return undefined;\n}\nexport function findCommentNode(cstNode, commentNames) {\n    if (cstNode) {\n        const previous = getPreviousNode(cstNode, true);\n        if (previous && isCommentNode(previous, commentNames)) {\n            return previous;\n        }\n        if (isRootCstNode(cstNode)) {\n            // Go from the first non-hidden node through all nodes in reverse order\n            // We do this to find the comment node which directly precedes the root node\n            const endIndex = cstNode.content.findIndex(e => !e.hidden);\n            for (let i = endIndex - 1; i >= 0; i--) {\n                const child = cstNode.content[i];\n                if (isCommentNode(child, commentNames)) {\n                    return child;\n                }\n            }\n        }\n    }\n    return undefined;\n}\nexport function isCommentNode(cstNode, commentNames) {\n    return isLeafCstNode(cstNode) && commentNames.includes(cstNode.tokenType.name);\n}\n/**\n * Finds the leaf CST node at the specified 0-based string offset.\n * Note that the given offset will be within the range of the returned leaf node.\n *\n * If the offset does not point to a CST node (but just white space), this method will return `undefined`.\n *\n * @param node The CST node to search through.\n * @param offset The specified offset.\n * @returns The CST node at the specified offset.\n */\nexport function findLeafNodeAtOffset(node, offset) {\n    if (isLeafCstNode(node)) {\n        return node;\n    }\n    else if (isCompositeCstNode(node)) {\n        const searchResult = binarySearch(node, offset, false);\n        if (searchResult) {\n            return findLeafNodeAtOffset(searchResult, offset);\n        }\n    }\n    return undefined;\n}\n/**\n * Finds the leaf CST node at the specified 0-based string offset.\n * If no CST node exists at the specified position, it will return the leaf node before it.\n *\n * If there is no leaf node before the specified offset, this method will return `undefined`.\n *\n * @param node The CST node to search through.\n * @param offset The specified offset.\n * @returns The CST node closest to the specified offset.\n */\nexport function findLeafNodeBeforeOffset(node, offset) {\n    if (isLeafCstNode(node)) {\n        return node;\n    }\n    else if (isCompositeCstNode(node)) {\n        const searchResult = binarySearch(node, offset, true);\n        if (searchResult) {\n            return findLeafNodeBeforeOffset(searchResult, offset);\n        }\n    }\n    return undefined;\n}\nfunction binarySearch(node, offset, closest) {\n    let left = 0;\n    let right = node.content.length - 1;\n    let closestNode = undefined;\n    while (left <= right) {\n        const middle = Math.floor((left + right) / 2);\n        const middleNode = node.content[middle];\n        if (middleNode.offset <= offset && middleNode.end > offset) {\n            // Found an exact match\n            return middleNode;\n        }\n        if (middleNode.end <= offset) {\n            // Update the closest node (less than offset) and move to the right half\n            closestNode = closest ? middleNode : undefined;\n            left = middle + 1;\n        }\n        else {\n            // Move to the left half\n            right = middle - 1;\n        }\n    }\n    return closestNode;\n}\nexport function getPreviousNode(node, hidden = true) {\n    while (node.container) {\n        const parent = node.container;\n        let index = parent.content.indexOf(node);\n        while (index > 0) {\n            index--;\n            const previous = parent.content[index];\n            if (hidden || !previous.hidden) {\n                return previous;\n            }\n        }\n        node = parent;\n    }\n    return undefined;\n}\nexport function getNextNode(node, hidden = true) {\n    while (node.container) {\n        const parent = node.container;\n        let index = parent.content.indexOf(node);\n        const last = parent.content.length - 1;\n        while (index < last) {\n            index++;\n            const next = parent.content[index];\n            if (hidden || !next.hidden) {\n                return next;\n            }\n        }\n        node = parent;\n    }\n    return undefined;\n}\nexport function getStartlineNode(node) {\n    if (node.range.start.character === 0) {\n        return node;\n    }\n    const line = node.range.start.line;\n    let last = node;\n    let index;\n    while (node.container) {\n        const parent = node.container;\n        const selfIndex = index !== null && index !== void 0 ? index : parent.content.indexOf(node);\n        if (selfIndex === 0) {\n            node = parent;\n            index = undefined;\n        }\n        else {\n            index = selfIndex - 1;\n            node = parent.content[index];\n        }\n        if (node.range.start.line !== line) {\n            break;\n        }\n        last = node;\n    }\n    return last;\n}\nexport function getInteriorNodes(start, end) {\n    const commonParent = getCommonParent(start, end);\n    if (!commonParent) {\n        return [];\n    }\n    return commonParent.parent.content.slice(commonParent.a + 1, commonParent.b);\n}\nfunction getCommonParent(a, b) {\n    const aParents = getParentChain(a);\n    const bParents = getParentChain(b);\n    let current;\n    for (let i = 0; i < aParents.length && i < bParents.length; i++) {\n        const aParent = aParents[i];\n        const bParent = bParents[i];\n        if (aParent.parent === bParent.parent) {\n            current = {\n                parent: aParent.parent,\n                a: aParent.index,\n                b: bParent.index\n            };\n        }\n        else {\n            break;\n        }\n    }\n    return current;\n}\nfunction getParentChain(node) {\n    const chain = [];\n    while (node.container) {\n        const parent = node.container;\n        const index = parent.content.indexOf(node);\n        chain.push({\n            parent,\n            index\n        });\n        node = parent;\n    }\n    return chain.reverse();\n}\n//# sourceMappingURL=cst-utils.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport class ErrorWithLocation extends Error {\n    constructor(node, message) {\n        super(node ? `${message} at ${node.range.start.line}:${node.range.start.character}` : message);\n    }\n}\nexport function assertUnreachable(_) {\n    throw new Error('Error! The input value was not handled.');\n}\n//# sourceMappingURL=errors.js.map","/******************************************************************************\n * This file was generated by langium-cli 3.3.0.\n * DO NOT EDIT MANUALLY!\n ******************************************************************************/\nimport { AbstractAstReflection } from '../../syntax-tree.js';\nexport const LangiumGrammarTerminals = {\n    ID: /\\^?[_a-zA-Z][\\w_]*/,\n    STRING: /\"(\\\\.|[^\"\\\\])*\"|'(\\\\.|[^'\\\\])*'/,\n    NUMBER: /NaN|-?((\\d*\\.\\d+|\\d+)([Ee][+-]?\\d+)?|Infinity)/,\n    RegexLiteral: /\\/(?![*+?])(?:[^\\r\\n\\[/\\\\]|\\\\.|\\[(?:[^\\r\\n\\]\\\\]|\\\\.)*\\])+\\/[a-z]*/,\n    WS: /\\s+/,\n    ML_COMMENT: /\\/\\*[\\s\\S]*?\\*\\//,\n    SL_COMMENT: /\\/\\/[^\\n\\r]*/,\n};\nexport const AbstractRule = 'AbstractRule';\nexport function isAbstractRule(item) {\n    return reflection.isInstance(item, AbstractRule);\n}\nexport const AbstractType = 'AbstractType';\nexport function isAbstractType(item) {\n    return reflection.isInstance(item, AbstractType);\n}\nexport const Condition = 'Condition';\nexport function isCondition(item) {\n    return reflection.isInstance(item, Condition);\n}\nexport function isFeatureName(item) {\n    return isPrimitiveType(item) || item === 'current' || item === 'entry' || item === 'extends' || item === 'false' || item === 'fragment' || item === 'grammar' || item === 'hidden' || item === 'import' || item === 'interface' || item === 'returns' || item === 'terminal' || item === 'true' || item === 'type' || item === 'infer' || item === 'infers' || item === 'with' || (typeof item === 'string' && (/\\^?[_a-zA-Z][\\w_]*/.test(item)));\n}\nexport function isPrimitiveType(item) {\n    return item === 'string' || item === 'number' || item === 'boolean' || item === 'Date' || item === 'bigint';\n}\nexport const TypeDefinition = 'TypeDefinition';\nexport function isTypeDefinition(item) {\n    return reflection.isInstance(item, TypeDefinition);\n}\nexport const ValueLiteral = 'ValueLiteral';\nexport function isValueLiteral(item) {\n    return reflection.isInstance(item, ValueLiteral);\n}\nexport const AbstractElement = 'AbstractElement';\nexport function isAbstractElement(item) {\n    return reflection.isInstance(item, AbstractElement);\n}\nexport const ArrayLiteral = 'ArrayLiteral';\nexport function isArrayLiteral(item) {\n    return reflection.isInstance(item, ArrayLiteral);\n}\nexport const ArrayType = 'ArrayType';\nexport function isArrayType(item) {\n    return reflection.isInstance(item, ArrayType);\n}\nexport const BooleanLiteral = 'BooleanLiteral';\nexport function isBooleanLiteral(item) {\n    return reflection.isInstance(item, BooleanLiteral);\n}\nexport const Conjunction = 'Conjunction';\nexport function isConjunction(item) {\n    return reflection.isInstance(item, Conjunction);\n}\nexport const Disjunction = 'Disjunction';\nexport function isDisjunction(item) {\n    return reflection.isInstance(item, Disjunction);\n}\nexport const Grammar = 'Grammar';\nexport function isGrammar(item) {\n    return reflection.isInstance(item, Grammar);\n}\nexport const GrammarImport = 'GrammarImport';\nexport function isGrammarImport(item) {\n    return reflection.isInstance(item, GrammarImport);\n}\nexport const InferredType = 'InferredType';\nexport function isInferredType(item) {\n    return reflection.isInstance(item, InferredType);\n}\nexport const Interface = 'Interface';\nexport function isInterface(item) {\n    return reflection.isInstance(item, Interface);\n}\nexport const NamedArgument = 'NamedArgument';\nexport function isNamedArgument(item) {\n    return reflection.isInstance(item, NamedArgument);\n}\nexport const Negation = 'Negation';\nexport function isNegation(item) {\n    return reflection.isInstance(item, Negation);\n}\nexport const NumberLiteral = 'NumberLiteral';\nexport function isNumberLiteral(item) {\n    return reflection.isInstance(item, NumberLiteral);\n}\nexport const Parameter = 'Parameter';\nexport function isParameter(item) {\n    return reflection.isInstance(item, Parameter);\n}\nexport const ParameterReference = 'ParameterReference';\nexport function isParameterReference(item) {\n    return reflection.isInstance(item, ParameterReference);\n}\nexport const ParserRule = 'ParserRule';\nexport function isParserRule(item) {\n    return reflection.isInstance(item, ParserRule);\n}\nexport const ReferenceType = 'ReferenceType';\nexport function isReferenceType(item) {\n    return reflection.isInstance(item, ReferenceType);\n}\nexport const ReturnType = 'ReturnType';\nexport function isReturnType(item) {\n    return reflection.isInstance(item, ReturnType);\n}\nexport const SimpleType = 'SimpleType';\nexport function isSimpleType(item) {\n    return reflection.isInstance(item, SimpleType);\n}\nexport const StringLiteral = 'StringLiteral';\nexport function isStringLiteral(item) {\n    return reflection.isInstance(item, StringLiteral);\n}\nexport const TerminalRule = 'TerminalRule';\nexport function isTerminalRule(item) {\n    return reflection.isInstance(item, TerminalRule);\n}\nexport const Type = 'Type';\nexport function isType(item) {\n    return reflection.isInstance(item, Type);\n}\nexport const TypeAttribute = 'TypeAttribute';\nexport function isTypeAttribute(item) {\n    return reflection.isInstance(item, TypeAttribute);\n}\nexport const UnionType = 'UnionType';\nexport function isUnionType(item) {\n    return reflection.isInstance(item, UnionType);\n}\nexport const Action = 'Action';\nexport function isAction(item) {\n    return reflection.isInstance(item, Action);\n}\nexport const Alternatives = 'Alternatives';\nexport function isAlternatives(item) {\n    return reflection.isInstance(item, Alternatives);\n}\nexport const Assignment = 'Assignment';\nexport function isAssignment(item) {\n    return reflection.isInstance(item, Assignment);\n}\nexport const CharacterRange = 'CharacterRange';\nexport function isCharacterRange(item) {\n    return reflection.isInstance(item, CharacterRange);\n}\nexport const CrossReference = 'CrossReference';\nexport function isCrossReference(item) {\n    return reflection.isInstance(item, CrossReference);\n}\nexport const EndOfFile = 'EndOfFile';\nexport function isEndOfFile(item) {\n    return reflection.isInstance(item, EndOfFile);\n}\nexport const Group = 'Group';\nexport function isGroup(item) {\n    return reflection.isInstance(item, Group);\n}\nexport const Keyword = 'Keyword';\nexport function isKeyword(item) {\n    return reflection.isInstance(item, Keyword);\n}\nexport const NegatedToken = 'NegatedToken';\nexport function isNegatedToken(item) {\n    return reflection.isInstance(item, NegatedToken);\n}\nexport const RegexToken = 'RegexToken';\nexport function isRegexToken(item) {\n    return reflection.isInstance(item, RegexToken);\n}\nexport const RuleCall = 'RuleCall';\nexport function isRuleCall(item) {\n    return reflection.isInstance(item, RuleCall);\n}\nexport const TerminalAlternatives = 'TerminalAlternatives';\nexport function isTerminalAlternatives(item) {\n    return reflection.isInstance(item, TerminalAlternatives);\n}\nexport const TerminalGroup = 'TerminalGroup';\nexport function isTerminalGroup(item) {\n    return reflection.isInstance(item, TerminalGroup);\n}\nexport const TerminalRuleCall = 'TerminalRuleCall';\nexport function isTerminalRuleCall(item) {\n    return reflection.isInstance(item, TerminalRuleCall);\n}\nexport const UnorderedGroup = 'UnorderedGroup';\nexport function isUnorderedGroup(item) {\n    return reflection.isInstance(item, UnorderedGroup);\n}\nexport const UntilToken = 'UntilToken';\nexport function isUntilToken(item) {\n    return reflection.isInstance(item, UntilToken);\n}\nexport const Wildcard = 'Wildcard';\nexport function isWildcard(item) {\n    return reflection.isInstance(item, Wildcard);\n}\nexport class LangiumGrammarAstReflection extends AbstractAstReflection {\n    getAllTypes() {\n        return [AbstractElement, AbstractRule, AbstractType, Action, Alternatives, ArrayLiteral, ArrayType, Assignment, BooleanLiteral, CharacterRange, Condition, Conjunction, CrossReference, Disjunction, EndOfFile, Grammar, GrammarImport, Group, InferredType, Interface, Keyword, NamedArgument, NegatedToken, Negation, NumberLiteral, Parameter, ParameterReference, ParserRule, ReferenceType, RegexToken, ReturnType, RuleCall, SimpleType, StringLiteral, TerminalAlternatives, TerminalGroup, TerminalRule, TerminalRuleCall, Type, TypeAttribute, TypeDefinition, UnionType, UnorderedGroup, UntilToken, ValueLiteral, Wildcard];\n    }\n    computeIsSubtype(subtype, supertype) {\n        switch (subtype) {\n            case Action:\n            case Alternatives:\n            case Assignment:\n            case CharacterRange:\n            case CrossReference:\n            case EndOfFile:\n            case Group:\n            case Keyword:\n            case NegatedToken:\n            case RegexToken:\n            case RuleCall:\n            case TerminalAlternatives:\n            case TerminalGroup:\n            case TerminalRuleCall:\n            case UnorderedGroup:\n            case UntilToken:\n            case Wildcard: {\n                return this.isSubtype(AbstractElement, supertype);\n            }\n            case ArrayLiteral:\n            case NumberLiteral:\n            case StringLiteral: {\n                return this.isSubtype(ValueLiteral, supertype);\n            }\n            case ArrayType:\n            case ReferenceType:\n            case SimpleType:\n            case UnionType: {\n                return this.isSubtype(TypeDefinition, supertype);\n            }\n            case BooleanLiteral: {\n                return this.isSubtype(Condition, supertype) || this.isSubtype(ValueLiteral, supertype);\n            }\n            case Conjunction:\n            case Disjunction:\n            case Negation:\n            case ParameterReference: {\n                return this.isSubtype(Condition, supertype);\n            }\n            case InferredType:\n            case Interface:\n            case Type: {\n                return this.isSubtype(AbstractType, supertype);\n            }\n            case ParserRule: {\n                return this.isSubtype(AbstractRule, supertype) || this.isSubtype(AbstractType, supertype);\n            }\n            case TerminalRule: {\n                return this.isSubtype(AbstractRule, supertype);\n            }\n            default: {\n                return false;\n            }\n        }\n    }\n    getReferenceType(refInfo) {\n        const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\n        switch (referenceId) {\n            case 'Action:type':\n            case 'CrossReference:type':\n            case 'Interface:superTypes':\n            case 'ParserRule:returnType':\n            case 'SimpleType:typeRef': {\n                return AbstractType;\n            }\n            case 'Grammar:hiddenTokens':\n            case 'ParserRule:hiddenTokens':\n            case 'RuleCall:rule': {\n                return AbstractRule;\n            }\n            case 'Grammar:usedGrammars': {\n                return Grammar;\n            }\n            case 'NamedArgument:parameter':\n            case 'ParameterReference:parameter': {\n                return Parameter;\n            }\n            case 'TerminalRuleCall:rule': {\n                return TerminalRule;\n            }\n            default: {\n                throw new Error(`${referenceId} is not a valid reference id.`);\n            }\n        }\n    }\n    getTypeMetaData(type) {\n        switch (type) {\n            case AbstractElement: {\n                return {\n                    name: AbstractElement,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case ArrayLiteral: {\n                return {\n                    name: ArrayLiteral,\n                    properties: [\n                        { name: 'elements', defaultValue: [] }\n                    ]\n                };\n            }\n            case ArrayType: {\n                return {\n                    name: ArrayType,\n                    properties: [\n                        { name: 'elementType' }\n                    ]\n                };\n            }\n            case BooleanLiteral: {\n                return {\n                    name: BooleanLiteral,\n                    properties: [\n                        { name: 'true', defaultValue: false }\n                    ]\n                };\n            }\n            case Conjunction: {\n                return {\n                    name: Conjunction,\n                    properties: [\n                        { name: 'left' },\n                        { name: 'right' }\n                    ]\n                };\n            }\n            case Disjunction: {\n                return {\n                    name: Disjunction,\n                    properties: [\n                        { name: 'left' },\n                        { name: 'right' }\n                    ]\n                };\n            }\n            case Grammar: {\n                return {\n                    name: Grammar,\n                    properties: [\n                        { name: 'definesHiddenTokens', defaultValue: false },\n                        { name: 'hiddenTokens', defaultValue: [] },\n                        { name: 'imports', defaultValue: [] },\n                        { name: 'interfaces', defaultValue: [] },\n                        { name: 'isDeclared', defaultValue: false },\n                        { name: 'name' },\n                        { name: 'rules', defaultValue: [] },\n                        { name: 'types', defaultValue: [] },\n                        { name: 'usedGrammars', defaultValue: [] }\n                    ]\n                };\n            }\n            case GrammarImport: {\n                return {\n                    name: GrammarImport,\n                    properties: [\n                        { name: 'path' }\n                    ]\n                };\n            }\n            case InferredType: {\n                return {\n                    name: InferredType,\n                    properties: [\n                        { name: 'name' }\n                    ]\n                };\n            }\n            case Interface: {\n                return {\n                    name: Interface,\n                    properties: [\n                        { name: 'attributes', defaultValue: [] },\n                        { name: 'name' },\n                        { name: 'superTypes', defaultValue: [] }\n                    ]\n                };\n            }\n            case NamedArgument: {\n                return {\n                    name: NamedArgument,\n                    properties: [\n                        { name: 'calledByName', defaultValue: false },\n                        { name: 'parameter' },\n                        { name: 'value' }\n                    ]\n                };\n            }\n            case Negation: {\n                return {\n                    name: Negation,\n                    properties: [\n                        { name: 'value' }\n                    ]\n                };\n            }\n            case NumberLiteral: {\n                return {\n                    name: NumberLiteral,\n                    properties: [\n                        { name: 'value' }\n                    ]\n                };\n            }\n            case Parameter: {\n                return {\n                    name: Parameter,\n                    properties: [\n                        { name: 'name' }\n                    ]\n                };\n            }\n            case ParameterReference: {\n                return {\n                    name: ParameterReference,\n                    properties: [\n                        { name: 'parameter' }\n                    ]\n                };\n            }\n            case ParserRule: {\n                return {\n                    name: ParserRule,\n                    properties: [\n                        { name: 'dataType' },\n                        { name: 'definesHiddenTokens', defaultValue: false },\n                        { name: 'definition' },\n                        { name: 'entry', defaultValue: false },\n                        { name: 'fragment', defaultValue: false },\n                        { name: 'hiddenTokens', defaultValue: [] },\n                        { name: 'inferredType' },\n                        { name: 'name' },\n                        { name: 'parameters', defaultValue: [] },\n                        { name: 'returnType' },\n                        { name: 'wildcard', defaultValue: false }\n                    ]\n                };\n            }\n            case ReferenceType: {\n                return {\n                    name: ReferenceType,\n                    properties: [\n                        { name: 'referenceType' }\n                    ]\n                };\n            }\n            case ReturnType: {\n                return {\n                    name: ReturnType,\n                    properties: [\n                        { name: 'name' }\n                    ]\n                };\n            }\n            case SimpleType: {\n                return {\n                    name: SimpleType,\n                    properties: [\n                        { name: 'primitiveType' },\n                        { name: 'stringType' },\n                        { name: 'typeRef' }\n                    ]\n                };\n            }\n            case StringLiteral: {\n                return {\n                    name: StringLiteral,\n                    properties: [\n                        { name: 'value' }\n                    ]\n                };\n            }\n            case TerminalRule: {\n                return {\n                    name: TerminalRule,\n                    properties: [\n                        { name: 'definition' },\n                        { name: 'fragment', defaultValue: false },\n                        { name: 'hidden', defaultValue: false },\n                        { name: 'name' },\n                        { name: 'type' }\n                    ]\n                };\n            }\n            case Type: {\n                return {\n                    name: Type,\n                    properties: [\n                        { name: 'name' },\n                        { name: 'type' }\n                    ]\n                };\n            }\n            case TypeAttribute: {\n                return {\n                    name: TypeAttribute,\n                    properties: [\n                        { name: 'defaultValue' },\n                        { name: 'isOptional', defaultValue: false },\n                        { name: 'name' },\n                        { name: 'type' }\n                    ]\n                };\n            }\n            case UnionType: {\n                return {\n                    name: UnionType,\n                    properties: [\n                        { name: 'types', defaultValue: [] }\n                    ]\n                };\n            }\n            case Action: {\n                return {\n                    name: Action,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'feature' },\n                        { name: 'inferredType' },\n                        { name: 'lookahead' },\n                        { name: 'operator' },\n                        { name: 'type' }\n                    ]\n                };\n            }\n            case Alternatives: {\n                return {\n                    name: Alternatives,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'elements', defaultValue: [] },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case Assignment: {\n                return {\n                    name: Assignment,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'feature' },\n                        { name: 'lookahead' },\n                        { name: 'operator' },\n                        { name: 'terminal' }\n                    ]\n                };\n            }\n            case CharacterRange: {\n                return {\n                    name: CharacterRange,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'left' },\n                        { name: 'lookahead' },\n                        { name: 'right' }\n                    ]\n                };\n            }\n            case CrossReference: {\n                return {\n                    name: CrossReference,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'deprecatedSyntax', defaultValue: false },\n                        { name: 'lookahead' },\n                        { name: 'terminal' },\n                        { name: 'type' }\n                    ]\n                };\n            }\n            case EndOfFile: {\n                return {\n                    name: EndOfFile,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case Group: {\n                return {\n                    name: Group,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'elements', defaultValue: [] },\n                        { name: 'guardCondition' },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case Keyword: {\n                return {\n                    name: Keyword,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' },\n                        { name: 'value' }\n                    ]\n                };\n            }\n            case NegatedToken: {\n                return {\n                    name: NegatedToken,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' },\n                        { name: 'terminal' }\n                    ]\n                };\n            }\n            case RegexToken: {\n                return {\n                    name: RegexToken,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' },\n                        { name: 'regex' }\n                    ]\n                };\n            }\n            case RuleCall: {\n                return {\n                    name: RuleCall,\n                    properties: [\n                        { name: 'arguments', defaultValue: [] },\n                        { name: 'cardinality' },\n                        { name: 'lookahead' },\n                        { name: 'rule' }\n                    ]\n                };\n            }\n            case TerminalAlternatives: {\n                return {\n                    name: TerminalAlternatives,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'elements', defaultValue: [] },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case TerminalGroup: {\n                return {\n                    name: TerminalGroup,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'elements', defaultValue: [] },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case TerminalRuleCall: {\n                return {\n                    name: TerminalRuleCall,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' },\n                        { name: 'rule' }\n                    ]\n                };\n            }\n            case UnorderedGroup: {\n                return {\n                    name: UnorderedGroup,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'elements', defaultValue: [] },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            case UntilToken: {\n                return {\n                    name: UntilToken,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' },\n                        { name: 'terminal' }\n                    ]\n                };\n            }\n            case Wildcard: {\n                return {\n                    name: Wildcard,\n                    properties: [\n                        { name: 'cardinality' },\n                        { name: 'lookahead' }\n                    ]\n                };\n            }\n            default: {\n                return {\n                    name: type,\n                    properties: []\n                };\n            }\n        }\n    }\n}\nexport const reflection = new LangiumGrammarAstReflection();\n//# sourceMappingURL=ast.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { isAstNode, isReference } from '../syntax-tree.js';\nimport { DONE_RESULT, stream, StreamImpl, TreeStreamImpl } from './stream.js';\nimport { inRange } from './cst-utils.js';\n/**\n * Link the `$container` and other related properties of every AST node that is directly contained\n * in the given `node`.\n */\nexport function linkContentToContainer(node) {\n    for (const [name, value] of Object.entries(node)) {\n        if (!name.startsWith('$')) {\n            if (Array.isArray(value)) {\n                value.forEach((item, index) => {\n                    if (isAstNode(item)) {\n                        item.$container = node;\n                        item.$containerProperty = name;\n                        item.$containerIndex = index;\n                    }\n                });\n            }\n            else if (isAstNode(value)) {\n                value.$container = node;\n                value.$containerProperty = name;\n            }\n        }\n    }\n}\n/**\n * Walk along the hierarchy of containers from the given AST node to the root and return the first\n * node that matches the type predicate. If the start node itself matches, it is returned.\n * If no container matches, `undefined` is returned.\n */\nexport function getContainerOfType(node, typePredicate) {\n    let item = node;\n    while (item) {\n        if (typePredicate(item)) {\n            return item;\n        }\n        item = item.$container;\n    }\n    return undefined;\n}\n/**\n * Walk along the hierarchy of containers from the given AST node to the root and check for existence\n * of a container that matches the given predicate. The start node is included in the checks.\n */\nexport function hasContainerOfType(node, predicate) {\n    let item = node;\n    while (item) {\n        if (predicate(item)) {\n            return true;\n        }\n        item = item.$container;\n    }\n    return false;\n}\n/**\n * Retrieve the document in which the given AST node is contained. A reference to the document is\n * usually held by the root node of the AST.\n *\n * @throws an error if the node is not contained in a document.\n */\nexport function getDocument(node) {\n    const rootNode = findRootNode(node);\n    const result = rootNode.$document;\n    if (!result) {\n        throw new Error('AST node has no document.');\n    }\n    return result;\n}\n/**\n * Returns the root node of the given AST node by following the `$container` references.\n */\nexport function findRootNode(node) {\n    while (node.$container) {\n        node = node.$container;\n    }\n    return node;\n}\n/**\n * Create a stream of all AST nodes that are directly contained in the given node. This includes\n * single-valued as well as multi-valued (array) properties.\n */\nexport function streamContents(node, options) {\n    if (!node) {\n        throw new Error('Node must be an AstNode.');\n    }\n    const range = options === null || options === void 0 ? void 0 : options.range;\n    return new StreamImpl(() => ({\n        keys: Object.keys(node),\n        keyIndex: 0,\n        arrayIndex: 0\n    }), state => {\n        while (state.keyIndex < state.keys.length) {\n            const property = state.keys[state.keyIndex];\n            if (!property.startsWith('$')) {\n                const value = node[property];\n                if (isAstNode(value)) {\n                    state.keyIndex++;\n                    if (isAstNodeInRange(value, range)) {\n                        return { done: false, value };\n                    }\n                }\n                else if (Array.isArray(value)) {\n                    while (state.arrayIndex < value.length) {\n                        const index = state.arrayIndex++;\n                        const element = value[index];\n                        if (isAstNode(element) && isAstNodeInRange(element, range)) {\n                            return { done: false, value: element };\n                        }\n                    }\n                    state.arrayIndex = 0;\n                }\n            }\n            state.keyIndex++;\n        }\n        return DONE_RESULT;\n    });\n}\n/**\n * Create a stream of all AST nodes that are directly and indirectly contained in the given root node.\n * This does not include the root node itself.\n */\nexport function streamAllContents(root, options) {\n    if (!root) {\n        throw new Error('Root node must be an AstNode.');\n    }\n    return new TreeStreamImpl(root, node => streamContents(node, options));\n}\n/**\n * Create a stream of all AST nodes that are directly and indirectly contained in the given root node,\n * including the root node itself.\n */\nexport function streamAst(root, options) {\n    if (!root) {\n        throw new Error('Root node must be an AstNode.');\n    }\n    else if ((options === null || options === void 0 ? void 0 : options.range) && !isAstNodeInRange(root, options.range)) {\n        // Return an empty stream if the root node isn't in range\n        return new TreeStreamImpl(root, () => []);\n    }\n    return new TreeStreamImpl(root, node => streamContents(node, options), { includeRoot: true });\n}\nfunction isAstNodeInRange(astNode, range) {\n    var _a;\n    if (!range) {\n        return true;\n    }\n    const nodeRange = (_a = astNode.$cstNode) === null || _a === void 0 ? void 0 : _a.range;\n    if (!nodeRange) {\n        return false;\n    }\n    return inRange(nodeRange, range);\n}\n/**\n * Create a stream of all cross-references that are held by the given AST node. This includes\n * single-valued as well as multi-valued (array) properties.\n */\nexport function streamReferences(node) {\n    return new StreamImpl(() => ({\n        keys: Object.keys(node),\n        keyIndex: 0,\n        arrayIndex: 0\n    }), state => {\n        while (state.keyIndex < state.keys.length) {\n            const property = state.keys[state.keyIndex];\n            if (!property.startsWith('$')) {\n                const value = node[property];\n                if (isReference(value)) {\n                    state.keyIndex++;\n                    return { done: false, value: { reference: value, container: node, property } };\n                }\n                else if (Array.isArray(value)) {\n                    while (state.arrayIndex < value.length) {\n                        const index = state.arrayIndex++;\n                        const element = value[index];\n                        if (isReference(element)) {\n                            return { done: false, value: { reference: element, container: node, property, index } };\n                        }\n                    }\n                    state.arrayIndex = 0;\n                }\n            }\n            state.keyIndex++;\n        }\n        return DONE_RESULT;\n    });\n}\n/**\n * Returns a Stream of references to the target node from the AstNode tree\n *\n * @param targetNode AstNode we are looking for\n * @param lookup AstNode where we search for references. If not provided, the root node of the document is used as the default value\n */\nexport function findLocalReferences(targetNode, lookup = getDocument(targetNode).parseResult.value) {\n    const refs = [];\n    streamAst(lookup).forEach(node => {\n        streamReferences(node).forEach(refInfo => {\n            if (refInfo.reference.ref === targetNode) {\n                refs.push(refInfo.reference);\n            }\n        });\n    });\n    return stream(refs);\n}\n/**\n * Assigns all mandatory AST properties to the specified node.\n *\n * @param reflection Reflection object used to gather mandatory properties for the node.\n * @param node Specified node is modified in place and properties are directly assigned.\n */\nexport function assignMandatoryProperties(reflection, node) {\n    const typeMetaData = reflection.getTypeMetaData(node.$type);\n    const genericNode = node;\n    for (const property of typeMetaData.properties) {\n        // Only set the value if the property is not already set and if it has a default value\n        if (property.defaultValue !== undefined && genericNode[property.name] === undefined) {\n            genericNode[property.name] = copyDefaultValue(property.defaultValue);\n        }\n    }\n}\nfunction copyDefaultValue(propertyType) {\n    if (Array.isArray(propertyType)) {\n        return [...propertyType.map(copyDefaultValue)];\n    }\n    else {\n        return propertyType;\n    }\n}\n/**\n * Creates a deep copy of the specified AST node.\n * The resulting copy will only contain semantically relevant information, such as the `$type` property and AST properties.\n *\n * References are copied without resolved cross reference. The specified function is used to rebuild them.\n */\nexport function copyAstNode(node, buildReference) {\n    const copy = { $type: node.$type };\n    for (const [name, value] of Object.entries(node)) {\n        if (!name.startsWith('$')) {\n            if (isAstNode(value)) {\n                copy[name] = copyAstNode(value, buildReference);\n            }\n            else if (isReference(value)) {\n                copy[name] = buildReference(copy, name, value.$refNode, value.$refText);\n            }\n            else if (Array.isArray(value)) {\n                const copiedArray = [];\n                for (const element of value) {\n                    if (isAstNode(element)) {\n                        copiedArray.push(copyAstNode(element, buildReference));\n                    }\n                    else if (isReference(element)) {\n                        copiedArray.push(buildReference(copy, name, element.$refNode, element.$refText));\n                    }\n                    else {\n                        copiedArray.push(element);\n                    }\n                }\n                copy[name] = copiedArray;\n            }\n            else {\n                copy[name] = value;\n            }\n        }\n    }\n    linkContentToContainer(copy);\n    return copy;\n}\n//# sourceMappingURL=ast-utils.js.map","export function cc(char) {\n    return char.charCodeAt(0);\n}\nexport function insertToSet(item, set) {\n    if (Array.isArray(item)) {\n        item.forEach(function (subItem) {\n            set.push(subItem);\n        });\n    }\n    else {\n        set.push(item);\n    }\n}\nexport function addFlag(flagObj, flagKey) {\n    if (flagObj[flagKey] === true) {\n        throw \"duplicate flag \" + flagKey;\n    }\n    const x = flagObj[flagKey];\n    flagObj[flagKey] = true;\n}\nexport function ASSERT_EXISTS(obj) {\n    // istanbul ignore next\n    if (obj === undefined) {\n        throw Error(\"Internal Error - Should never get here!\");\n    }\n    return true;\n}\n// istanbul ignore next\nexport function ASSERT_NEVER_REACH_HERE() {\n    throw Error(\"Internal Error - Should never get here!\");\n}\nexport function isCharacter(obj) {\n    return obj[\"type\"] === \"Character\";\n}\n//# sourceMappingURL=utils.js.map","import { cc } from \"./utils.js\";\nexport const digitsCharCodes = [];\nfor (let i = cc(\"0\"); i <= cc(\"9\"); i++) {\n    digitsCharCodes.push(i);\n}\nexport const wordCharCodes = [cc(\"_\")].concat(digitsCharCodes);\nfor (let i = cc(\"a\"); i <= cc(\"z\"); i++) {\n    wordCharCodes.push(i);\n}\nfor (let i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n    wordCharCodes.push(i);\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\nexport const 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//# sourceMappingURL=character-classes.js.map","import { addFlag, ASSERT_EXISTS, ASSERT_NEVER_REACH_HERE, cc, insertToSet, isCharacter, } from \"./utils.js\";\nimport { digitsCharCodes, whitespaceCodes, wordCharCodes, } from \"./character-classes.js\";\n// consts and utilities\nconst hexDigitPattern = /[0-9a-fA-F]/;\nconst decimalPattern = /[0-9]/;\nconst decimalPatternNoZero = /[1-9]/;\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\nexport class RegExpParser {\n    constructor() {\n        this.idx = 0;\n        this.input = \"\";\n        this.groupIdx = 0;\n    }\n    saveState() {\n        return {\n            idx: this.idx,\n            input: this.input,\n            groupIdx: this.groupIdx,\n        };\n    }\n    restoreState(newState) {\n        this.idx = newState.idx;\n        this.input = newState.input;\n        this.groupIdx = newState.groupIdx;\n    }\n    pattern(input) {\n        // parser state\n        this.idx = 0;\n        this.input = input;\n        this.groupIdx = 0;\n        this.consumeChar(\"/\");\n        const value = this.disjunction();\n        this.consumeChar(\"/\");\n        const 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        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        if (this.idx !== this.input.length) {\n            throw Error(\"Redundant input: \" + this.input.substring(this.idx));\n        }\n        return {\n            type: \"Pattern\",\n            flags: flags,\n            value: value,\n            loc: this.loc(0),\n        };\n    }\n    disjunction() {\n        const alts = [];\n        const begin = this.idx;\n        alts.push(this.alternative());\n        while (this.peekChar() === \"|\") {\n            this.consumeChar(\"|\");\n            alts.push(this.alternative());\n        }\n        return { type: \"Disjunction\", value: alts, loc: this.loc(begin) };\n    }\n    alternative() {\n        const terms = [];\n        const begin = this.idx;\n        while (this.isTerm()) {\n            terms.push(this.term());\n        }\n        return { type: \"Alternative\", value: terms, loc: this.loc(begin) };\n    }\n    term() {\n        if (this.isAssertion()) {\n            return this.assertion();\n        }\n        else {\n            return this.atom();\n        }\n    }\n    assertion() {\n        const 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                let 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                const disjunction = this.disjunction();\n                this.consumeChar(\")\");\n                return {\n                    type: type,\n                    value: disjunction,\n                    loc: this.loc(begin),\n                };\n        }\n        // istanbul ignore next\n        return ASSERT_NEVER_REACH_HERE();\n    }\n    quantifier(isBacktracking = false) {\n        let range = undefined;\n        const 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                const atLeast = this.integerIncludingZero();\n                switch (this.popChar()) {\n                    case \"}\":\n                        range = {\n                            atLeast: atLeast,\n                            atMost: atLeast,\n                        };\n                        break;\n                    case \",\":\n                        let atMost;\n                        if (this.isDigit()) {\n                            atMost = this.integerIncludingZero();\n                            range = {\n                                atLeast: atLeast,\n                                atMost: atMost,\n                            };\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        // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n        // causes severe performance degradations\n        if (isBacktracking === true && range === undefined) {\n            return undefined;\n        }\n        // istanbul ignore else\n        if (ASSERT_EXISTS(range)) {\n            if (this.peekChar(0) === \"?\") {\n                this.consumeChar(\"?\");\n                range.greedy = false;\n            }\n            else {\n                range.greedy = true;\n            }\n            range.type = \"Quantifier\";\n            range.loc = this.loc(begin);\n            return range;\n        }\n    }\n    atom() {\n        let atom;\n        const 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        if (atom === undefined && this.isPatternCharacter()) {\n            atom = this.patternCharacter();\n        }\n        // istanbul ignore else\n        if (ASSERT_EXISTS(atom)) {\n            atom.loc = this.loc(begin);\n            if (this.isQuantifier()) {\n                atom.quantifier = this.quantifier();\n            }\n            return atom;\n        }\n        // istanbul ignore next\n        return ASSERT_NEVER_REACH_HERE();\n    }\n    dotAll() {\n        this.consumeChar(\".\");\n        return {\n            type: \"Set\",\n            complement: true,\n            value: [cc(\"\\n\"), cc(\"\\r\"), cc(\"\\u2028\"), cc(\"\\u2029\")],\n        };\n    }\n    atomEscape() {\n        this.consumeChar(\"\\\\\");\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    decimalEscapeAtom() {\n        const value = this.positiveInteger();\n        return { type: \"GroupBackReference\", value: value };\n    }\n    characterClassEscape() {\n        let set;\n        let 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        // istanbul ignore else\n        if (ASSERT_EXISTS(set)) {\n            return { type: \"Set\", value: set, complement: complement };\n        }\n        // istanbul ignore next\n        return ASSERT_NEVER_REACH_HERE();\n    }\n    controlEscapeAtom() {\n        let 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        // istanbul ignore else\n        if (ASSERT_EXISTS(escapeCode)) {\n            return { type: \"Character\", value: escapeCode };\n        }\n        // istanbul ignore next\n        return ASSERT_NEVER_REACH_HERE();\n    }\n    controlLetterEscapeAtom() {\n        this.consumeChar(\"c\");\n        const letter = this.popChar();\n        if (/[a-zA-Z]/.test(letter) === false) {\n            throw Error(\"Invalid \");\n        }\n        const letterCode = letter.toUpperCase().charCodeAt(0) - 64;\n        return { type: \"Character\", value: letterCode };\n    }\n    nulCharacterAtom() {\n        // TODO implement '[lookahead ∉ DecimalDigit]'\n        // TODO: for the deprecated octal escape sequence\n        this.consumeChar(\"0\");\n        return { type: \"Character\", value: cc(\"\\0\") };\n    }\n    hexEscapeSequenceAtom() {\n        this.consumeChar(\"x\");\n        return this.parseHexDigits(2);\n    }\n    regExpUnicodeEscapeSequenceAtom() {\n        this.consumeChar(\"u\");\n        return this.parseHexDigits(4);\n    }\n    identityEscapeAtom() {\n        // TODO: implement \"SourceCharacter but not UnicodeIDContinue\"\n        // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments\n        const escapedChar = this.popChar();\n        return { type: \"Character\", value: cc(escapedChar) };\n    }\n    classPatternCharacterAtom() {\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                const nextChar = this.popChar();\n                return { type: \"Character\", value: cc(nextChar) };\n        }\n    }\n    characterClass() {\n        const set = [];\n        let complement = false;\n        this.consumeChar(\"[\");\n        if (this.peekChar(0) === \"^\") {\n            this.consumeChar(\"^\");\n            complement = true;\n        }\n        while (this.isClassAtom()) {\n            const from = this.classAtom();\n            const isFromSingleChar = from.type === \"Character\";\n            if (isCharacter(from) && this.isRangeDash()) {\n                this.consumeChar(\"-\");\n                const to = this.classAtom();\n                const isToSingleChar = to.type === \"Character\";\n                // a range can only be used when both sides are single characters\n                if (isCharacter(to)) {\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                }\n                else {\n                    // literal dash\n                    insertToSet(from.value, set);\n                    set.push(cc(\"-\"));\n                    insertToSet(to.value, set);\n                }\n            }\n            else {\n                insertToSet(from.value, set);\n            }\n        }\n        this.consumeChar(\"]\");\n        return { type: \"Set\", complement: complement, value: set };\n    }\n    classAtom() {\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    classEscape() {\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    group() {\n        let 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        const value = this.disjunction();\n        this.consumeChar(\")\");\n        const groupAst = {\n            type: \"Group\",\n            capturing: capturing,\n            value: value,\n        };\n        if (capturing) {\n            groupAst[\"idx\"] = this.groupIdx;\n        }\n        return groupAst;\n    }\n    positiveInteger() {\n        let number = this.popChar();\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        while (decimalPattern.test(this.peekChar(0))) {\n            number += this.popChar();\n        }\n        return parseInt(number, 10);\n    }\n    integerIncludingZero() {\n        let number = this.popChar();\n        if (decimalPattern.test(number) === false) {\n            throw Error(\"Expecting an integer\");\n        }\n        while (decimalPattern.test(this.peekChar(0))) {\n            number += this.popChar();\n        }\n        return parseInt(number, 10);\n    }\n    patternCharacter() {\n        const 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    isRegExpFlag() {\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    isRangeDash() {\n        return this.peekChar() === \"-\" && this.isClassAtom(1);\n    }\n    isDigit() {\n        return decimalPattern.test(this.peekChar(0));\n    }\n    isClassAtom(howMuch = 0) {\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    isTerm() {\n        return this.isAtom() || this.isAssertion();\n    }\n    isAtom() {\n        if (this.isPatternCharacter()) {\n            return true;\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    isAssertion() {\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 (this.peekChar(1) === \"?\" &&\n                    (this.peekChar(2) === \"=\" || this.peekChar(2) === \"!\"));\n            default:\n                return false;\n        }\n    }\n    isQuantifier() {\n        const prevState = this.saveState();\n        try {\n            return this.quantifier(true) !== undefined;\n        }\n        catch (e) {\n            return false;\n        }\n        finally {\n            this.restoreState(prevState);\n        }\n    }\n    isPatternCharacter() {\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    parseHexDigits(howMany) {\n        let hexString = \"\";\n        for (let i = 0; i < howMany; i++) {\n            const hexChar = this.popChar();\n            if (hexDigitPattern.test(hexChar) === false) {\n                throw Error(\"Expecting a HexDecimal digits\");\n            }\n            hexString += hexChar;\n        }\n        const charCode = parseInt(hexString, 16);\n        return { type: \"Character\", value: charCode };\n    }\n    peekChar(howMuch = 0) {\n        return this.input[this.idx + howMuch];\n    }\n    popChar() {\n        const nextChar = this.peekChar(0);\n        this.consumeChar(undefined);\n        return nextChar;\n    }\n    consumeChar(char) {\n        if (char !== undefined && this.input[this.idx] !== char) {\n            throw Error(\"Expected: '\" +\n                char +\n                \"' but found: '\" +\n                this.input[this.idx] +\n                \"' at offset: \" +\n                this.idx);\n        }\n        if (this.idx >= this.input.length) {\n            throw Error(\"Unexpected end of input\");\n        }\n        this.idx++;\n    }\n    loc(begin) {\n        return { begin: begin, end: this.idx };\n    }\n}\n//# sourceMappingURL=regexp-parser.js.map","export class BaseRegExpVisitor {\n    visitChildren(node) {\n        for (const key in node) {\n            const child = node[key];\n            /* istanbul ignore else */\n            if (node.hasOwnProperty(key)) {\n                if (child.type !== undefined) {\n                    this.visit(child);\n                }\n                else if (Array.isArray(child)) {\n                    child.forEach((subChild) => {\n                        this.visit(subChild);\n                    }, this);\n                }\n            }\n        }\n    }\n    visit(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        this.visitChildren(node);\n    }\n    visitPattern(node) { }\n    visitFlags(node) { }\n    visitDisjunction(node) { }\n    visitAlternative(node) { }\n    // Assertion\n    visitStartAnchor(node) { }\n    visitEndAnchor(node) { }\n    visitWordBoundary(node) { }\n    visitNonWordBoundary(node) { }\n    visitLookahead(node) { }\n    visitNegativeLookahead(node) { }\n    // atoms\n    visitCharacter(node) { }\n    visitSet(node) { }\n    visitGroup(node) { }\n    visitGroupBackReference(node) { }\n    visitQuantifier(node) { }\n}\n//# sourceMappingURL=base-regexp-visitor.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { RegExpParser, BaseRegExpVisitor } from '@chevrotain/regexp-to-ast';\nexport const NEWLINE_REGEXP = /\\r?\\n/gm;\nconst regexpParser = new RegExpParser();\n/**\n * This class is in charge of heuristically identifying start/end tokens of terminals.\n *\n * The way this works is by doing the following:\n * 1. Traverse the regular expression in the \"start state\"\n * 2. Add any encountered sets/single characters to the \"start regexp\"\n * 3. Once we encounter any variable-length content (i.e. with quantifiers such as +/?/*), we enter the \"end state\"\n * 4. In the end state, any sets/single characters are added to an \"end stack\".\n * 5. If we re-encounter any variable-length content we reset the end stack\n * 6. We continue visiting the regex until the end, reseting the end stack and rebuilding it as necessary\n *\n * After traversing a regular expression the `startRegexp/endRegexp` properties allow access to the stored start/end of the terminal\n */\nclass TerminalRegExpVisitor extends BaseRegExpVisitor {\n    constructor() {\n        super(...arguments);\n        this.isStarting = true;\n        this.endRegexpStack = [];\n        this.multiline = false;\n    }\n    get endRegex() {\n        return this.endRegexpStack.join('');\n    }\n    reset(regex) {\n        this.multiline = false;\n        this.regex = regex;\n        this.startRegexp = '';\n        this.isStarting = true;\n        this.endRegexpStack = [];\n    }\n    visitGroup(node) {\n        if (node.quantifier) {\n            this.isStarting = false;\n            this.endRegexpStack = [];\n        }\n    }\n    visitCharacter(node) {\n        const char = String.fromCharCode(node.value);\n        if (!this.multiline && char === '\\n') {\n            this.multiline = true;\n        }\n        if (node.quantifier) {\n            this.isStarting = false;\n            this.endRegexpStack = [];\n        }\n        else {\n            const escapedChar = escapeRegExp(char);\n            this.endRegexpStack.push(escapedChar);\n            if (this.isStarting) {\n                this.startRegexp += escapedChar;\n            }\n        }\n    }\n    visitSet(node) {\n        if (!this.multiline) {\n            const set = this.regex.substring(node.loc.begin, node.loc.end);\n            const regex = new RegExp(set);\n            this.multiline = Boolean('\\n'.match(regex));\n        }\n        if (node.quantifier) {\n            this.isStarting = false;\n            this.endRegexpStack = [];\n        }\n        else {\n            const set = this.regex.substring(node.loc.begin, node.loc.end);\n            this.endRegexpStack.push(set);\n            if (this.isStarting) {\n                this.startRegexp += set;\n            }\n        }\n    }\n    visitChildren(node) {\n        if (node.type === 'Group') {\n            // Ignore children of groups with quantifier (+/*/?)\n            // These groups are unrelated to start/end tokens of terminals\n            const group = node;\n            if (group.quantifier) {\n                return;\n            }\n        }\n        super.visitChildren(node);\n    }\n}\nconst visitor = new TerminalRegExpVisitor();\nexport function getTerminalParts(regexp) {\n    try {\n        if (typeof regexp !== 'string') {\n            regexp = regexp.source;\n        }\n        regexp = `/${regexp}/`;\n        const pattern = regexpParser.pattern(regexp);\n        const parts = [];\n        for (const alternative of pattern.value.value) {\n            visitor.reset(regexp);\n            visitor.visit(alternative);\n            parts.push({\n                start: visitor.startRegexp,\n                end: visitor.endRegex\n            });\n        }\n        return parts;\n    }\n    catch (_a) {\n        return [];\n    }\n}\nexport function isMultilineComment(regexp) {\n    try {\n        if (typeof regexp === 'string') {\n            regexp = new RegExp(regexp);\n        }\n        regexp = regexp.toString();\n        visitor.reset(regexp);\n        // Parsing the pattern might fail (since it's user code)\n        visitor.visit(regexpParser.pattern(regexp));\n        return visitor.multiline;\n    }\n    catch (_a) {\n        return false;\n    }\n}\n/**\n * A set of all characters that are considered whitespace by the '\\s' RegExp character class.\n * Taken from [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions/Character_classes).\n */\nexport const whitespaceCharacters = ('\\f\\n\\r\\t\\v\\u0020\\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007' +\n    '\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff').split('');\nexport function isWhitespace(value) {\n    const regexp = typeof value === 'string' ? new RegExp(value) : value;\n    return whitespaceCharacters.some((ws) => regexp.test(ws));\n}\nexport function escapeRegExp(value) {\n    return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nexport function getCaseInsensitivePattern(keyword) {\n    return Array.prototype.map.call(keyword, letter => /\\w/.test(letter) ? `[${letter.toLowerCase()}${letter.toUpperCase()}]` : escapeRegExp(letter)).join('');\n}\n/**\n * Determines whether the given input has a partial match with the specified regex.\n * @param regex The regex to partially match against\n * @param input The input string\n * @returns Whether any match exists.\n */\nexport function partialMatches(regex, input) {\n    const partial = partialRegExp(regex);\n    const match = input.match(partial);\n    return !!match && match[0].length > 0;\n}\n/**\n * Builds a partial regex from the input regex. A partial regex is able to match incomplete input strings. E.g.\n * a partial regex constructed from `/ab/` is able to match the string `a` without needing a following `b` character. However it won't match `b` alone.\n * @param regex The input regex to be converted.\n * @returns A partial regex constructed from the input regex.\n */\nexport function partialRegExp(regex) {\n    if (typeof regex === 'string') {\n        regex = new RegExp(regex);\n    }\n    const re = regex, source = regex.source;\n    let i = 0;\n    function process() {\n        let result = '', tmp;\n        function appendRaw(nbChars) {\n            result += source.substr(i, nbChars);\n            i += nbChars;\n        }\n        function appendOptional(nbChars) {\n            result += '(?:' + source.substr(i, nbChars) + '|$)';\n            i += nbChars;\n        }\n        while (i < source.length) {\n            switch (source[i]) {\n                case '\\\\':\n                    switch (source[i + 1]) {\n                        case 'c':\n                            appendOptional(3);\n                            break;\n                        case 'x':\n                            appendOptional(4);\n                            break;\n                        case 'u':\n                            if (re.unicode) {\n                                if (source[i + 2] === '{') {\n                                    appendOptional(source.indexOf('}', i) - i + 1);\n                                }\n                                else {\n                                    appendOptional(6);\n                                }\n                            }\n                            else {\n                                appendOptional(2);\n                            }\n                            break;\n                        case 'p':\n                        case 'P':\n                            if (re.unicode) {\n                                appendOptional(source.indexOf('}', i) - i + 1);\n                            }\n                            else {\n                                appendOptional(2);\n                            }\n                            break;\n                        case 'k':\n                            appendOptional(source.indexOf('>', i) - i + 1);\n                            break;\n                        default:\n                            appendOptional(2);\n                            break;\n                    }\n                    break;\n                case '[':\n                    tmp = /\\[(?:\\\\.|.)*?\\]/g;\n                    tmp.lastIndex = i;\n                    tmp = tmp.exec(source) || [];\n                    appendOptional(tmp[0].length);\n                    break;\n                case '|':\n                case '^':\n                case '$':\n                case '*':\n                case '+':\n                case '?':\n                    appendRaw(1);\n                    break;\n                case '{':\n                    tmp = /\\{\\d+,?\\d*\\}/g;\n                    tmp.lastIndex = i;\n                    tmp = tmp.exec(source);\n                    if (tmp) {\n                        appendRaw(tmp[0].length);\n                    }\n                    else {\n                        appendOptional(1);\n                    }\n                    break;\n                case '(':\n                    if (source[i + 1] === '?') {\n                        switch (source[i + 2]) {\n                            case ':':\n                                result += '(?:';\n                                i += 3;\n                                result += process() + '|$)';\n                                break;\n                            case '=':\n                                result += '(?=';\n                                i += 3;\n                                result += process() + ')';\n                                break;\n                            case '!':\n                                tmp = i;\n                                i += 3;\n                                process();\n                                result += source.substr(tmp, i - tmp);\n                                break;\n                            case '<':\n                                switch (source[i + 3]) {\n                                    case '=':\n                                    case '!':\n                                        tmp = i;\n                                        i += 4;\n                                        process();\n                                        result += source.substr(tmp, i - tmp);\n                                        break;\n                                    default:\n                                        appendRaw(source.indexOf('>', i) - i + 1);\n                                        result += process() + '|$)';\n                                        break;\n                                }\n                                break;\n                        }\n                    }\n                    else {\n                        appendRaw(1);\n                        result += process() + '|$)';\n                    }\n                    break;\n                case ')':\n                    ++i;\n                    return result;\n                default:\n                    appendOptional(1);\n                    break;\n            }\n        }\n        return result;\n    }\n    return new RegExp(process(), regex.flags);\n}\n//# sourceMappingURL=regexp-utils.js.map","/******************************************************************************\n * Copyright 2021-2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { assertUnreachable } from '../utils/errors.js';\nimport * as ast from '../languages/generated/ast.js';\nimport { isCompositeCstNode } from '../syntax-tree.js';\nimport { getContainerOfType, streamAllContents } from './ast-utils.js';\nimport { streamCst } from './cst-utils.js';\nimport { escapeRegExp, isWhitespace } from './regexp-utils.js';\n/**\n * Returns the entry rule of the given grammar, if any. If the grammar file does not contain an entry rule,\n * the result is `undefined`.\n */\nexport function getEntryRule(grammar) {\n    return grammar.rules.find(e => ast.isParserRule(e) && e.entry);\n}\n/**\n * Returns all hidden terminal rules of the given grammar, if any.\n */\nexport function getHiddenRules(grammar) {\n    return grammar.rules.filter((e) => ast.isTerminalRule(e) && e.hidden);\n}\n/**\n * Returns all rules that can be reached from the topmost rules of the specified grammar (entry and hidden terminal rules).\n *\n * @param grammar The grammar that contains all rules\n * @param allTerminals Whether or not to include terminals that are referenced only by other terminals\n * @returns A list of referenced parser and terminal rules. If the grammar contains no entry rule,\n *      this function returns all rules of the specified grammar.\n */\nexport function getAllReachableRules(grammar, allTerminals) {\n    const ruleNames = new Set();\n    const entryRule = getEntryRule(grammar);\n    if (!entryRule) {\n        return new Set(grammar.rules);\n    }\n    const topMostRules = [entryRule].concat(getHiddenRules(grammar));\n    for (const rule of topMostRules) {\n        ruleDfs(rule, ruleNames, allTerminals);\n    }\n    const rules = new Set();\n    for (const rule of grammar.rules) {\n        if (ruleNames.has(rule.name) || (ast.isTerminalRule(rule) && rule.hidden)) {\n            rules.add(rule);\n        }\n    }\n    return rules;\n}\nfunction ruleDfs(rule, visitedSet, allTerminals) {\n    visitedSet.add(rule.name);\n    streamAllContents(rule).forEach(node => {\n        if (ast.isRuleCall(node) || (allTerminals && ast.isTerminalRuleCall(node))) {\n            const refRule = node.rule.ref;\n            if (refRule && !visitedSet.has(refRule.name)) {\n                ruleDfs(refRule, visitedSet, allTerminals);\n            }\n        }\n    });\n}\n/**\n * Determines the grammar expression used to parse a cross-reference (usually a reference to a terminal rule).\n * A cross-reference can declare this expression explicitly in the form `[Type : Terminal]`, but if `Terminal`\n * is omitted, this function attempts to infer it from the name of the referenced `Type` (using `findNameAssignment`).\n *\n * Returns the grammar expression used to parse the given cross-reference, or `undefined` if it is not declared\n * and cannot be inferred.\n */\nexport function getCrossReferenceTerminal(crossRef) {\n    if (crossRef.terminal) {\n        return crossRef.terminal;\n    }\n    else if (crossRef.type.ref) {\n        const nameAssigment = findNameAssignment(crossRef.type.ref);\n        return nameAssigment === null || nameAssigment === void 0 ? void 0 : nameAssigment.terminal;\n    }\n    return undefined;\n}\n/**\n * Determines whether the given terminal rule represents a comment. This is true if the rule is marked\n * as `hidden` and it does not match white space. This means every hidden token (i.e. excluded from the AST)\n * that contains visible characters is considered a comment.\n */\nexport function isCommentTerminal(terminalRule) {\n    return terminalRule.hidden && !isWhitespace(terminalRegex(terminalRule));\n}\n/**\n * Find all CST nodes within the given node that contribute to the specified property.\n *\n * @param node A CST node in which to look for property assignments. If this is undefined, the result is an empty array.\n * @param property A property name of the constructed AST node. If this is undefined, the result is an empty array.\n */\nexport function findNodesForProperty(node, property) {\n    if (!node || !property) {\n        return [];\n    }\n    return findNodesForPropertyInternal(node, property, node.astNode, true);\n}\n/**\n * Find a single CST node within the given node that contributes to the specified property.\n *\n * @param node A CST node in which to look for property assignments. If this is undefined, the result is `undefined`.\n * @param property A property name of the constructed AST node. If this is undefined, the result is `undefined`.\n * @param index If no index is specified or the index is less than zero, the first found node is returned. If the\n *        specified index exceeds the number of assignments to the property, the last found node is returned. Otherwise,\n *        the node with the specified index is returned.\n */\nexport function findNodeForProperty(node, property, index) {\n    if (!node || !property) {\n        return undefined;\n    }\n    const nodes = findNodesForPropertyInternal(node, property, node.astNode, true);\n    if (nodes.length === 0) {\n        return undefined;\n    }\n    if (index !== undefined) {\n        index = Math.max(0, Math.min(index, nodes.length - 1));\n    }\n    else {\n        index = 0;\n    }\n    return nodes[index];\n}\nfunction findNodesForPropertyInternal(node, property, element, first) {\n    if (!first) {\n        const nodeFeature = getContainerOfType(node.grammarSource, ast.isAssignment);\n        if (nodeFeature && nodeFeature.feature === property) {\n            return [node];\n        }\n    }\n    if (isCompositeCstNode(node) && node.astNode === element) {\n        return node.content.flatMap(e => findNodesForPropertyInternal(e, property, element, false));\n    }\n    return [];\n}\n/**\n * Find all CST nodes within the given node that correspond to the specified keyword.\n *\n * @param node A CST node in which to look for keywords. If this is undefined, the result is an empty array.\n * @param keyword A keyword as specified in the grammar.\n */\nexport function findNodesForKeyword(node, keyword) {\n    if (!node) {\n        return [];\n    }\n    return findNodesForKeywordInternal(node, keyword, node === null || node === void 0 ? void 0 : node.astNode);\n}\n/**\n * Find a single CST node within the given node that corresponds to the specified keyword.\n *\n * @param node A CST node in which to look for keywords. If this is undefined, the result is `undefined`.\n * @param keyword A keyword as specified in the grammar.\n * @param index If no index is specified or the index is less than zero, the first found node is returned. If the\n *        specified index exceeds the number of keyword occurrences, the last found node is returned. Otherwise,\n *        the node with the specified index is returned.\n */\nexport function findNodeForKeyword(node, keyword, index) {\n    if (!node) {\n        return undefined;\n    }\n    const nodes = findNodesForKeywordInternal(node, keyword, node === null || node === void 0 ? void 0 : node.astNode);\n    if (nodes.length === 0) {\n        return undefined;\n    }\n    if (index !== undefined) {\n        index = Math.max(0, Math.min(index, nodes.length - 1));\n    }\n    else {\n        index = 0;\n    }\n    return nodes[index];\n}\nexport function findNodesForKeywordInternal(node, keyword, element) {\n    if (node.astNode !== element) {\n        return [];\n    }\n    if (ast.isKeyword(node.grammarSource) && node.grammarSource.value === keyword) {\n        return [node];\n    }\n    const treeIterator = streamCst(node).iterator();\n    let result;\n    const keywordNodes = [];\n    do {\n        result = treeIterator.next();\n        if (!result.done) {\n            const childNode = result.value;\n            if (childNode.astNode === element) {\n                if (ast.isKeyword(childNode.grammarSource) && childNode.grammarSource.value === keyword) {\n                    keywordNodes.push(childNode);\n                }\n            }\n            else {\n                treeIterator.prune();\n            }\n        }\n    } while (!result.done);\n    return keywordNodes;\n}\n/**\n * If the given CST node was parsed in the context of a property assignment, the respective `Assignment` grammar\n * node is returned. If no assignment is found, the result is `undefined`.\n *\n * @param cstNode A CST node for which to find a property assignment.\n */\nexport function findAssignment(cstNode) {\n    var _a;\n    const astNode = cstNode.astNode;\n    // Only search until the ast node of the parent cst node is no longer the original ast node\n    // This would make us jump to a preceding rule call, which contains only unrelated assignments\n    while (astNode === ((_a = cstNode.container) === null || _a === void 0 ? void 0 : _a.astNode)) {\n        const assignment = getContainerOfType(cstNode.grammarSource, ast.isAssignment);\n        if (assignment) {\n            return assignment;\n        }\n        cstNode = cstNode.container;\n    }\n    return undefined;\n}\n/**\n * Find an assignment to the `name` property for the given grammar type. This requires the `type` to be inferred\n * from a parser rule, and that rule must contain an assignment to the `name` property. In all other cases,\n * this function returns `undefined`.\n */\nexport function findNameAssignment(type) {\n    let startNode = type;\n    if (ast.isInferredType(startNode)) {\n        // for inferred types, the location to start searching for the name-assignment is different\n        if (ast.isAction(startNode.$container)) {\n            // a type which is explicitly inferred by an action: investigate the sibbling of the Action node, i.e. start searching at the Action's parent\n            startNode = startNode.$container.$container;\n        }\n        else if (ast.isParserRule(startNode.$container)) {\n            // investigate the parser rule with the explicitly inferred type\n            startNode = startNode.$container;\n        }\n        else {\n            assertUnreachable(startNode.$container);\n        }\n    }\n    return findNameAssignmentInternal(type, startNode, new Map());\n}\nfunction findNameAssignmentInternal(type, startNode, cache) {\n    var _a;\n    // the cache is only required to prevent infinite loops\n    function go(node, refType) {\n        let childAssignment = undefined;\n        const parentAssignment = getContainerOfType(node, ast.isAssignment);\n        // No parent assignment implies unassigned rule call\n        if (!parentAssignment) {\n            childAssignment = findNameAssignmentInternal(refType, refType, cache);\n        }\n        cache.set(type, childAssignment);\n        return childAssignment;\n    }\n    if (cache.has(type)) {\n        return cache.get(type);\n    }\n    cache.set(type, undefined);\n    for (const node of streamAllContents(startNode)) {\n        if (ast.isAssignment(node) && node.feature.toLowerCase() === 'name') {\n            cache.set(type, node);\n            return node;\n        }\n        else if (ast.isRuleCall(node) && ast.isParserRule(node.rule.ref)) {\n            return go(node, node.rule.ref);\n        }\n        else if (ast.isSimpleType(node) && ((_a = node.typeRef) === null || _a === void 0 ? void 0 : _a.ref)) {\n            return go(node, node.typeRef.ref);\n        }\n    }\n    return undefined;\n}\nexport function getActionAtElement(element) {\n    const parent = element.$container;\n    if (ast.isGroup(parent)) {\n        const elements = parent.elements;\n        const index = elements.indexOf(element);\n        for (let i = index - 1; i >= 0; i--) {\n            const item = elements[i];\n            if (ast.isAction(item)) {\n                return item;\n            }\n            else {\n                const action = streamAllContents(elements[i]).find(ast.isAction);\n                if (action) {\n                    return action;\n                }\n            }\n        }\n    }\n    if (ast.isAbstractElement(parent)) {\n        return getActionAtElement(parent);\n    }\n    else {\n        return undefined;\n    }\n}\nexport function isOptionalCardinality(cardinality, element) {\n    return cardinality === '?' || cardinality === '*' || (ast.isGroup(element) && Boolean(element.guardCondition));\n}\nexport function isArrayCardinality(cardinality) {\n    return cardinality === '*' || cardinality === '+';\n}\nexport function isArrayOperator(operator) {\n    return operator === '+=';\n}\n/**\n * Determines whether the given parser rule is a _data type rule_, meaning that it has a\n * primitive return type like `number`, `boolean`, etc.\n */\nexport function isDataTypeRule(rule) {\n    return isDataTypeRuleInternal(rule, new Set());\n}\nfunction isDataTypeRuleInternal(rule, visited) {\n    if (visited.has(rule)) {\n        return true;\n    }\n    else {\n        visited.add(rule);\n    }\n    for (const node of streamAllContents(rule)) {\n        if (ast.isRuleCall(node)) {\n            if (!node.rule.ref) {\n                // RuleCall to unresolved rule. Don't assume `rule` is a DataType rule.\n                return false;\n            }\n            if (ast.isParserRule(node.rule.ref) && !isDataTypeRuleInternal(node.rule.ref, visited)) {\n                return false;\n            }\n        }\n        else if (ast.isAssignment(node)) {\n            return false;\n        }\n        else if (ast.isAction(node)) {\n            return false;\n        }\n    }\n    return Boolean(rule.definition);\n}\nexport function isDataType(type) {\n    return isDataTypeInternal(type.type, new Set());\n}\nfunction isDataTypeInternal(type, visited) {\n    if (visited.has(type)) {\n        return true;\n    }\n    else {\n        visited.add(type);\n    }\n    if (ast.isArrayType(type)) {\n        return false;\n    }\n    else if (ast.isReferenceType(type)) {\n        return false;\n    }\n    else if (ast.isUnionType(type)) {\n        return type.types.every(e => isDataTypeInternal(e, visited));\n    }\n    else if (ast.isSimpleType(type)) {\n        if (type.primitiveType !== undefined) {\n            return true;\n        }\n        else if (type.stringType !== undefined) {\n            return true;\n        }\n        else if (type.typeRef !== undefined) {\n            const ref = type.typeRef.ref;\n            if (ast.isType(ref)) {\n                return isDataTypeInternal(ref.type, visited);\n            }\n            else {\n                return false;\n            }\n        }\n        else {\n            return false;\n        }\n    }\n    else {\n        return false;\n    }\n}\nexport function getExplicitRuleType(rule) {\n    if (rule.inferredType) {\n        return rule.inferredType.name;\n    }\n    else if (rule.dataType) {\n        return rule.dataType;\n    }\n    else if (rule.returnType) {\n        const refType = rule.returnType.ref;\n        if (refType) {\n            // check if we need to check Action as return type\n            if (ast.isParserRule(refType)) {\n                return refType.name;\n            }\n            else if (ast.isInterface(refType) || ast.isType(refType)) {\n                return refType.name;\n            }\n        }\n    }\n    return undefined;\n}\nexport function getTypeName(type) {\n    var _a;\n    if (ast.isParserRule(type)) {\n        return isDataTypeRule(type) ? type.name : (_a = getExplicitRuleType(type)) !== null && _a !== void 0 ? _a : type.name;\n    }\n    else if (ast.isInterface(type) || ast.isType(type) || ast.isReturnType(type)) {\n        return type.name;\n    }\n    else if (ast.isAction(type)) {\n        const actionType = getActionType(type);\n        if (actionType) {\n            return actionType;\n        }\n    }\n    else if (ast.isInferredType(type)) {\n        return type.name;\n    }\n    throw new Error('Cannot get name of Unknown Type');\n}\nexport function getActionType(action) {\n    var _a;\n    if (action.inferredType) {\n        return action.inferredType.name;\n    }\n    else if ((_a = action.type) === null || _a === void 0 ? void 0 : _a.ref) {\n        return getTypeName(action.type.ref);\n    }\n    return undefined; // not inferring and not referencing a valid type\n}\n/**\n * This function is used at development time (for code generation and the internal type system) to get the type of the AST node produced by the given rule.\n * For data type rules, the name of the rule is returned,\n * e.g. \"INT_value returns number: MY_INT;\" returns \"INT_value\".\n * @param rule the given rule\n * @returns the name of the AST node type of the rule\n */\nexport function getRuleTypeName(rule) {\n    var _a, _b, _c;\n    if (ast.isTerminalRule(rule)) {\n        return (_b = (_a = rule.type) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'string';\n    }\n    else {\n        return isDataTypeRule(rule) ? rule.name : (_c = getExplicitRuleType(rule)) !== null && _c !== void 0 ? _c : rule.name;\n    }\n}\n/**\n * This function is used at runtime to get the actual type of the values produced by the given rule at runtime.\n * For data type rules, the name of the declared return type of the rule is returned (if any),\n * e.g. \"INT_value returns number: MY_INT;\" returns \"number\".\n * @param rule the given rule\n * @returns the name of the type of the produced values of the rule at runtime\n */\nexport function getRuleType(rule) {\n    var _a, _b, _c;\n    if (ast.isTerminalRule(rule)) {\n        return (_b = (_a = rule.type) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'string';\n    }\n    else {\n        return (_c = getExplicitRuleType(rule)) !== null && _c !== void 0 ? _c : rule.name;\n    }\n}\nexport function terminalRegex(terminalRule) {\n    const flags = {\n        s: false,\n        i: false,\n        u: false\n    };\n    const source = abstractElementToRegex(terminalRule.definition, flags);\n    const flagText = Object.entries(flags).filter(([, value]) => value).map(([name]) => name).join('');\n    return new RegExp(source, flagText);\n}\n// Using [\\s\\S]* allows to match everything, compared to . which doesn't match line terminators\nconst WILDCARD = /[\\s\\S]/.source;\nfunction abstractElementToRegex(element, flags) {\n    if (ast.isTerminalAlternatives(element)) {\n        return terminalAlternativesToRegex(element);\n    }\n    else if (ast.isTerminalGroup(element)) {\n        return terminalGroupToRegex(element);\n    }\n    else if (ast.isCharacterRange(element)) {\n        return characterRangeToRegex(element);\n    }\n    else if (ast.isTerminalRuleCall(element)) {\n        const rule = element.rule.ref;\n        if (!rule) {\n            throw new Error('Missing rule reference.');\n        }\n        return withCardinality(abstractElementToRegex(rule.definition), {\n            cardinality: element.cardinality,\n            lookahead: element.lookahead\n        });\n    }\n    else if (ast.isNegatedToken(element)) {\n        return negateTokenToRegex(element);\n    }\n    else if (ast.isUntilToken(element)) {\n        return untilTokenToRegex(element);\n    }\n    else if (ast.isRegexToken(element)) {\n        const lastSlash = element.regex.lastIndexOf('/');\n        const source = element.regex.substring(1, lastSlash);\n        const regexFlags = element.regex.substring(lastSlash + 1);\n        if (flags) {\n            flags.i = regexFlags.includes('i');\n            flags.s = regexFlags.includes('s');\n            flags.u = regexFlags.includes('u');\n        }\n        return withCardinality(source, {\n            cardinality: element.cardinality,\n            lookahead: element.lookahead,\n            wrap: false\n        });\n    }\n    else if (ast.isWildcard(element)) {\n        return withCardinality(WILDCARD, {\n            cardinality: element.cardinality,\n            lookahead: element.lookahead\n        });\n    }\n    else {\n        throw new Error(`Invalid terminal element: ${element === null || element === void 0 ? void 0 : element.$type}`);\n    }\n}\nfunction terminalAlternativesToRegex(alternatives) {\n    return withCardinality(alternatives.elements.map(e => abstractElementToRegex(e)).join('|'), {\n        cardinality: alternatives.cardinality,\n        lookahead: alternatives.lookahead\n    });\n}\nfunction terminalGroupToRegex(group) {\n    return withCardinality(group.elements.map(e => abstractElementToRegex(e)).join(''), {\n        cardinality: group.cardinality,\n        lookahead: group.lookahead\n    });\n}\nfunction untilTokenToRegex(until) {\n    return withCardinality(`${WILDCARD}*?${abstractElementToRegex(until.terminal)}`, {\n        cardinality: until.cardinality,\n        lookahead: until.lookahead\n    });\n}\nfunction negateTokenToRegex(negate) {\n    return withCardinality(`(?!${abstractElementToRegex(negate.terminal)})${WILDCARD}*?`, {\n        cardinality: negate.cardinality,\n        lookahead: negate.lookahead\n    });\n}\nfunction characterRangeToRegex(range) {\n    if (range.right) {\n        return withCardinality(`[${keywordToRegex(range.left)}-${keywordToRegex(range.right)}]`, {\n            cardinality: range.cardinality,\n            lookahead: range.lookahead,\n            wrap: false\n        });\n    }\n    return withCardinality(keywordToRegex(range.left), {\n        cardinality: range.cardinality,\n        lookahead: range.lookahead,\n        wrap: false\n    });\n}\nfunction keywordToRegex(keyword) {\n    return escapeRegExp(keyword.value);\n}\nfunction withCardinality(regex, options) {\n    var _a;\n    if (options.wrap !== false || options.lookahead) {\n        regex = `(${(_a = options.lookahead) !== null && _a !== void 0 ? _a : ''}${regex})`;\n    }\n    if (options.cardinality) {\n        return `${regex}${options.cardinality}`;\n    }\n    return regex;\n}\n//# sourceMappingURL=grammar-utils.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { DefaultNameRegexp } from '../utils/cst-utils.js';\nimport { isCommentTerminal, terminalRegex } from '../utils/grammar-utils.js';\nimport { isMultilineComment } from '../utils/regexp-utils.js';\nimport { isTerminalRule } from './generated/ast.js';\n/**\n * Create the default grammar configuration (used by `createDefaultModule`). This can be overridden in a\n * language-specific module.\n */\nexport function createGrammarConfig(services) {\n    const rules = [];\n    const grammar = services.Grammar;\n    for (const rule of grammar.rules) {\n        if (isTerminalRule(rule) && isCommentTerminal(rule) && isMultilineComment(terminalRegex(rule))) {\n            rules.push(rule.name);\n        }\n    }\n    return {\n        multilineCommentRules: rules,\n        nameRegexp: DefaultNameRegexp\n    };\n}\n//# sourceMappingURL=grammar-config.js.map","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\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\nexport default 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\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\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\nexport default baseGetTag;\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\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isSymbol;\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\nexport default arrayMap;\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\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\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\nexport default baseToString;\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\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\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\nexport default baseTrim;\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\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\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\nexport default toNumber;\n","import toNumber from './toNumber.js';\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\nexport default toFinite;\n","import toFinite from './toFinite.js';\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\nexport default toInteger;\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\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\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\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\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\nexport default 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\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\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\nexport default 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\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\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\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\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\nexport default baseCreate;\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\nexport default apply;\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\nexport default noop;\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\nexport default copyArray;\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\nexport default shortOut;\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\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\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\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\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\nexport default setToString;\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\nexport default arrayEach;\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\nexport default 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\nexport default 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\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\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\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\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\nexport default arrayIncludes;\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\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\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\nexport default baseAssignValue;\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\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\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\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\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\nexport default copyObject;\n","import apply from './_apply.js';\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\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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\nexport default baseRest;\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\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\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\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\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\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default createAssigner;\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\nexport default isPrototype;\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\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isArguments;\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\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\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\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default 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\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\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\nexport default arrayLikeKeys;\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\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\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\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default keys;\n","import assignValue from './_assignValue.js';\nimport copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport isArrayLike from './isArrayLike.js';\nimport isPrototype from './_isPrototype.js';\nimport keys from './keys.js';\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\nexport default assign;\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\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\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\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\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\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default 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\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\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\nexport default Hash;\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\nexport default listCacheClear;\n","import eq from './eq.js';\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\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\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\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\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\nexport default 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\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\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\nexport default getMapData;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\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\nexport default MapCache;\n","import MapCache from './_MapCache.js';\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\nexport default memoize;\n","import memoize from './memoize.js';\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\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\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\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\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\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\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\nexport default castPath;\n","import isSymbol from './isSymbol.js';\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\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\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\nexport default baseGet;\n","import baseGet from './_baseGet.js';\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\nexport default get;\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\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\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\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\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\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\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\nexport default flatten;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\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\nexport default baseSlice;\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\nexport default arrayReduce;\n","import ListCache from './_ListCache.js';\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\nexport default 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\nexport default 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\nexport default 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\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\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\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\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\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\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\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\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\nexport default baseAssignIn;\n","import root from './_root.js';\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\nexport default cloneBuffer;\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\nexport default 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\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\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\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\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\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\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\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\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\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\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\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\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\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\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\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\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\nexport default getTag;\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\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\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\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\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\nexport default 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\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\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\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\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\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\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\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\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\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\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\nexport default baseClone;\n","import baseClone from './_baseClone.js';\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\nexport default clone;\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\nexport default compact;\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\nexport default 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\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\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\nexport default 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\nexport default 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\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\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\nexport default equalArrays;\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\nexport default 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\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\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\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\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\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\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\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\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\nexport default baseIsMatch;\n","import isObject from './isObject.js';\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\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\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\nexport default 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\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\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\nexport default baseMatches;\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\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\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\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\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\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\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\nexport default baseMatchesProperty;\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\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\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\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\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\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\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\nexport default baseIteratee;\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\nexport default arrayAggregator;\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\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\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\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\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\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\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\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\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\nexport default baseEach;\n","import baseEach from './_baseEach.js';\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\nexport default baseAggregator;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\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\nexport default createAggregator;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\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\nexport default defaults;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isArrayLikeObject;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\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\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\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\nexport default difference;\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\nexport default last;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\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\nexport default drop;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\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\nexport default dropRight;\n","import identity from './identity.js';\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\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\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\nexport default forEach;\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\nexport default arrayEvery;\n","import baseEach from './_baseEach.js';\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\nexport default baseEvery;\n","import arrayEvery from './_arrayEvery.js';\nimport baseEvery from './_baseEvery.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default every;\n","import baseEach from './_baseEach.js';\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\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\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\nexport default filter;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\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\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\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\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\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\nexport default find;\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\nexport default head;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\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\nexport default map;\n","import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\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\nexport default flatMap;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\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\nexport default groupBy;\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\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\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\nexport default has;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isString;\n","import arrayMap from './_arrayMap.js';\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\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\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\nexport default values;\n","import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\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\nexport default includes;\n","import baseIndexOf from './_baseIndexOf.js';\nimport toInteger from './toInteger.js';\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\nexport default indexOf;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\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\nexport default isEmpty;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsRegExp;\n","import baseIsRegExp from './_baseIsRegExp.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isRegExp;\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\nexport default isUndefined;\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\nexport default negate;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\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\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\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\nexport default basePickBy;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\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\nexport default pickBy;\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\nexport default baseReduce;\n","import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\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\nexport default reduce;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport negate from './negate.js';\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\nexport default reject;\n","import baseEach from './_baseEach.js';\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\nexport default baseSome;\n","import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default some;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\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\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\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\nexport default baseUniq;\n","import baseUniq from './_baseUniq.js';\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\nexport default uniq;\n","export function PRINT_ERROR(msg) {\n    /* istanbul ignore else - can't override global.console in node.js */\n    if (console && console.error) {\n        console.error(`Error: ${msg}`);\n    }\n}\nexport function PRINT_WARNING(msg) {\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//# sourceMappingURL=print.js.map","export function timer(func) {\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//# sourceMappingURL=timer.js.map","// based on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\nexport function toFastProperties(toBecomeFast) {\n    function FakeConstructor() { }\n    // If our object is used as a constructor, it would receive\n    FakeConstructor.prototype = toBecomeFast;\n    const fakeInstance = new FakeConstructor();\n    function fakeAccess() {\n        return typeof fakeInstance.bar;\n    }\n    // help V8 understand this is a \"real\" prototype by actually using\n    // the fake instance.\n    fakeAccess();\n    fakeAccess();\n    // Always true condition to suppress the Firefox warning of unreachable\n    // code after a return statement.\n    if (1)\n        return toBecomeFast;\n    // Eval prevents optimization of this method (even though this is dead code)\n    // - https://esbuild.github.io/content-types/#direct-eval\n    /* istanbul ignore next */\n    // tslint:disable-next-line\n    (0, eval)(toBecomeFast);\n}\n//# sourceMappingURL=to-fast-properties.js.map","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\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\nexport default 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\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\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\nexport default baseGetTag;\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\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isSymbol;\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\nexport default arrayMap;\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\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\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\nexport default baseToString;\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\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\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\nexport default baseTrim;\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\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\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\nexport default toNumber;\n","import toNumber from './toNumber.js';\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\nexport default toFinite;\n","import toFinite from './toFinite.js';\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\nexport default toInteger;\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\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\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\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\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\nexport default 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\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\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\nexport default 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\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\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\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\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\nexport default apply;\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\nexport default shortOut;\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\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\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\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\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\nexport default setToString;\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\nexport default arrayEach;\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\nexport default 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\nexport default 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\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\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\nexport default baseIndexOf;\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\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\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\nexport default baseAssignValue;\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\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\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\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\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\nexport default copyObject;\n","import apply from './_apply.js';\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\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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\nexport default baseRest;\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\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\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\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\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\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default createAssigner;\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\nexport default isPrototype;\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\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isArguments;\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\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\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\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default 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\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\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\nexport default arrayLikeKeys;\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\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\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\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default keys;\n","import assignValue from './_assignValue.js';\nimport copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport isArrayLike from './isArrayLike.js';\nimport isPrototype from './_isPrototype.js';\nimport keys from './keys.js';\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\nexport default assign;\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\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\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\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\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\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default 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\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\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\nexport default Hash;\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\nexport default listCacheClear;\n","import eq from './eq.js';\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\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\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\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\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\nexport default 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\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\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\nexport default getMapData;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\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\nexport default MapCache;\n","import MapCache from './_MapCache.js';\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\nexport default memoize;\n","import memoize from './memoize.js';\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\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\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\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\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\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\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\nexport default castPath;\n","import isSymbol from './isSymbol.js';\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\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\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\nexport default baseGet;\n","import baseGet from './_baseGet.js';\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\nexport default get;\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\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import ListCache from './_ListCache.js';\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\nexport default 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\nexport default 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\nexport default 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\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\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\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\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\nexport default Stack;\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\nexport default 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\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\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\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\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\nexport default getSymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\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\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\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\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\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\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\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\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\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\nexport default 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\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\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\nexport default 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\nexport default 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\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\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\nexport default equalArrays;\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\nexport default 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\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\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\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\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\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\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\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\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\nexport default baseIsMatch;\n","import isObject from './isObject.js';\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\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\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\nexport default 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\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\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\nexport default baseMatches;\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\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\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\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\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\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\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\nexport default baseMatchesProperty;\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\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\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\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\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\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\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\nexport default 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\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\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\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\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\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\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\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\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\nexport default baseEach;\n","import identity from './identity.js';\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\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\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\nexport default forEach;\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\nexport default arrayEvery;\n","import baseEach from './_baseEach.js';\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\nexport default baseEvery;\n","import arrayEvery from './_arrayEvery.js';\nimport baseEvery from './_baseEvery.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default every;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\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\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\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\nexport default map;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default isString;\n","import arrayMap from './_arrayMap.js';\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\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\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\nexport default values;\n","import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\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\nexport default includes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\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\nexport default baseIsRegExp;\n","import baseIsRegExp from './_baseIsRegExp.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\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\nexport default isRegExp;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\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\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\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\nexport default basePickBy;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\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\nexport default pickBy;\n","import baseEach from './_baseEach.js';\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\nexport default baseSome;\n","import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\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\nexport default some;\n","import { assign, forEach, isRegExp, isString, map, pickBy } from \"lodash-es\";\n// TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\nfunction tokenLabel(tokType) {\n    if (hasTokenLabel(tokType)) {\n        return tokType.LABEL;\n    }\n    else {\n        return tokType.name;\n    }\n}\n// TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\nfunction hasTokenLabel(obj) {\n    return isString(obj.LABEL) && obj.LABEL !== \"\";\n}\nexport class AbstractProduction {\n    get definition() {\n        return this._definition;\n    }\n    set definition(value) {\n        this._definition = value;\n    }\n    constructor(_definition) {\n        this._definition = _definition;\n    }\n    accept(visitor) {\n        visitor.visit(this);\n        forEach(this.definition, (prod) => {\n            prod.accept(visitor);\n        });\n    }\n}\nexport class NonTerminal extends AbstractProduction {\n    constructor(options) {\n        super([]);\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n    set definition(definition) {\n        // immutable\n    }\n    get definition() {\n        if (this.referencedRule !== undefined) {\n            return this.referencedRule.definition;\n        }\n        return [];\n    }\n    accept(visitor) {\n        visitor.visit(this);\n        // don't visit children of a reference, we will get cyclic infinite loops if we do so\n    }\n}\nexport class Rule extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.orgText = \"\";\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class Alternative extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.ignoreAmbiguities = false;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class Option extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class RepetitionMandatory extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class RepetitionMandatoryWithSeparator extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class Repetition extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class RepetitionWithSeparator extends AbstractProduction {\n    constructor(options) {\n        super(options.definition);\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class Alternation extends AbstractProduction {\n    get definition() {\n        return this._definition;\n    }\n    set definition(value) {\n        this._definition = value;\n    }\n    constructor(options) {\n        super(options.definition);\n        this.idx = 1;\n        this.ignoreAmbiguities = false;\n        this.hasPredicates = false;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n}\nexport class Terminal {\n    constructor(options) {\n        this.idx = 1;\n        assign(this, pickBy(options, (v) => v !== undefined));\n    }\n    accept(visitor) {\n        visitor.visit(this);\n    }\n}\nexport function serializeGrammar(topRules) {\n    return map(topRules, serializeProduction);\n}\nexport function serializeProduction(node) {\n    function convertDefinition(definition) {\n        return map(definition, serializeProduction);\n    }\n    /* istanbul ignore else */\n    if (node instanceof NonTerminal) {\n        const serializedNonTerminal = {\n            type: \"NonTerminal\",\n            name: node.nonTerminalName,\n            idx: node.idx,\n        };\n        if (isString(node.label)) {\n            serializedNonTerminal.label = node.label;\n        }\n        return serializedNonTerminal;\n    }\n    else if (node instanceof Alternative) {\n        return {\n            type: \"Alternative\",\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof Option) {\n        return {\n            type: \"Option\",\n            idx: node.idx,\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof RepetitionMandatory) {\n        return {\n            type: \"RepetitionMandatory\",\n            idx: node.idx,\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof RepetitionMandatoryWithSeparator) {\n        return {\n            type: \"RepetitionMandatoryWithSeparator\",\n            idx: node.idx,\n            separator: (serializeProduction(new Terminal({ terminalType: node.separator }))),\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof RepetitionWithSeparator) {\n        return {\n            type: \"RepetitionWithSeparator\",\n            idx: node.idx,\n            separator: (serializeProduction(new Terminal({ terminalType: node.separator }))),\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof Repetition) {\n        return {\n            type: \"Repetition\",\n            idx: node.idx,\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof Alternation) {\n        return {\n            type: \"Alternation\",\n            idx: node.idx,\n            definition: convertDefinition(node.definition),\n        };\n    }\n    else if (node instanceof Terminal) {\n        const serializedTerminal = {\n            type: \"Terminal\",\n            name: node.terminalType.name,\n            label: tokenLabel(node.terminalType),\n            idx: node.idx,\n        };\n        if (isString(node.label)) {\n            serializedTerminal.terminalLabel = node.label;\n        }\n        const pattern = node.terminalType.PATTERN;\n        if (node.terminalType.PATTERN) {\n            serializedTerminal.pattern = isRegExp(pattern)\n                ? pattern.source\n                : pattern;\n        }\n        return serializedTerminal;\n    }\n    else if (node instanceof Rule) {\n        return {\n            type: \"Rule\",\n            name: node.name,\n            orgText: node.orgText,\n            definition: convertDefinition(node.definition),\n        };\n        /* c8 ignore next 3 */\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\n//# sourceMappingURL=model.js.map","import { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal, } from \"./model.js\";\nexport class GAstVisitor {\n    visit(node) {\n        const nodeAny = 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            /* c8 ignore next 2 */\n            default:\n                throw Error(\"non exhaustive match\");\n        }\n    }\n    /* c8 ignore next */\n    visitNonTerminal(node) { }\n    /* c8 ignore next */\n    visitAlternative(node) { }\n    /* c8 ignore next */\n    visitOption(node) { }\n    /* c8 ignore next */\n    visitRepetition(node) { }\n    /* c8 ignore next */\n    visitRepetitionMandatory(node) { }\n    /* c8 ignore next 3 */\n    visitRepetitionMandatoryWithSeparator(node) { }\n    /* c8 ignore next */\n    visitRepetitionWithSeparator(node) { }\n    /* c8 ignore next */\n    visitAlternation(node) { }\n    /* c8 ignore next */\n    visitTerminal(node) { }\n    /* c8 ignore next */\n    visitRule(node) { }\n}\n//# sourceMappingURL=visitor.js.map","import { every, includes, some } from \"lodash-es\";\nimport { AbstractProduction, Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal, } from \"./model.js\";\nexport function isSequenceProd(prod) {\n    return (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}\nexport function isOptionalProd(prod, alreadyVisited = []) {\n    const isDirectlyOptional = prod instanceof Option ||\n        prod instanceof Repetition ||\n        prod instanceof RepetitionWithSeparator;\n    if (isDirectlyOptional) {\n        return true;\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(prod.definition, (subProd) => {\n            return isOptionalProd(subProd, alreadyVisited);\n        });\n    }\n    else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) {\n        // avoiding stack overflow due to infinite recursion\n        return false;\n    }\n    else if (prod instanceof AbstractProduction) {\n        if (prod instanceof NonTerminal) {\n            alreadyVisited.push(prod);\n        }\n        return every(prod.definition, (subProd) => {\n            return isOptionalProd(subProd, alreadyVisited);\n        });\n    }\n    else {\n        return false;\n    }\n}\nexport function isBranchingProd(prod) {\n    return prod instanceof Alternation;\n}\nexport function getProductionDslName(prod) {\n    /* istanbul ignore else */\n    if (prod instanceof NonTerminal) {\n        return \"SUBRULE\";\n    }\n    else if (prod instanceof Option) {\n        return \"OPTION\";\n    }\n    else if (prod instanceof Alternation) {\n        return \"OR\";\n    }\n    else if (prod instanceof RepetitionMandatory) {\n        return \"AT_LEAST_ONE\";\n    }\n    else if (prod instanceof RepetitionMandatoryWithSeparator) {\n        return \"AT_LEAST_ONE_SEP\";\n    }\n    else if (prod instanceof RepetitionWithSeparator) {\n        return \"MANY_SEP\";\n    }\n    else if (prod instanceof Repetition) {\n        return \"MANY\";\n    }\n    else if (prod instanceof Terminal) {\n        return \"CONSUME\";\n        /* c8 ignore next 3 */\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\n//# sourceMappingURL=helpers.js.map","import { drop, forEach } from \"lodash-es\";\nimport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal, } from \"@chevrotain/gast\";\n/**\n *  A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\nexport class RestWalker {\n    walk(prod, prevRest = []) {\n        forEach(prod.definition, (subProd, 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            }\n            else if (subProd instanceof Terminal) {\n                this.walkTerminal(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof Alternative) {\n                this.walkFlat(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof Option) {\n                this.walkOption(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof RepetitionMandatory) {\n                this.walkAtLeastOne(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n                this.walkAtLeastOneSep(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof RepetitionWithSeparator) {\n                this.walkManySep(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof Repetition) {\n                this.walkMany(subProd, currRest, prevRest);\n            }\n            else if (subProd instanceof Alternation) {\n                this.walkOr(subProd, currRest, prevRest);\n            }\n            else {\n                throw Error(\"non exhaustive match\");\n            }\n        });\n    }\n    walkTerminal(terminal, currRest, prevRest) { }\n    walkProdRef(refProd, currRest, prevRest) { }\n    walkFlat(flatProd, currRest, prevRest) {\n        // ABCDEF => after the D the rest is EF\n        const fullOrRest = currRest.concat(prevRest);\n        this.walk(flatProd, fullOrRest);\n    }\n    walkOption(optionProd, currRest, prevRest) {\n        // ABC(DE)?F => after the (DE)? the rest is F\n        const fullOrRest = currRest.concat(prevRest);\n        this.walk(optionProd, fullOrRest);\n    }\n    walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n        // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n        const fullAtLeastOneRest = [\n            new Option({ definition: atLeastOneProd.definition }),\n        ].concat(currRest, prevRest);\n        this.walk(atLeastOneProd, fullAtLeastOneRest);\n    }\n    walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n        // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n        const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest);\n        this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);\n    }\n    walkMany(manyProd, currRest, prevRest) {\n        // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n        const fullManyRest = [\n            new Option({ definition: manyProd.definition }),\n        ].concat(currRest, prevRest);\n        this.walk(manyProd, fullManyRest);\n    }\n    walkManySep(manySepProd, currRest, prevRest) {\n        // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n        const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest);\n        this.walk(manySepProd, fullManySepRest);\n    }\n    walkOr(orProd, currRest, prevRest) {\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, fullOrRest);\n        });\n    }\n}\nfunction restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n    const repSepRest = [\n        new Option({\n            definition: [\n                new Terminal({ terminalType: repSepProd.separator }),\n            ].concat(repSepProd.definition),\n        }),\n    ];\n    const fullRepSepRest = repSepRest.concat(currRest, prevRest);\n    return fullRepSepRest;\n}\n//# sourceMappingURL=rest.js.map","import { flatten, map, uniq } from \"lodash-es\";\nimport { isBranchingProd, isOptionalProd, isSequenceProd, NonTerminal, Terminal, } from \"@chevrotain/gast\";\nexport function first(prod) {\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(prod.referencedRule);\n    }\n    else if (prod instanceof Terminal) {\n        return firstForTerminal(prod);\n    }\n    else if (isSequenceProd(prod)) {\n        return firstForSequence(prod);\n    }\n    else if (isBranchingProd(prod)) {\n        return firstForBranching(prod);\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\nexport function firstForSequence(prod) {\n    let firstSet = [];\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    return uniq(firstSet);\n}\nexport function firstForBranching(prod) {\n    const allAlternativesFirsts = map(prod.definition, (innerProd) => {\n        return first(innerProd);\n    });\n    return uniq(flatten(allAlternativesFirsts));\n}\nexport function firstForTerminal(terminal) {\n    return [terminal.terminalType];\n}\n//# sourceMappingURL=first.js.map","// TODO: can this be removed? where is it used?\nexport const IN = \"_~IN~_\";\n//# sourceMappingURL=constants.js.map","import { RestWalker } from \"./rest.js\";\nimport { first } from \"./first.js\";\nimport { assign, forEach } from \"lodash-es\";\nimport { IN } from \"../constants.js\";\nimport { Alternative } from \"@chevrotain/gast\";\n// This ResyncFollowsWalker computes all of the follows required for RESYNC\n// (skipping reference production).\nexport class ResyncFollowsWalker extends RestWalker {\n    constructor(topProd) {\n        super();\n        this.topProd = topProd;\n        this.follows = {};\n    }\n    startWalking() {\n        this.walk(this.topProd);\n        return this.follows;\n    }\n    walkTerminal(terminal, currRest, prevRest) {\n        // do nothing! just like in the public sector after 13:00\n    }\n    walkProdRef(refProd, currRest, prevRest) {\n        const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +\n            this.topProd.name;\n        const fullRest = 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}\nexport function computeAllProdsFollows(topProductions) {\n    const reSyncFollows = {};\n    forEach(topProductions, (topProd) => {\n        const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();\n        assign(reSyncFollows, currRefsFollow);\n    });\n    return reSyncFollows;\n}\nexport function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {\n    return inner.name + occurenceInParent + IN;\n}\nexport function buildInProdFollowPrefix(terminal) {\n    const terminalName = terminal.terminalType.name;\n    return terminalName + terminal.idx + IN;\n}\n//# sourceMappingURL=follow.js.map","import { RegExpParser, } from \"@chevrotain/regexp-to-ast\";\nlet regExpAstCache = {};\nconst regExpParser = new RegExpParser();\nexport function getRegExpAst(regExp) {\n    const regExpStr = regExp.toString();\n    if (regExpAstCache.hasOwnProperty(regExpStr)) {\n        return regExpAstCache[regExpStr];\n    }\n    else {\n        const regExpAst = regExpParser.pattern(regExpStr);\n        regExpAstCache[regExpStr] = regExpAst;\n        return regExpAst;\n    }\n}\nexport function clearRegExpParserCache() {\n    regExpAstCache = {};\n}\n//# sourceMappingURL=reg_exp_parser.js.map","import { BaseRegExpVisitor, } from \"@chevrotain/regexp-to-ast\";\nimport { every, find, forEach, includes, isArray, values } from \"lodash-es\";\nimport { PRINT_ERROR, PRINT_WARNING } from \"@chevrotain/utils\";\nimport { getRegExpAst } from \"./reg_exp_parser.js\";\nimport { charCodeToOptimizedIndex, minOptimizationVal } from \"./lexer.js\";\nconst complementErrorMessage = \"Complement Sets are not supported for first char optimization\";\nexport const failedOptimizationPrefixMsg = 'Unable to use \"first char\" lexer optimizations:\\n';\nexport function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) {\n    try {\n        const ast = getRegExpAst(regExp);\n        const firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase);\n        return firstChars;\n    }\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(`${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(`${failedOptimizationPrefixMsg}\\n` +\n                `\\tFailed parsing: < ${regExp.toString()} >\\n` +\n                `\\tUsing the @chevrotain/regexp-to-ast library\\n` +\n                \"\\tPlease open an issue at: https://github.com/chevrotain/chevrotain/issues\" +\n                msgSuffix);\n        }\n    }\n    return [];\n}\nexport function firstCharOptimizedIndices(ast, result, ignoreCase) {\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                // 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                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                            }\n                            else {\n                                // range\n                                const range = code;\n                                // cannot optimize when ignoreCase is\n                                if (ignoreCase === true) {\n                                    for (let rangeCode = range.from; rangeCode <= range.to; rangeCode++) {\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 (let rangeCode = range.from; rangeCode <= range.to && rangeCode < minOptimizationVal; rangeCode++) {\n                                        addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n                                    }\n                                    // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n                                    if (range.to >= minOptimizationVal) {\n                                        const minUnOptVal = range.from >= minOptimizationVal\n                                            ? range.from\n                                            : minOptimizationVal;\n                                        const maxUnOptVal = range.to;\n                                        const minOptIdx = charCodeToOptimizedIndex(minUnOptVal);\n                                        const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal);\n                                        for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {\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                // reached a mandatory production, no more **start** codes can be found on this alternative\n                const isOptionalQuantifier = 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                    break;\n                }\n            }\n            break;\n        /* istanbul ignore next */\n        default:\n            throw Error(\"non exhaustive match!\");\n    }\n    // console.log(Object.keys(result).length)\n    return values(result);\n}\nfunction addOptimizedIdxToResult(code, result, ignoreCase) {\n    const optimizedCharIdx = charCodeToOptimizedIndex(code);\n    result[optimizedCharIdx] = optimizedCharIdx;\n    if (ignoreCase === true) {\n        handleIgnoreCase(code, result);\n    }\n}\nfunction handleIgnoreCase(code, result) {\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    }\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}\nfunction findCode(setNode, targetCharCodes) {\n    return find(setNode.value, (codeOrRange) => {\n        if (typeof codeOrRange === \"number\") {\n            return includes(targetCharCodes, codeOrRange);\n        }\n        else {\n            // range\n            const range = codeOrRange;\n            return (find(targetCharCodes, (targetCode) => range.from <= targetCode && targetCode <= range.to) !== undefined);\n        }\n    });\n}\nfunction isWholeOptional(ast) {\n    const quantifier = ast.quantifier;\n    if (quantifier && quantifier.atLeast === 0) {\n        return true;\n    }\n    if (!ast.value) {\n        return false;\n    }\n    return isArray(ast.value)\n        ? every(ast.value, isWholeOptional)\n        : isWholeOptional(ast.value);\n}\nclass CharCodeFinder extends BaseRegExpVisitor {\n    constructor(targetCharCodes) {\n        super();\n        this.targetCharCodes = targetCharCodes;\n        this.found = false;\n    }\n    visitChildren(node) {\n        // No need to keep looking...\n        if (this.found === true) {\n            return;\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        super.visitChildren(node);\n    }\n    visitCharacter(node) {\n        if (includes(this.targetCharCodes, node.value)) {\n            this.found = true;\n        }\n    }\n    visitSet(node) {\n        if (node.complement) {\n            if (findCode(node, this.targetCharCodes) === undefined) {\n                this.found = true;\n            }\n        }\n        else {\n            if (findCode(node, this.targetCharCodes) !== undefined) {\n                this.found = true;\n            }\n        }\n    }\n}\nexport function canMatchCharCode(charCodes, pattern) {\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    }\n    else {\n        return (find(pattern, (char) => {\n            return includes(charCodes, char.charCodeAt(0));\n        }) !== undefined);\n    }\n}\n//# sourceMappingURL=reg_exp.js.map","import { BaseRegExpVisitor } from \"@chevrotain/regexp-to-ast\";\nimport { Lexer, LexerDefinitionErrorType, } from \"./lexer_public.js\";\nimport { compact, defaults, difference, filter, find, first, flatten, forEach, has, includes, indexOf, isArray, isEmpty, isFunction, isRegExp, isString, isUndefined, keys, map, reduce, reject, values, } from \"lodash-es\";\nimport { PRINT_ERROR } from \"@chevrotain/utils\";\nimport { canMatchCharCode, failedOptimizationPrefixMsg, getOptimizedStartCodesIndices, } from \"./reg_exp.js\";\nimport { getRegExpAst } from \"./reg_exp_parser.js\";\nconst PATTERN = \"PATTERN\";\nexport const DEFAULT_MODE = \"defaultMode\";\nexport const MODES = \"modes\";\nexport let SUPPORT_STICKY = typeof new RegExp(\"(?:)\").sticky === \"boolean\";\nexport function disableSticky() {\n    SUPPORT_STICKY = false;\n}\nexport function enableSticky() {\n    SUPPORT_STICKY = true;\n}\nexport function analyzeTokenTypes(tokenTypes, options) {\n    options = defaults(options, {\n        useSticky: SUPPORT_STICKY,\n        debug: false,\n        safeMode: false,\n        positionTracking: \"full\",\n        lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n        tracer: (msg, action) => action(),\n    });\n    const tracer = options.tracer;\n    tracer(\"initCharCodeToOptimizedIndexMap\", () => {\n        initCharCodeToOptimizedIndexMap();\n    });\n    let onlyRelevantTypes;\n    tracer(\"Reject Lexer.NA\", () => {\n        onlyRelevantTypes = reject(tokenTypes, (currType) => {\n            return currType[PATTERN] === Lexer.NA;\n        });\n    });\n    let hasCustom = false;\n    let allTransformedPatterns;\n    tracer(\"Transform Patterns\", () => {\n        hasCustom = false;\n        allTransformedPatterns = map(onlyRelevantTypes, (currType) => {\n            const currPattern = currType[PATTERN];\n            /* istanbul ignore else */\n            if (isRegExp(currPattern)) {\n                const regExpSource = currPattern.source;\n                if (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                    return regExpSource;\n                }\n                else if (regExpSource.length === 2 &&\n                    regExpSource[0] === \"\\\\\" &&\n                    // not a meta character\n                    !includes([\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                    ], regExpSource[1])) {\n                    // escaped meta Characters: /\\+/ /\\[/\n                    // or redundant escaping: /\\a/\n                    // without the escaping \"\\\"\n                    return regExpSource[1];\n                }\n                else {\n                    return options.useSticky\n                        ? addStickyFlag(currPattern)\n                        : addStartOfInput(currPattern);\n                }\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            }\n            else if (typeof currPattern === \"object\") {\n                hasCustom = true;\n                // ICustomPattern\n                return currPattern;\n            }\n            else if (typeof currPattern === \"string\") {\n                if (currPattern.length === 1) {\n                    return currPattern;\n                }\n                else {\n                    const escapedRegExpString = currPattern.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n                    const wrappedRegExp = new RegExp(escapedRegExpString);\n                    return options.useSticky\n                        ? addStickyFlag(wrappedRegExp)\n                        : addStartOfInput(wrappedRegExp);\n                }\n            }\n            else {\n                throw Error(\"non exhaustive match\");\n            }\n        });\n    });\n    let patternIdxToType;\n    let patternIdxToGroup;\n    let patternIdxToLongerAltIdxArr;\n    let patternIdxToPushMode;\n    let patternIdxToPopMode;\n    tracer(\"misc mapping\", () => {\n        patternIdxToType = map(onlyRelevantTypes, (currType) => currType.tokenTypeIdx);\n        patternIdxToGroup = map(onlyRelevantTypes, (clazz) => {\n            const groupName = clazz.GROUP;\n            /* istanbul ignore next */\n            if (groupName === Lexer.SKIPPED) {\n                return undefined;\n            }\n            else if (isString(groupName)) {\n                return groupName;\n            }\n            else if (isUndefined(groupName)) {\n                return false;\n            }\n            else {\n                throw Error(\"non exhaustive match\");\n            }\n        });\n        patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz) => {\n            const longerAltType = clazz.LONGER_ALT;\n            if (longerAltType) {\n                const longerAltIdxArr = isArray(longerAltType)\n                    ? map(longerAltType, (type) => indexOf(onlyRelevantTypes, type))\n                    : [indexOf(onlyRelevantTypes, longerAltType)];\n                return longerAltIdxArr;\n            }\n        });\n        patternIdxToPushMode = map(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE);\n        patternIdxToPopMode = map(onlyRelevantTypes, (clazz) => has(clazz, \"POP_MODE\"));\n    });\n    let patternIdxToCanLineTerminator;\n    tracer(\"Line Terminator Handling\", () => {\n        const lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters);\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                }\n                else {\n                    return (checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false &&\n                        canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN));\n                }\n            });\n        }\n    });\n    let patternIdxToIsCustom;\n    let patternIdxToShort;\n    let emptyGroups;\n    let patternIdxToConfig;\n    tracer(\"Misc Mapping #2\", () => {\n        patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern);\n        patternIdxToShort = map(allTransformedPatterns, isShortPattern);\n        emptyGroups = reduce(onlyRelevantTypes, (acc, clazz) => {\n            const groupName = clazz.GROUP;\n            if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n                acc[groupName] = [];\n            }\n            return acc;\n        }, {});\n        patternIdxToConfig = map(allTransformedPatterns, (x, idx) => {\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    let canBeOptimized = true;\n    let charCodeToPatternIdxToConfig = [];\n    if (!options.safeMode) {\n        tracer(\"First Char Optimization\", () => {\n            charCodeToPatternIdxToConfig = reduce(onlyRelevantTypes, (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                }\n                else if (isArray(currTokType.START_CHARS_HINT)) {\n                    let lastOptimizedIdx;\n                    forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n                        const charCode = 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(result, currOptimizedIdx, 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(`${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(currTokType.PATTERN, options.ensureOptimizations);\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                }\n                else {\n                    if (options.ensureOptimizations) {\n                        PRINT_ERROR(`${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                    canBeOptimized = false;\n                }\n                return result;\n            }, []);\n        });\n    }\n    return {\n        emptyGroups: emptyGroups,\n        patternIdxToConfig: patternIdxToConfig,\n        charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n        hasCustom: hasCustom,\n        canBeOptimized: canBeOptimized,\n    };\n}\nexport function validatePatterns(tokenTypes, validModesNames) {\n    let errors = [];\n    const missingResult = findMissingPatterns(tokenTypes);\n    errors = errors.concat(missingResult.errors);\n    const invalidResult = findInvalidPatterns(missingResult.valid);\n    const validTokenTypes = invalidResult.valid;\n    errors = errors.concat(invalidResult.errors);\n    errors = errors.concat(validateRegExpPattern(validTokenTypes));\n    errors = errors.concat(findInvalidGroupType(validTokenTypes));\n    errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames));\n    errors = errors.concat(findUnreachablePatterns(validTokenTypes));\n    return errors;\n}\nfunction validateRegExpPattern(tokenTypes) {\n    let errors = [];\n    const withRegExpPatterns = filter(tokenTypes, (currTokType) => isRegExp(currTokType[PATTERN]));\n    errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));\n    errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));\n    errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));\n    errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));\n    errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));\n    return errors;\n}\nexport function findMissingPatterns(tokenTypes) {\n    const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n        return !has(currType, PATTERN);\n    });\n    const errors = map(tokenTypesWithMissingPattern, (currType) => {\n        return {\n            message: \"Token Type: ->\" +\n                currType.name +\n                \"<- missing static 'PATTERN' property\",\n            type: LexerDefinitionErrorType.MISSING_PATTERN,\n            tokenTypes: [currType],\n        };\n    });\n    const valid = difference(tokenTypes, tokenTypesWithMissingPattern);\n    return { errors, valid };\n}\nexport function findInvalidPatterns(tokenTypes) {\n    const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n        const pattern = currType[PATTERN];\n        return (!isRegExp(pattern) &&\n            !isFunction(pattern) &&\n            !has(pattern, \"exec\") &&\n            !isString(pattern));\n    });\n    const errors = map(tokenTypesWithInvalidPattern, (currType) => {\n        return {\n            message: \"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    const valid = difference(tokenTypes, tokenTypesWithInvalidPattern);\n    return { errors, valid };\n}\nconst end_of_input = /[^\\\\][$]/;\nexport function findEndOfInputAnchor(tokenTypes) {\n    class EndAnchorFinder extends BaseRegExpVisitor {\n        constructor() {\n            super(...arguments);\n            this.found = false;\n        }\n        visitEndAnchor(node) {\n            this.found = true;\n        }\n    }\n    const invalidRegex = filter(tokenTypes, (currType) => {\n        const pattern = currType.PATTERN;\n        try {\n            const regexpAst = getRegExpAst(pattern);\n            const endAnchorVisitor = new EndAnchorFinder();\n            endAnchorVisitor.visit(regexpAst);\n            return endAnchorVisitor.found;\n        }\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.source);\n        }\n    });\n    const errors = map(invalidRegex, (currType) => {\n        return {\n            message: \"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    return errors;\n}\nexport function findEmptyMatchRegExps(tokenTypes) {\n    const matchesEmptyString = filter(tokenTypes, (currType) => {\n        const pattern = currType.PATTERN;\n        return pattern.test(\"\");\n    });\n    const errors = map(matchesEmptyString, (currType) => {\n        return {\n            message: \"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    return errors;\n}\nconst start_of_input = /[^\\\\[][\\^]|^\\^/;\nexport function findStartOfInputAnchor(tokenTypes) {\n    class StartAnchorFinder extends BaseRegExpVisitor {\n        constructor() {\n            super(...arguments);\n            this.found = false;\n        }\n        visitStartAnchor(node) {\n            this.found = true;\n        }\n    }\n    const invalidRegex = filter(tokenTypes, (currType) => {\n        const pattern = currType.PATTERN;\n        try {\n            const regexpAst = getRegExpAst(pattern);\n            const startAnchorVisitor = new StartAnchorFinder();\n            startAnchorVisitor.visit(regexpAst);\n            return startAnchorVisitor.found;\n        }\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    const errors = map(invalidRegex, (currType) => {\n        return {\n            message: \"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    return errors;\n}\nexport function findUnsupportedFlags(tokenTypes) {\n    const invalidFlags = filter(tokenTypes, (currType) => {\n        const pattern = currType[PATTERN];\n        return pattern instanceof RegExp && (pattern.multiline || pattern.global);\n    });\n    const errors = map(invalidFlags, (currType) => {\n        return {\n            message: \"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    return errors;\n}\n// This can only test for identical duplicate RegExps, not semantically equivalent ones.\nexport function findDuplicatePatterns(tokenTypes) {\n    const found = [];\n    let identicalPatterns = map(tokenTypes, (outerType) => {\n        return reduce(tokenTypes, (result, innerType) => {\n            if (outerType.PATTERN.source === innerType.PATTERN.source &&\n                !includes(found, innerType) &&\n                innerType.PATTERN !== Lexer.NA) {\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    });\n    identicalPatterns = compact(identicalPatterns);\n    const duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n        return currIdenticalSet.length > 1;\n    });\n    const errors = map(duplicatePatterns, (setOfIdentical) => {\n        const tokenTypeNames = map(setOfIdentical, (currType) => {\n            return currType.name;\n        });\n        const dupPatternSrc = first(setOfIdentical).PATTERN;\n        return {\n            message: `The same RegExp pattern ->${dupPatternSrc}<-` +\n                `has been used in all of the following Token Types: ${tokenTypeNames.join(\", \")} <-`,\n            type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n            tokenTypes: setOfIdentical,\n        };\n    });\n    return errors;\n}\nexport function findInvalidGroupType(tokenTypes) {\n    const invalidTypes = filter(tokenTypes, (clazz) => {\n        if (!has(clazz, \"GROUP\")) {\n            return false;\n        }\n        const group = clazz.GROUP;\n        return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group);\n    });\n    const errors = map(invalidTypes, (currType) => {\n        return {\n            message: \"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    return errors;\n}\nexport function findModesThatDoNotExist(tokenTypes, validModes) {\n    const invalidModes = filter(tokenTypes, (clazz) => {\n        return (clazz.PUSH_MODE !== undefined && !includes(validModes, clazz.PUSH_MODE));\n    });\n    const errors = map(invalidModes, (tokType) => {\n        const msg = `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    return errors;\n}\nexport function findUnreachablePatterns(tokenTypes) {\n    const errors = [];\n    const canBeTested = reduce(tokenTypes, (result, tokType, idx) => {\n        const pattern = tokType.PATTERN;\n        if (pattern === Lexer.NA) {\n            return result;\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        }\n        else if (isRegExp(pattern) && noMetaChar(pattern)) {\n            result.push({ str: pattern.source, idx, tokenType: tokType });\n        }\n        return result;\n    }, []);\n    forEach(tokenTypes, (tokType, testIdx) => {\n        forEach(canBeTested, ({ str, idx, tokenType }) => {\n            if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n                const msg = `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    return errors;\n}\nfunction testTokenType(str, pattern) {\n    /* istanbul ignore else */\n    if (isRegExp(pattern)) {\n        const regExpArray = pattern.exec(str);\n        return regExpArray !== null && regExpArray.index === 0;\n    }\n    else if (isFunction(pattern)) {\n        // maintain the API of custom patterns\n        return pattern(str, 0, [], {});\n    }\n    else if (has(pattern, \"exec\")) {\n        // maintain the API of custom patterns\n        return pattern.exec(str, 0, [], {});\n    }\n    else if (typeof pattern === \"string\") {\n        return pattern === str;\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\nfunction noMetaChar(regExp) {\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 (find(metaChars, (char) => regExp.source.indexOf(char) !== -1) === undefined);\n}\nexport function addStartOfInput(pattern) {\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}\nexport function addStickyFlag(pattern) {\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}\nexport function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n    const errors = [];\n    // some run time checks to help the end users.\n    if (!has(lexerDefinition, DEFAULT_MODE)) {\n        errors.push({\n            message: \"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: \"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    if (has(lexerDefinition, MODES) &&\n        has(lexerDefinition, DEFAULT_MODE) &&\n        !has(lexerDefinition.modes, lexerDefinition.defaultMode)) {\n        errors.push({\n            message: `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    if (has(lexerDefinition, MODES)) {\n        forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n            forEach(currModeValue, (currTokType, currIdx) => {\n                if (isUndefined(currTokType)) {\n                    errors.push({\n                        message: `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                }\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 (!isUndefined(currLongerAlt) &&\n                            !includes(currModeValue, currLongerAlt)) {\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    return errors;\n}\nexport function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n    const warnings = [];\n    let hasAnyLineBreak = false;\n    const allTokenTypes = compact(flatten(values(lexerDefinition.modes)));\n    const concreteTokenTypes = reject(allTokenTypes, (currType) => currType[PATTERN] === Lexer.NA);\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            }\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                }\n                else {\n                    if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n                        hasAnyLineBreak = true;\n                    }\n                }\n            }\n        });\n    }\n    if (trackLines && !hasAnyLineBreak) {\n        warnings.push({\n            message: \"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}\nexport function cloneEmptyGroups(emptyGroups) {\n    const clonedResult = {};\n    const groupKeys = keys(emptyGroups);\n    forEach(groupKeys, (currKey) => {\n        const currGroupValue = emptyGroups[currKey];\n        /* istanbul ignore else */\n        if (isArray(currGroupValue)) {\n            clonedResult[currKey] = [];\n        }\n        else {\n            throw Error(\"non exhaustive match\");\n        }\n    });\n    return clonedResult;\n}\n// TODO: refactor to avoid duplication\nexport function isCustomPattern(tokenType) {\n    const pattern = tokenType.PATTERN;\n    /* istanbul ignore else */\n    if (isRegExp(pattern)) {\n        return false;\n    }\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    }\n    else if (has(pattern, \"exec\")) {\n        // ICustomPattern\n        return true;\n    }\n    else if (isString(pattern)) {\n        return false;\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\nexport function isShortPattern(pattern) {\n    if (isString(pattern) && pattern.length === 1) {\n        return pattern.charCodeAt(0);\n    }\n    else {\n        return false;\n    }\n}\n/**\n * Faster than using a RegExp for default newline detection during lexing.\n */\nexport const LineTerminatorOptimizedTester = {\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            }\n            else if (c === 13) {\n                if (text.charCodeAt(i + 1) === 10) {\n                    this.lastIndex = i + 2;\n                }\n                else {\n                    this.lastIndex = i + 1;\n                }\n                return true;\n            }\n        }\n        return false;\n    },\n    lastIndex: 0,\n};\nfunction checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {\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    }\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);\n            }\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.message,\n                };\n            }\n            return false;\n        }\n        else if (isString(tokType.PATTERN)) {\n            // string literal patterns can always be analyzed to detect line terminator usage\n            return false;\n        }\n        else if (isCustomPattern(tokType)) {\n            // custom token types\n            return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK };\n        }\n        else {\n            throw Error(\"non exhaustive match\");\n        }\n    }\n}\nexport function buildLineBreakIssueMessage(tokType, details) {\n    /* istanbul ignore else */\n    if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n        return (\"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 (\"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}\nfunction getCharCodes(charsOrCodes) {\n    const charCodes = map(charsOrCodes, (numOrString) => {\n        if (isString(numOrString)) {\n            return numOrString.charCodeAt(0);\n        }\n        else {\n            return numOrString;\n        }\n    });\n    return charCodes;\n}\nfunction addToMapOfArrays(map, key, value) {\n    if (map[key] === undefined) {\n        map[key] = [value];\n    }\n    else {\n        map[key].push(value);\n    }\n}\nexport const minOptimizationVal = 256;\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 = [];\nexport function charCodeToOptimizedIndex(charCode) {\n    return charCode < minOptimizationVal\n        ? charCode\n        : charCodeToOptimizedIdxMap[charCode];\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//# sourceMappingURL=lexer.js.map","import { clone, compact, difference, flatten, forEach, has, includes, isArray, isEmpty, map, } from \"lodash-es\";\nexport function tokenStructuredMatcher(tokInstance, tokConstructor) {\n    const instanceType = tokInstance.tokenTypeIdx;\n    if (instanceType === tokConstructor.tokenTypeIdx) {\n        return true;\n    }\n    else {\n        return (tokConstructor.isParent === true &&\n            tokConstructor.categoryMatchesMap[instanceType] === true);\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(token, tokType) {\n    return token.tokenTypeIdx === tokType.tokenTypeIdx;\n}\nexport let tokenShortNameIdx = 1;\nexport const tokenIdxToClass = {};\nexport function augmentTokenTypes(tokenTypes) {\n    // collect the parent Token Types as well.\n    const tokenTypesAndParents = expandCategories(tokenTypes);\n    // add required tokenType and categoryMatches properties\n    assignTokenDefaultProps(tokenTypesAndParents);\n    // fill up the categoryMatches\n    assignCategoriesMapProp(tokenTypesAndParents);\n    assignCategoriesTokensProp(tokenTypesAndParents);\n    forEach(tokenTypesAndParents, (tokType) => {\n        tokType.isParent = tokType.categoryMatches.length > 0;\n    });\n}\nexport function expandCategories(tokenTypes) {\n    let result = clone(tokenTypes);\n    let categories = tokenTypes;\n    let searching = true;\n    while (searching) {\n        categories = compact(flatten(map(categories, (currTokType) => currTokType.CATEGORIES)));\n        const newCategories = difference(categories, result);\n        result = result.concat(newCategories);\n        if (isEmpty(newCategories)) {\n            searching = false;\n        }\n        else {\n            categories = newCategories;\n        }\n    }\n    return result;\n}\nexport function assignTokenDefaultProps(tokenTypes) {\n    forEach(tokenTypes, (currTokType) => {\n        if (!hasShortKeyProperty(currTokType)) {\n            tokenIdxToClass[tokenShortNameIdx] = currTokType;\n            currTokType.tokenTypeIdx = tokenShortNameIdx++;\n        }\n        // CATEGORIES? : TokenType | TokenType[]\n        if (hasCategoriesProperty(currTokType) &&\n            !isArray(currTokType.CATEGORIES)\n        // &&\n        // !isUndefined(currTokType.CATEGORIES.PATTERN)\n        ) {\n            currTokType.CATEGORIES = [currTokType.CATEGORIES];\n        }\n        if (!hasCategoriesProperty(currTokType)) {\n            currTokType.CATEGORIES = [];\n        }\n        if (!hasExtendingTokensTypesProperty(currTokType)) {\n            currTokType.categoryMatches = [];\n        }\n        if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n            currTokType.categoryMatchesMap = {};\n        }\n    });\n}\nexport function assignCategoriesTokensProp(tokenTypes) {\n    forEach(tokenTypes, (currTokType) => {\n        // avoid duplications\n        currTokType.categoryMatches = [];\n        forEach(currTokType.categoryMatchesMap, (val, key) => {\n            currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx);\n        });\n    });\n}\nexport function assignCategoriesMapProp(tokenTypes) {\n    forEach(tokenTypes, (currTokType) => {\n        singleAssignCategoriesToksMap([], currTokType);\n    });\n}\nexport function singleAssignCategoriesToksMap(path, nextNode) {\n    forEach(path, (pathNode) => {\n        nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true;\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}\nexport function hasShortKeyProperty(tokType) {\n    return has(tokType, \"tokenTypeIdx\");\n}\nexport function hasCategoriesProperty(tokType) {\n    return has(tokType, \"CATEGORIES\");\n}\nexport function hasExtendingTokensTypesProperty(tokType) {\n    return has(tokType, \"categoryMatches\");\n}\nexport function hasExtendingTokensTypesMapProperty(tokType) {\n    return has(tokType, \"categoryMatchesMap\");\n}\nexport function isTokenType(tokType) {\n    return has(tokType, \"tokenTypeIdx\");\n}\n//# sourceMappingURL=tokens.js.map","export const defaultLexerErrorProvider = {\n    buildUnableToPopLexerModeMessage(token) {\n        return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`;\n    },\n    buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column) {\n        return (`unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset},` + ` skipped ${length} characters.`);\n    },\n};\n//# sourceMappingURL=lexer_errors_public.js.map","import { analyzeTokenTypes, charCodeToOptimizedIndex, cloneEmptyGroups, DEFAULT_MODE, LineTerminatorOptimizedTester, performRuntimeChecks, performWarningRuntimeChecks, SUPPORT_STICKY, validatePatterns, } from \"./lexer.js\";\nimport { assign, clone, forEach, identity, isArray, isEmpty, isUndefined, keys, last, map, noop, reduce, reject, } from \"lodash-es\";\nimport { PRINT_WARNING, timer, toFastProperties } from \"@chevrotain/utils\";\nimport { augmentTokenTypes } from \"./tokens.js\";\nimport { defaultLexerErrorProvider } from \"./lexer_errors_public.js\";\nimport { clearRegExpParserCache } from \"./reg_exp_parser.js\";\nexport var LexerDefinitionErrorType;\n(function (LexerDefinitionErrorType) {\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"MISSING_PATTERN\"] = 0] = \"MISSING_PATTERN\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"INVALID_PATTERN\"] = 1] = \"INVALID_PATTERN\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"EOI_ANCHOR_FOUND\"] = 2] = \"EOI_ANCHOR_FOUND\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"UNSUPPORTED_FLAGS_FOUND\"] = 3] = \"UNSUPPORTED_FLAGS_FOUND\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"DUPLICATE_PATTERNS_FOUND\"] = 4] = \"DUPLICATE_PATTERNS_FOUND\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"INVALID_GROUP_TYPE_FOUND\"] = 5] = \"INVALID_GROUP_TYPE_FOUND\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"PUSH_MODE_DOES_NOT_EXIST\"] = 6] = \"PUSH_MODE_DOES_NOT_EXIST\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\"] = 7] = \"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\"] = 8] = \"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\"] = 9] = \"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\"] = 10] = \"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"SOI_ANCHOR_FOUND\"] = 11] = \"SOI_ANCHOR_FOUND\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"EMPTY_MATCH_PATTERN\"] = 12] = \"EMPTY_MATCH_PATTERN\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"NO_LINE_BREAKS_FLAGS\"] = 13] = \"NO_LINE_BREAKS_FLAGS\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"UNREACHABLE_PATTERN\"] = 14] = \"UNREACHABLE_PATTERN\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"IDENTIFY_TERMINATOR\"] = 15] = \"IDENTIFY_TERMINATOR\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"CUSTOM_LINE_BREAK\"] = 16] = \"CUSTOM_LINE_BREAK\";\n    LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\"] = 17] = \"MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\";\n})(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}));\nconst DEFAULT_LEXER_CONFIG = {\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};\nObject.freeze(DEFAULT_LEXER_CONFIG);\nexport class Lexer {\n    constructor(lexerDefinition, config = DEFAULT_LEXER_CONFIG) {\n        this.lexerDefinition = lexerDefinition;\n        this.lexerDefinitionErrors = [];\n        this.lexerDefinitionWarning = [];\n        this.patternIdxToConfig = {};\n        this.charCodeToPatternIdxToConfig = {};\n        this.modes = [];\n        this.emptyGroups = {};\n        this.trackStartLines = true;\n        this.trackEndLines = true;\n        this.hasCustom = false;\n        this.canModeBeOptimized = {};\n        // Duplicated from the parser's perf trace trait to allow future extraction\n        // of the lexer to a separate package.\n        this.TRACE_INIT = (phaseDesc, phaseImpl) => {\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            }\n            else {\n                return phaseImpl();\n            }\n        };\n        if (typeof config === \"boolean\") {\n            throw Error(\"The second argument to the Lexer constructor is now an ILexerConfig Object.\\n\" +\n                \"a boolean 2nd argument is no longer supported\");\n        }\n        // todo: defaults func?\n        this.config = assign({}, DEFAULT_LEXER_CONFIG, config);\n        const traceInitVal = this.config.traceInitPerf;\n        if (traceInitVal === true) {\n            this.traceInitMaxIdent = Infinity;\n            this.traceInitPerf = true;\n        }\n        else if (typeof traceInitVal === \"number\") {\n            this.traceInitMaxIdent = traceInitVal;\n            this.traceInitPerf = true;\n        }\n        this.traceInitIndent = -1;\n        this.TRACE_INIT(\"Lexer Constructor\", () => {\n            let actualDefinition;\n            let hasOnlySingleMode = true;\n            this.TRACE_INIT(\"Lexer Config handling\", () => {\n                if (this.config.lineTerminatorsPattern ===\n                    DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {\n                    // optimized built-in implementation for the defaults definition of lineTerminators\n                    this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester;\n                }\n                else {\n                    if (this.config.lineTerminatorCharacters ===\n                        DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {\n                        throw Error(\"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                if (config.safeMode && config.ensureOptimizations) {\n                    throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');\n                }\n                this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking);\n                this.trackEndLines = /full/i.test(this.config.positionTracking);\n                // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n                if (isArray(lexerDefinition)) {\n                    actualDefinition = {\n                        modes: { defaultMode: clone(lexerDefinition) },\n                        defaultMode: DEFAULT_MODE,\n                    };\n                }\n                else {\n                    // no conversion needed, input should already be a IMultiModeLexerDefinition\n                    hasOnlySingleMode = false;\n                    actualDefinition = clone(lexerDefinition);\n                }\n            });\n            if (this.config.skipValidations === false) {\n                this.TRACE_INIT(\"performRuntimeChecks\", () => {\n                    this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters));\n                });\n                this.TRACE_INIT(\"performWarningRuntimeChecks\", () => {\n                    this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters));\n                });\n            }\n            // for extra robustness to avoid throwing an none informative error message\n            actualDefinition.modes = actualDefinition.modes\n                ? actualDefinition.modes\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(currModeValue, (currTokType) => isUndefined(currTokType));\n            });\n            const allModeNames = keys(actualDefinition.modes);\n            forEach(actualDefinition.modes, (currModDef, currModName) => {\n                this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n                    this.modes.push(currModName);\n                    if (this.config.skipValidations === false) {\n                        this.TRACE_INIT(`validatePatterns`, () => {\n                            this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(validatePatterns(currModDef, allModeNames));\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                        let currAnalyzeResult;\n                        this.TRACE_INIT(`analyzeTokenTypes`, () => {\n                            currAnalyzeResult = analyzeTokenTypes(currModDef, {\n                                lineTerminatorCharacters: this.config.lineTerminatorCharacters,\n                                positionTracking: config.positionTracking,\n                                ensureOptimizations: config.ensureOptimizations,\n                                safeMode: config.safeMode,\n                                tracer: this.TRACE_INIT,\n                            });\n                        });\n                        this.patternIdxToConfig[currModName] =\n                            currAnalyzeResult.patternIdxToConfig;\n                        this.charCodeToPatternIdxToConfig[currModName] =\n                            currAnalyzeResult.charCodeToPatternIdxToConfig;\n                        this.emptyGroups = assign({}, this.emptyGroups, currAnalyzeResult.emptyGroups);\n                        this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom;\n                        this.canModeBeOptimized[currModName] =\n                            currAnalyzeResult.canBeOptimized;\n                    }\n                });\n            });\n            this.defaultMode = actualDefinition.defaultMode;\n            if (!isEmpty(this.lexerDefinitionErrors) &&\n                !this.config.deferDefinitionErrorsHandling) {\n                const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n                    return error.message;\n                });\n                const allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n                throw new Error(\"Errors detected in definition of Lexer:\\n\" + allErrMessagesString);\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            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 = identity;\n                    this.match = this.matchWithTest;\n                }\n                else {\n                    this.updateLastIndex = noop;\n                    this.match = this.matchWithExec;\n                }\n                if (hasOnlySingleMode) {\n                    this.handleModes = noop;\n                }\n                if (this.trackStartLines === false) {\n                    this.computeNewColumn = identity;\n                }\n                if (this.trackEndLines === false) {\n                    this.updateTokenEndLineColumnLocation = noop;\n                }\n                if (/full/i.test(this.config.positionTracking)) {\n                    this.createTokenInstance = this.createFullToken;\n                }\n                else if (/onlyStart/i.test(this.config.positionTracking)) {\n                    this.createTokenInstance = this.createStartOnlyToken;\n                }\n                else if (/onlyOffset/i.test(this.config.positionTracking)) {\n                    this.createTokenInstance = this.createOffsetOnlyToken;\n                }\n                else {\n                    throw Error(`Invalid <positionTracking> config option: \"${this.config.positionTracking}\"`);\n                }\n                if (this.hasCustom) {\n                    this.addToken = this.addTokenUsingPush;\n                    this.handlePayload = this.handlePayloadWithCustom;\n                }\n                else {\n                    this.addToken = this.addTokenUsingMemberAccess;\n                    this.handlePayload = this.handlePayloadNoCustom;\n                }\n            });\n            this.TRACE_INIT(\"Failed Optimization Warnings\", () => {\n                const unOptimizedModes = reduce(this.canModeBeOptimized, (cannotBeOptimized, canBeOptimized, modeName) => {\n                    if (canBeOptimized === false) {\n                        cannotBeOptimized.push(modeName);\n                    }\n                    return cannotBeOptimized;\n                }, []);\n                if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n                    throw Error(`Lexer Modes: < ${unOptimizedModes.join(\", \")} > 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            this.TRACE_INIT(\"clearRegExpParserCache\", () => {\n                clearRegExpParserCache();\n            });\n            this.TRACE_INIT(\"toFastProperties\", () => {\n                toFastProperties(this);\n            });\n        });\n    }\n    tokenize(text, initialMode = this.defaultMode) {\n        if (!isEmpty(this.lexerDefinitionErrors)) {\n            const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n                return error.message;\n            });\n            const allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n            throw new Error(\"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" +\n                allErrMessagesString);\n        }\n        return this.tokenizeInternal(text, initialMode);\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    tokenizeInternal(text, initialMode) {\n        let i, j, k, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group, tokType, newToken, errLength, droppedChar, msg, 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 = [];\n        let line = this.trackStartLines ? 1 : undefined;\n        let column = this.trackStartLines ? 1 : undefined;\n        const groups = cloneEmptyGroups(this.emptyGroups);\n        const trackLines = this.trackStartLines;\n        const lineTerminatorPattern = this.config.lineTerminatorsPattern;\n        let currModePatternsLength = 0;\n        let patternIdxToConfig = [];\n        let currCharCodeToPatternIdxToConfig = [];\n        const modeStack = [];\n        const emptyArray = [];\n        Object.freeze(emptyArray);\n        let getPossiblePatterns;\n        function getPossiblePatternsSlow() {\n            return patternIdxToConfig;\n        }\n        function getPossiblePatternsOptimized(charCode) {\n            const optimizedCharIdx = charCodeToOptimizedIndex(charCode);\n            const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx];\n            if (possiblePatterns === undefined) {\n                return emptyArray;\n            }\n            else {\n                return possiblePatterns;\n            }\n        }\n        const pop_mode = (popToken) => {\n            // TODO: perhaps avoid this error in the edge case there is no more input?\n            if (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                // 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 = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken);\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            }\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 = this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n                if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n                    getPossiblePatterns = getPossiblePatternsOptimized;\n                }\n                else {\n                    getPossiblePatterns = getPossiblePatternsSlow;\n                }\n            }\n        };\n        function push_mode(newMode) {\n            modeStack.push(newMode);\n            currCharCodeToPatternIdxToConfig =\n                this.charCodeToPatternIdxToConfig[newMode];\n            patternIdxToConfig = this.patternIdxToConfig[newMode];\n            currModePatternsLength = patternIdxToConfig.length;\n            currModePatternsLength = patternIdxToConfig.length;\n            const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n            if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n                getPossiblePatterns = getPossiblePatternsOptimized;\n            }\n            else {\n                getPossiblePatterns = getPossiblePatternsSlow;\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        let currConfig;\n        const recoveryEnabled = this.config.recoveryEnabled;\n        while (offset < orgLength) {\n            matchedImage = null;\n            const nextCharCode = orgText.charCodeAt(offset);\n            const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode);\n            const chosenPatternsLength = chosenPatternIdxToConfig.length;\n            for (i = 0; i < chosenPatternsLength; i++) {\n                currConfig = chosenPatternIdxToConfig[i];\n                const currPattern = currConfig.pattern;\n                payload = null;\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;\n                    }\n                }\n                else if (currConfig.isCustom === true) {\n                    match = currPattern.exec(orgText, offset, matchedTokens, groups);\n                    if (match !== null) {\n                        matchedImage = match[0];\n                        if (match.payload !== undefined) {\n                            payload = match.payload;\n                        }\n                    }\n                    else {\n                        matchedImage = null;\n                    }\n                }\n                else {\n                    this.updateLastIndex(currPattern, offset);\n                    matchedImage = this.match(currPattern, text, offset);\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                            // 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.exec(orgText, offset, matchedTokens, groups);\n                                if (match !== null) {\n                                    matchAltImage = match[0];\n                                    if (match.payload !== undefined) {\n                                        altPayload = match.payload;\n                                    }\n                                }\n                                else {\n                                    matchAltImage = null;\n                                }\n                            }\n                            else {\n                                this.updateLastIndex(longerAltPattern, offset);\n                                matchAltImage = this.match(longerAltPattern, text, offset);\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            // 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(matchedImage, offset, tokType, currConfig.tokenType, line, column, imageLength);\n                    this.handlePayload(newToken, payload);\n                    // TODO: optimize NOOP in case there are no special groups?\n                    if (group === false) {\n                        matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken);\n                    }\n                    else {\n                        groups[group].push(newToken);\n                    }\n                }\n                text = this.chopInput(text, imageLength);\n                offset = offset + imageLength;\n                // TODO: with newlines the column may be assigned twice\n                column = this.computeNewColumn(column, imageLength);\n                if (trackLines === true && currConfig.canLineTerminator === true) {\n                    let numOfLTsInMatch = 0;\n                    let foundTerminator;\n                    let lastLTEndOffset;\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                    if (numOfLTsInMatch !== 0) {\n                        line = line + numOfLTsInMatch;\n                        column = imageLength - lastLTEndOffset;\n                        this.updateTokenEndLineColumnLocation(newToken, group, lastLTEndOffset, numOfLTsInMatch, line, column, imageLength);\n                    }\n                }\n                // will be NOOP if no modes present\n                this.handleModes(currConfig, pop_mode, push_mode, newToken);\n            }\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                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                        // 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                        }\n                        else if (currConfig.isCustom === true) {\n                            foundResyncPoint =\n                                currPattern.exec(orgText, offset, matchedTokens, groups) !== null;\n                        }\n                        else {\n                            this.updateLastIndex(currPattern, offset);\n                            foundResyncPoint = currPattern.exec(text) !== null;\n                        }\n                        if (foundResyncPoint === true) {\n                            break;\n                        }\n                    }\n                }\n                errLength = offset - errorStartOffset;\n                column = this.computeNewColumn(column, errLength);\n                // at this point we either re-synced or reached the end of the input text\n                msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn);\n                errors.push({\n                    offset: errorStartOffset,\n                    line: errorLine,\n                    column: errorColumn,\n                    length: errLength,\n                    message: msg,\n                });\n                if (recoveryEnabled === false) {\n                    break;\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        return {\n            tokens: matchedTokens,\n            groups: groups,\n            errors: errors,\n        };\n    }\n    handleModes(config, pop_mode, push_mode, newToken) {\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        }\n        else if (config.push !== undefined) {\n            push_mode.call(this, config.push);\n        }\n    }\n    chopInput(text, length) {\n        return text.substring(length);\n    }\n    updateLastIndex(regExp, newLastIndex) {\n        regExp.lastIndex = newLastIndex;\n    }\n    // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n    updateTokenEndLineColumnLocation(newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {\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    computeNewColumn(oldColumn, imageLength) {\n        return oldColumn + imageLength;\n    }\n    createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) {\n        return {\n            image,\n            startOffset,\n            tokenTypeIdx,\n            tokenType,\n        };\n    }\n    createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {\n        return {\n            image,\n            startOffset,\n            startLine,\n            startColumn,\n            tokenTypeIdx,\n            tokenType,\n        };\n    }\n    createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {\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    addTokenUsingPush(tokenVector, index, tokenToAdd) {\n        tokenVector.push(tokenToAdd);\n        return index;\n    }\n    addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) {\n        tokenVector[index] = tokenToAdd;\n        index++;\n        return index;\n    }\n    handlePayloadNoCustom(token, payload) { }\n    handlePayloadWithCustom(token, payload) {\n        if (payload !== null) {\n            token.payload = payload;\n        }\n    }\n    matchWithTest(pattern, text, offset) {\n        const found = pattern.test(text);\n        if (found === true) {\n            return text.substring(offset, pattern.lastIndex);\n        }\n        return null;\n    }\n    matchWithExec(pattern, text) {\n        const regExpArray = pattern.exec(text);\n        return regExpArray !== null ? regExpArray[0] : null;\n    }\n}\nLexer.SKIPPED = \"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.\";\nLexer.NA = /NOT_APPLICABLE/;\n//# sourceMappingURL=lexer_public.js.map","import { has, isString, isUndefined } from \"lodash-es\";\nimport { Lexer } from \"./lexer_public.js\";\nimport { augmentTokenTypes, tokenStructuredMatcher } from \"./tokens.js\";\nexport function tokenLabel(tokType) {\n    if (hasTokenLabel(tokType)) {\n        return tokType.LABEL;\n    }\n    else {\n        return tokType.name;\n    }\n}\nexport function tokenName(tokType) {\n    return tokType.name;\n}\nexport function hasTokenLabel(obj) {\n    return isString(obj.LABEL) && obj.LABEL !== \"\";\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\";\nexport function createToken(config) {\n    return createTokenInternal(config);\n}\nfunction createTokenInternal(config) {\n    const pattern = config.pattern;\n    const tokenType = {};\n    tokenType.name = config.name;\n    if (!isUndefined(pattern)) {\n        tokenType.PATTERN = pattern;\n    }\n    if (has(config, PARENT)) {\n        throw (\"The parent property is no longer supported.\\n\" +\n            \"See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.\");\n    }\n    if (has(config, CATEGORIES)) {\n        // casting to ANY as this will be fixed inside `augmentTokenTypes``\n        tokenType.CATEGORIES = config[CATEGORIES];\n    }\n    augmentTokenTypes([tokenType]);\n    if (has(config, LABEL)) {\n        tokenType.LABEL = config[LABEL];\n    }\n    if (has(config, GROUP)) {\n        tokenType.GROUP = config[GROUP];\n    }\n    if (has(config, POP_MODE)) {\n        tokenType.POP_MODE = config[POP_MODE];\n    }\n    if (has(config, PUSH_MODE)) {\n        tokenType.PUSH_MODE = config[PUSH_MODE];\n    }\n    if (has(config, LONGER_ALT)) {\n        tokenType.LONGER_ALT = config[LONGER_ALT];\n    }\n    if (has(config, LINE_BREAKS)) {\n        tokenType.LINE_BREAKS = config[LINE_BREAKS];\n    }\n    if (has(config, START_CHARS_HINT)) {\n        tokenType.START_CHARS_HINT = config[START_CHARS_HINT];\n    }\n    return tokenType;\n}\nexport const EOF = createToken({ name: \"EOF\", pattern: Lexer.NA });\naugmentTokenTypes([EOF]);\nexport function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {\n    return {\n        image,\n        startOffset,\n        endOffset,\n        startLine,\n        endLine,\n        startColumn,\n        endColumn,\n        tokenTypeIdx: tokType.tokenTypeIdx,\n        tokenType: tokType,\n    };\n}\nexport function tokenMatcher(token, tokType) {\n    return tokenStructuredMatcher(token, tokType);\n}\n//# sourceMappingURL=tokens_public.js.map","import { hasTokenLabel, tokenLabel } from \"../scan/tokens_public.js\";\nimport { first, map, reduce } from \"lodash-es\";\nimport { getProductionDslName, NonTerminal, Rule, Terminal, } from \"@chevrotain/gast\";\nexport const defaultParserErrorProvider = {\n    buildMismatchTokenMessage({ expected, actual, previous, ruleName }) {\n        const hasLabel = hasTokenLabel(expected);\n        const expectedMsg = hasLabel\n            ? `--> ${tokenLabel(expected)} <--`\n            : `token of type --> ${expected.name} <--`;\n        const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`;\n        return msg;\n    },\n    buildNotAllInputParsedMessage({ firstRedundant, ruleName }) {\n        return \"Redundant input, expecting EOF but found: \" + firstRedundant.image;\n    },\n    buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName, }) {\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        if (customUserDescription) {\n            return errPrefix + customUserDescription + errSuffix;\n        }\n        else {\n            const allLookAheadPaths = reduce(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), []);\n            const nextValidTokenSequences = map(allLookAheadPaths, (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\", \")}]`);\n            const nextValidSequenceItems = map(nextValidTokenSequences, (itemMsg, idx) => `  ${idx + 1}. ${itemMsg}`);\n            const calculatedDescription = `one of these possible Token sequences:\\n${nextValidSequenceItems.join(\"\\n\")}`;\n            return errPrefix + calculatedDescription + errSuffix;\n        }\n    },\n    buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName, }) {\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        if (customUserDescription) {\n            return errPrefix + customUserDescription + errSuffix;\n        }\n        else {\n            const nextValidTokenSequences = map(expectedIterationPaths, (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\",\")}]`);\n            const calculatedDescription = `expecting at least one iteration which starts with one of these possible Token sequences::\\n  ` +\n                `<${nextValidTokenSequences.join(\" ,\")}>`;\n            return errPrefix + calculatedDescription + errSuffix;\n        }\n    },\n};\nObject.freeze(defaultParserErrorProvider);\nexport const defaultGrammarResolverErrorProvider = {\n    buildRuleNotFoundError(topLevelRule, undefinedRule) {\n        const msg = \"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};\nexport const defaultGrammarValidatorErrorProvider = {\n    buildDuplicateFoundError(topLevelRule, duplicateProds) {\n        function getExtraProductionArgument(prod) {\n            if (prod instanceof Terminal) {\n                return prod.terminalType.name;\n            }\n            else if (prod instanceof NonTerminal) {\n                return prod.nonTerminalName;\n            }\n            else {\n                return \"\";\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        const hasExplicitIndex = index > 0;\n        let msg = `->${dslName}${hasExplicitIndex ? index : \"\"}<- ${extraArgument ? `with argument: ->${extraArgument}<-` : \"\"}\n                  appears more than once (${duplicateProds.length} times) in the top level rule: ->${topLevelName}<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \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        return msg;\n    },\n    buildNamespaceConflictError(rule) {\n        const errMsg = `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        return errMsg;\n    },\n    buildAlternationPrefixAmbiguityError(options) {\n        const pathMsg = map(options.prefixPath, (currTok) => tokenLabel(currTok)).join(\", \");\n        const occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n        const errMsg = `Ambiguous alternatives: <${options.ambiguityIndices.join(\" ,\")}> 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        return errMsg;\n    },\n    buildAlternationAmbiguityError(options) {\n        const pathMsg = map(options.prefixPath, (currtok) => tokenLabel(currtok)).join(\", \");\n        const occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n        let currMessage = `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\" ,\")}> in <OR${occurrence}>` +\n            ` inside <${options.topLevelRule.name}> Rule,\\n` +\n            `<${pathMsg}> may appears as a prefix path in all these alternatives.\\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    buildEmptyRepetitionError(options) {\n        let dslName = getProductionDslName(options.repetition);\n        if (options.repetition.idx !== 0) {\n            dslName += options.repetition.idx;\n        }\n        const errMsg = `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\\n` +\n            `This could lead to an infinite loop.`;\n        return errMsg;\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        /* istanbul ignore next */\n        return \"deprecated\";\n    },\n    buildEmptyAlternationError(options) {\n        const errMsg = `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        return errMsg;\n    },\n    buildTooManyAlternativesError(options) {\n        const errMsg = `An Alternation cannot have more than 256 alternatives:\\n` +\n            `<OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n has ${options.alternation.definition.length + 1} alternatives.`;\n        return errMsg;\n    },\n    buildLeftRecursionError(options) {\n        const ruleName = options.topLevelRule.name;\n        const pathNames = map(options.leftRecursionPath, (currRule) => currRule.name);\n        const leftRecursivePath = `${ruleName} --> ${pathNames\n            .concat([ruleName])\n            .join(\" --> \")}`;\n        const errMsg = `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        return errMsg;\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        /* istanbul ignore next */\n        return \"deprecated\";\n    },\n    buildDuplicateRuleNameError(options) {\n        let ruleName;\n        if (options.topLevelRule instanceof Rule) {\n            ruleName = options.topLevelRule.name;\n        }\n        else {\n            ruleName = options.topLevelRule;\n        }\n        const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`;\n        return errMsg;\n    },\n};\n//# sourceMappingURL=errors_public.js.map","import { ParserDefinitionErrorType, } from \"../parser/parser.js\";\nimport { forEach, values } from \"lodash-es\";\nimport { GAstVisitor } from \"@chevrotain/gast\";\nexport function resolveGrammar(topLevels, errMsgProvider) {\n    const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);\n    refResolver.resolveRefs();\n    return refResolver.errors;\n}\nexport class GastRefResolverVisitor extends GAstVisitor {\n    constructor(nameToTopRule, errMsgProvider) {\n        super();\n        this.nameToTopRule = nameToTopRule;\n        this.errMsgProvider = errMsgProvider;\n        this.errors = [];\n    }\n    resolveRefs() {\n        forEach(values(this.nameToTopRule), (prod) => {\n            this.currTopLevel = prod;\n            prod.accept(this);\n        });\n    }\n    visitNonTerminal(node) {\n        const ref = this.nameToTopRule[node.nonTerminalName];\n        if (!ref) {\n            const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node);\n            this.errors.push({\n                message: msg,\n                type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n                ruleName: this.currTopLevel.name,\n                unresolvedRefName: node.nonTerminalName,\n            });\n        }\n        else {\n            node.referencedRule = ref;\n        }\n    }\n}\n//# sourceMappingURL=resolver.js.map","import { clone, drop, dropRight, first as _first, forEach, isEmpty, last, } from \"lodash-es\";\nimport { first } from \"./first.js\";\nimport { RestWalker } from \"./rest.js\";\nimport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal, } from \"@chevrotain/gast\";\nexport class AbstractNextPossibleTokensWalker extends RestWalker {\n    constructor(topProd, path) {\n        super();\n        this.topProd = topProd;\n        this.path = path;\n        this.possibleTokTypes = [];\n        this.nextProductionName = \"\";\n        this.nextProductionOccurrence = 0;\n        this.found = false;\n        this.isAtEndOfPath = false;\n    }\n    startWalking() {\n        this.found = false;\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        // 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        // already verified that the first production is valid, we now seek the 2nd production\n        this.ruleStack.pop();\n        this.occurrenceStack.pop();\n        this.updateExpectedNext();\n        this.walk(this.topProd);\n        return this.possibleTokTypes;\n    }\n    walk(prod, prevRest = []) {\n        // stop scanning once we found the path\n        if (!this.found) {\n            super.walk(prod, prevRest);\n        }\n    }\n    walkProdRef(refProd, currRest, prevRest) {\n        // found the next production, need to keep walking in it\n        if (refProd.referencedRule.name === this.nextProductionName &&\n            refProd.idx === this.nextProductionOccurrence) {\n            const fullRest = currRest.concat(prevRest);\n            this.updateExpectedNext();\n            this.walk(refProd.referencedRule, fullRest);\n        }\n    }\n    updateExpectedNext() {\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        }\n        else {\n            this.nextProductionName = this.ruleStack.pop();\n            this.nextProductionOccurrence = this.occurrenceStack.pop();\n        }\n    }\n}\nexport class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n    constructor(topProd, path) {\n        super(topProd, path);\n        this.path = path;\n        this.nextTerminalName = \"\";\n        this.nextTerminalOccurrence = 0;\n        this.nextTerminalName = this.path.lastTok.name;\n        this.nextTerminalOccurrence = this.path.lastTokOccurrence;\n    }\n    walkTerminal(terminal, currRest, prevRest) {\n        if (this.isAtEndOfPath &&\n            terminal.terminalType.name === this.nextTerminalName &&\n            terminal.idx === this.nextTerminalOccurrence &&\n            !this.found) {\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/**\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    constructor(topRule, occurrence) {\n        super();\n        this.topRule = topRule;\n        this.occurrence = occurrence;\n        this.result = {\n            token: undefined,\n            occurrence: undefined,\n            isEndOfRule: undefined,\n        };\n    }\n    startWalking() {\n        this.walk(this.topRule);\n        return this.result;\n    }\n}\nexport class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n    walkMany(manyProd, currRest, prevRest) {\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        }\n        else {\n            super.walkMany(manyProd, currRest, prevRest);\n        }\n    }\n}\nexport class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n    walkManySep(manySepProd, currRest, prevRest) {\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        }\n        else {\n            super.walkManySep(manySepProd, currRest, prevRest);\n        }\n    }\n}\nexport class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n    walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\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        }\n        else {\n            super.walkAtLeastOne(atLeastOneProd, currRest, prevRest);\n        }\n    }\n}\n// TODO: reduce code duplication in the AfterWalkers\nexport class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n    walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) {\n        if (atleastOneSepProd.idx === this.occurrence) {\n            const firstAfterfirstAfterAtLeastOneSep = _first(currRest.concat(prevRest));\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        }\n        else {\n            super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest);\n        }\n    }\n}\nexport function possiblePathsFrom(targetDef, maxLength, currPath = []) {\n    // avoid side effects\n    currPath = clone(currPath);\n    let result = [];\n    let i = 0;\n    // TODO: avoid inner funcs\n    function remainingPathWith(nextDef) {\n        return nextDef.concat(drop(targetDef, i + 1));\n    }\n    // TODO: avoid inner funcs\n    function getAlternativesForProd(definition) {\n        const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath);\n        return result.concat(alternatives);\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        /* istanbul ignore else */\n        if (prod instanceof Alternative) {\n            return getAlternativesForProd(prod.definition);\n        }\n        else if (prod instanceof NonTerminal) {\n            return getAlternativesForProd(prod.definition);\n        }\n        else if (prod instanceof Option) {\n            result = getAlternativesForProd(prod.definition);\n        }\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        }\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(prod.definition),\n                }),\n            ];\n            return getAlternativesForProd(newDef);\n        }\n        else if (prod instanceof RepetitionWithSeparator) {\n            const newDef = prod.definition.concat([\n                new Repetition({\n                    definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition),\n                }),\n            ]);\n            result = getAlternativesForProd(newDef);\n        }\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        }\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        }\n        else if (prod instanceof Terminal) {\n            currPath.push(prod.terminalType);\n        }\n        else {\n            throw Error(\"non exhaustive match\");\n        }\n        i++;\n    }\n    result.push({\n        partialPath: currPath,\n        suffixDef: drop(targetDef, i),\n    });\n    return result;\n}\nexport function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {\n    const EXIT_NON_TERMINAL = \"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 = \"EXIT_ALTERNATIVE\";\n    let foundCompletePath = false;\n    const tokenVectorLength = tokenVector.length;\n    const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;\n    const result = [];\n    const possiblePaths = [];\n    possiblePaths.push({\n        idx: -1,\n        def: initialDef,\n        ruleStack: [],\n        occurrenceStack: [],\n    });\n    while (!isEmpty(possiblePaths)) {\n        const currPath = possiblePaths.pop();\n        // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n        if (currPath === EXIT_ALTERNATIVE) {\n            if (foundCompletePath &&\n                last(possiblePaths).idx <= minimalAlternativesIndex) {\n                // remove irrelevant alternative\n                possiblePaths.pop();\n            }\n            continue;\n        }\n        const currDef = currPath.def;\n        const currIdx = currPath.idx;\n        const currRuleStack = currPath.ruleStack;\n        const currOccurrenceStack = currPath.occurrenceStack;\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        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        }\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            }\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            }\n            else {\n                throw Error(\"non exhaustive match\");\n            }\n        }\n        else if (prod instanceof NonTerminal) {\n            const newRuleStack = clone(currRuleStack);\n            newRuleStack.push(prod.nonTerminalName);\n            const newOccurrenceStack = clone(currOccurrenceStack);\n            newOccurrenceStack.push(prod.idx);\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        }\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            const nextPathWith = {\n                idx: currIdx,\n                def: prod.definition.concat(drop(currDef)),\n                ruleStack: currRuleStack,\n                occurrenceStack: currOccurrenceStack,\n            };\n            possiblePaths.push(nextPathWith);\n        }\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        }\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: [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        }\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            const separatorGast = new Terminal({\n                terminalType: prod.separator,\n            });\n            const nthRepetition = new Repetition({\n                definition: [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        }\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            // 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        }\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 = 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        }\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        }\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(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack));\n        }\n        else {\n            throw Error(\"non exhaustive match\");\n        }\n    }\n    return result;\n}\nfunction expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {\n    const newRuleStack = clone(currRuleStack);\n    newRuleStack.push(topRule.name);\n    const newCurrOccurrenceStack = clone(currOccurrenceStack);\n    // top rule is always assumed to have been called with occurrence index 1\n    newCurrOccurrenceStack.push(1);\n    return {\n        idx: currIdx,\n        def: topRule.definition,\n        ruleStack: newRuleStack,\n        occurrenceStack: newCurrOccurrenceStack,\n    };\n}\n//# sourceMappingURL=interpreter.js.map","import { every, flatten, forEach, has, isEmpty, map, reduce } from \"lodash-es\";\nimport { possiblePathsFrom } from \"./interpreter.js\";\nimport { RestWalker } from \"./rest.js\";\nimport { tokenStructuredMatcher, tokenStructuredMatcherNoCategories, } from \"../../scan/tokens.js\";\nimport { Alternation, Alternative as AlternativeGAST, GAstVisitor, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, } from \"@chevrotain/gast\";\nexport var PROD_TYPE;\n(function (PROD_TYPE) {\n    PROD_TYPE[PROD_TYPE[\"OPTION\"] = 0] = \"OPTION\";\n    PROD_TYPE[PROD_TYPE[\"REPETITION\"] = 1] = \"REPETITION\";\n    PROD_TYPE[PROD_TYPE[\"REPETITION_MANDATORY\"] = 2] = \"REPETITION_MANDATORY\";\n    PROD_TYPE[PROD_TYPE[\"REPETITION_MANDATORY_WITH_SEPARATOR\"] = 3] = \"REPETITION_MANDATORY_WITH_SEPARATOR\";\n    PROD_TYPE[PROD_TYPE[\"REPETITION_WITH_SEPARATOR\"] = 4] = \"REPETITION_WITH_SEPARATOR\";\n    PROD_TYPE[PROD_TYPE[\"ALTERNATION\"] = 5] = \"ALTERNATION\";\n})(PROD_TYPE || (PROD_TYPE = {}));\nexport function getProdType(prod) {\n    /* istanbul ignore else */\n    if (prod instanceof Option || prod === \"Option\") {\n        return PROD_TYPE.OPTION;\n    }\n    else if (prod instanceof Repetition || prod === \"Repetition\") {\n        return PROD_TYPE.REPETITION;\n    }\n    else if (prod instanceof RepetitionMandatory ||\n        prod === \"RepetitionMandatory\") {\n        return PROD_TYPE.REPETITION_MANDATORY;\n    }\n    else if (prod instanceof RepetitionMandatoryWithSeparator ||\n        prod === \"RepetitionMandatoryWithSeparator\") {\n        return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;\n    }\n    else if (prod instanceof RepetitionWithSeparator ||\n        prod === \"RepetitionWithSeparator\") {\n        return PROD_TYPE.REPETITION_WITH_SEPARATOR;\n    }\n    else if (prod instanceof Alternation || prod === \"Alternation\") {\n        return PROD_TYPE.ALTERNATION;\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\nexport function getLookaheadPaths(options) {\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    }\n    else {\n        return getLookaheadPathsForOptionalProd(occurrence, rule, type, maxLookahead);\n    }\n}\nexport function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) {\n    const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead);\n    const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n        ? tokenStructuredMatcherNoCategories\n        : tokenStructuredMatcher;\n    return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher, dynamicTokensEnabled);\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(occurrence, ruleGrammar, k, dynamicTokensEnabled, prodType, lookaheadBuilder) {\n    const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k);\n    const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n        ? tokenStructuredMatcherNoCategories\n        : tokenStructuredMatcher;\n    return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled);\n}\nexport function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n    const numOfAlts = alts.length;\n    const areAllOneTokenLookahead = every(alts, (currAlt) => {\n        return every(currAlt, (currPath) => {\n            return currPath.length === 1;\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 (orAlts) {\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 = map(orAlts, (currAlt) => currAlt.GATE);\n            for (let t = 0; t < numOfAlts; t++) {\n                const currAlt = alts[t];\n                const currNumOfPaths = currAlt.length;\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    }\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        const choiceToAlt = reduce(singleTokenAlts, (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        /**\n         * @returns {number} - The chosen alternative index\n         */\n        return function () {\n            const nextToken = this.LA(1);\n            return choiceToAlt[nextToken.tokenTypeIdx];\n        };\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 () {\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}\nexport function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled) {\n    const areAllOneTokenLookahead = every(alt, (currPath) => {\n        return currPath.length === 1;\n    });\n    const numOfPaths = alt.length;\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        if (singleTokensTypes.length === 1 &&\n            isEmpty(singleTokensTypes[0].categoryMatches)) {\n            const expectedTokenType = singleTokensTypes[0];\n            const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx;\n            return function () {\n                return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey;\n            };\n        }\n        else {\n            const choiceToAlt = reduce(singleTokensTypes, (result, currTokType, idx) => {\n                result[currTokType.tokenTypeIdx] = true;\n                forEach(currTokType.categoryMatches, (currExtendingType) => {\n                    result[currExtendingType] = true;\n                });\n                return result;\n            }, []);\n            return function () {\n                const nextToken = this.LA(1);\n                return choiceToAlt[nextToken.tokenTypeIdx] === true;\n            };\n        }\n    }\n    else {\n        return function () {\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            // none of the paths matched\n            return false;\n        };\n    }\n}\nclass RestDefinitionFinderWalker extends RestWalker {\n    constructor(topProd, targetOccurrence, targetProdType) {\n        super();\n        this.topProd = topProd;\n        this.targetOccurrence = targetOccurrence;\n        this.targetProdType = targetProdType;\n    }\n    startWalking() {\n        this.walk(this.topProd);\n        return this.restDef;\n    }\n    checkIsTarget(node, expectedProdType, currRest, prevRest) {\n        if (node.idx === this.targetOccurrence &&\n            this.targetProdType === expectedProdType) {\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    walkOption(optionProd, currRest, prevRest) {\n        if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n            super.walkOption(optionProd, currRest, prevRest);\n        }\n    }\n    walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n        if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {\n            super.walkOption(atLeastOneProd, currRest, prevRest);\n        }\n    }\n    walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n        if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {\n            super.walkOption(atLeastOneSepProd, currRest, prevRest);\n        }\n    }\n    walkMany(manyProd, currRest, prevRest) {\n        if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {\n            super.walkOption(manyProd, currRest, prevRest);\n        }\n    }\n    walkManySep(manySepProd, currRest, prevRest) {\n        if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {\n            super.walkOption(manySepProd, currRest, prevRest);\n        }\n    }\n}\n/**\n * Returns the definition of a target production in a top level level rule.\n */\nclass InsideDefinitionFinderVisitor extends GAstVisitor {\n    constructor(targetOccurrence, targetProdType, targetRef) {\n        super();\n        this.targetOccurrence = targetOccurrence;\n        this.targetProdType = targetProdType;\n        this.targetRef = targetRef;\n        this.result = [];\n    }\n    checkIsTarget(node, expectedProdName) {\n        if (node.idx === this.targetOccurrence &&\n            this.targetProdType === expectedProdName &&\n            (this.targetRef === undefined || node === this.targetRef)) {\n            this.result = node.definition;\n        }\n    }\n    visitOption(node) {\n        this.checkIsTarget(node, PROD_TYPE.OPTION);\n    }\n    visitRepetition(node) {\n        this.checkIsTarget(node, PROD_TYPE.REPETITION);\n    }\n    visitRepetitionMandatory(node) {\n        this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY);\n    }\n    visitRepetitionMandatoryWithSeparator(node) {\n        this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);\n    }\n    visitRepetitionWithSeparator(node) {\n        this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR);\n    }\n    visitAlternation(node) {\n        this.checkIsTarget(node, PROD_TYPE.ALTERNATION);\n    }\n}\nfunction initializeArrayOfArrays(size) {\n    const result = new Array(size);\n    for (let i = 0; i < size; i++) {\n        result[i] = [];\n    }\n    return result;\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) {\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 * Imperative style due to being called from a hot spot\n */\nfunction isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {\n    for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {\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}\nexport function lookAheadSequenceFromAlternatives(altsDefs, k) {\n    const partialAlts = map(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1));\n    const finalResult = initializeArrayOfArrays(partialAlts.length);\n    const altsHashes = map(partialAlts, (currAltPaths) => {\n        const dict = {};\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    // maxLookahead loop\n    for (let pathLength = 1; pathLength <= k; pathLength++) {\n        const currDataset = newData;\n        newData = initializeArrayOfArrays(currDataset.length);\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 (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {\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(suffixDef, pathLength + 1, currPathPrefix);\n                    newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);\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    return finalResult;\n}\nexport function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {\n    const visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd);\n    ruleGrammar.accept(visitor);\n    return lookAheadSequenceFromAlternatives(visitor.result, k);\n}\nexport function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {\n    const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType);\n    ruleGrammar.accept(insideDefVisitor);\n    const insideDef = insideDefVisitor.result;\n    const afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType);\n    const afterDef = afterDefWalker.startWalking();\n    const insideFlat = new AlternativeGAST({ definition: insideDef });\n    const afterFlat = new AlternativeGAST({ definition: afterDef });\n    return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k);\n}\nexport function containsPath(alternative, searchPath) {\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            const matchingTokens = searchTok === otherTok ||\n                otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== undefined;\n            if (matchingTokens === false) {\n                continue compareOtherPath;\n            }\n        }\n        return true;\n    }\n    return false;\n}\nexport function isStrictPrefixOfPath(prefix, other) {\n    return (prefix.length < other.length &&\n        every(prefix, (tokType, idx) => {\n            const otherTokType = other[idx];\n            return (tokType === otherTokType ||\n                otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]);\n        }));\n}\nexport function areTokenCategoriesNotUsed(lookAheadPaths) {\n    return every(lookAheadPaths, (singleAltPaths) => every(singleAltPaths, (singlePath) => every(singlePath, (token) => isEmpty(token.categoryMatches))));\n}\n//# sourceMappingURL=lookahead.js.map","import { clone, compact, difference, drop, dropRight, filter, first, flatMap, flatten, forEach, groupBy, includes, isEmpty, map, pickBy, reduce, reject, values, } from \"lodash-es\";\nimport { ParserDefinitionErrorType, } from \"../parser/parser.js\";\nimport { Alternation, Alternative as AlternativeGAST, GAstVisitor, getProductionDslName, isOptionalProd, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal, } from \"@chevrotain/gast\";\nimport { containsPath, getLookaheadPathsForOptionalProd, getLookaheadPathsForOr, getProdType, isStrictPrefixOfPath, } from \"./lookahead.js\";\nimport { nextPossibleTokensAfter } from \"./interpreter.js\";\nimport { tokenStructuredMatcher } from \"../../scan/tokens.js\";\nexport function validateLookahead(options) {\n    const lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({\n        rules: options.rules,\n        tokenTypes: options.tokenTypes,\n        grammarName: options.grammarName,\n    });\n    return map(lookaheadValidationErrorMessages, (errorMessage) => (Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage)));\n}\nexport function validateGrammar(topLevels, tokenTypes, errMsgProvider, grammarName) {\n    const duplicateErrors = flatMap(topLevels, (currTopLevel) => validateDuplicateProductions(currTopLevel, errMsgProvider));\n    const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider);\n    const tooManyAltsErrors = flatMap(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider));\n    const duplicateRulesError = flatMap(topLevels, (curRule) => validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider));\n    return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError);\n}\nfunction validateDuplicateProductions(topLevelRule, errMsgProvider) {\n    const collectorVisitor = new OccurrenceValidationCollector();\n    topLevelRule.accept(collectorVisitor);\n    const allRuleProductions = collectorVisitor.allProductions;\n    const productionGroups = groupBy(allRuleProductions, identifyProductionForDuplicates);\n    const duplicates = pickBy(productionGroups, (currGroup) => {\n        return currGroup.length > 1;\n    });\n    const errors = map(values(duplicates), (currDuplicates) => {\n        const firstProd = first(currDuplicates);\n        const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates);\n        const dslName = getProductionDslName(firstProd);\n        const defError = {\n            message: msg,\n            type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n            ruleName: topLevelRule.name,\n            dslName: dslName,\n            occurrence: firstProd.idx,\n        };\n        const param = getExtraProductionArgument(firstProd);\n        if (param) {\n            defError.parameter = param;\n        }\n        return defError;\n    });\n    return errors;\n}\nexport function identifyProductionForDuplicates(prod) {\n    return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`;\n}\nfunction getExtraProductionArgument(prod) {\n    if (prod instanceof Terminal) {\n        return prod.terminalType.name;\n    }\n    else if (prod instanceof NonTerminal) {\n        return prod.nonTerminalName;\n    }\n    else {\n        return \"\";\n    }\n}\nexport class OccurrenceValidationCollector extends GAstVisitor {\n    constructor() {\n        super(...arguments);\n        this.allProductions = [];\n    }\n    visitNonTerminal(subrule) {\n        this.allProductions.push(subrule);\n    }\n    visitOption(option) {\n        this.allProductions.push(option);\n    }\n    visitRepetitionWithSeparator(manySep) {\n        this.allProductions.push(manySep);\n    }\n    visitRepetitionMandatory(atLeastOne) {\n        this.allProductions.push(atLeastOne);\n    }\n    visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n        this.allProductions.push(atLeastOneSep);\n    }\n    visitRepetition(many) {\n        this.allProductions.push(many);\n    }\n    visitAlternation(or) {\n        this.allProductions.push(or);\n    }\n    visitTerminal(terminal) {\n        this.allProductions.push(terminal);\n    }\n}\nexport function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {\n    const errors = [];\n    const occurrences = reduce(allRules, (result, curRule) => {\n        if (curRule.name === rule.name) {\n            return result + 1;\n        }\n        return result;\n    }, 0);\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    return errors;\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(ruleName, definedRulesNames, className) {\n    const errors = [];\n    let errMsg;\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    return errors;\n}\nexport function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path = []) {\n    const errors = [];\n    const nextNonTerminals = getFirstNoneTerminal(currRule.definition);\n    if (isEmpty(nextNonTerminals)) {\n        return [];\n    }\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        // 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(topRule, currRefRule, errMsgProvider, newPath);\n        });\n        return errors.concat(errorsFromNextSteps);\n    }\n}\nexport function getFirstNoneTerminal(definition) {\n    let result = [];\n    if (isEmpty(definition)) {\n        return result;\n    }\n    const firstProd = first(definition);\n    /* istanbul ignore else */\n    if (firstProd instanceof NonTerminal) {\n        result.push(firstProd.referencedRule);\n    }\n    else if (firstProd instanceof AlternativeGAST ||\n        firstProd instanceof Option ||\n        firstProd instanceof RepetitionMandatory ||\n        firstProd instanceof RepetitionMandatoryWithSeparator ||\n        firstProd instanceof RepetitionWithSeparator ||\n        firstProd instanceof Repetition) {\n        result = result.concat(getFirstNoneTerminal(firstProd.definition));\n    }\n    else if (firstProd instanceof Alternation) {\n        // each sub definition in alternation is a FLAT\n        result = flatten(map(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition)));\n    }\n    else if (firstProd instanceof Terminal) {\n        // nothing to see, move along\n    }\n    else {\n        throw Error(\"non exhaustive match\");\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    }\n    else {\n        return result;\n    }\n}\nclass OrCollector extends GAstVisitor {\n    constructor() {\n        super(...arguments);\n        this.alternations = [];\n    }\n    visitAlternation(node) {\n        this.alternations.push(node);\n    }\n}\nexport function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {\n    const orCollector = new OrCollector();\n    topLevelRule.accept(orCollector);\n    const ors = orCollector.alternations;\n    const errors = flatMap(ors, (currOr) => {\n        const exceptLast = dropRight(currOr.definition);\n        return flatMap(exceptLast, (currAlternative, currAltIdx) => {\n            const possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1);\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            }\n            else {\n                return [];\n            }\n        });\n    });\n    return errors;\n}\nexport function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {\n    const orCollector = new OrCollector();\n    topLevelRule.accept(orCollector);\n    let ors = orCollector.alternations;\n    // New Handling of ignoring ambiguities\n    // - https://github.com/chevrotain/chevrotain/issues/869\n    ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true);\n    const errors = flatMap(ors, (currOr) => {\n        const currOccurrence = currOr.idx;\n        const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;\n        const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr);\n        const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n        const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n        return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors);\n    });\n    return errors;\n}\nexport class RepetitionCollector extends GAstVisitor {\n    constructor() {\n        super(...arguments);\n        this.allProductions = [];\n    }\n    visitRepetitionWithSeparator(manySep) {\n        this.allProductions.push(manySep);\n    }\n    visitRepetitionMandatory(atLeastOne) {\n        this.allProductions.push(atLeastOne);\n    }\n    visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n        this.allProductions.push(atLeastOneSep);\n    }\n    visitRepetition(many) {\n        this.allProductions.push(many);\n    }\n}\nexport function validateTooManyAlts(topLevelRule, errMsgProvider) {\n    const orCollector = new OrCollector();\n    topLevelRule.accept(orCollector);\n    const ors = orCollector.alternations;\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        }\n        else {\n            return [];\n        }\n    });\n    return errors;\n}\nexport function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {\n    const errors = [];\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(currOccurrence, currTopRule, prodType, actualMaxLookahead);\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    return errors;\n}\nfunction checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n    const foundAmbiguousPaths = [];\n    const identicalAmbiguities = reduce(alternatives, (result, currAlt, currAltIdx) => {\n        // ignore (skip) ambiguities with this alternative\n        if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n            return result;\n        }\n        forEach(currAlt, (currPath) => {\n            const altsCurrPathAppearsIn = [currAltIdx];\n            forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n                if (currAltIdx !== currOtherAltIdx &&\n                    containsPath(currOtherAlt, currPath) &&\n                    // ignore (skip) ambiguities with this \"other\" alternative\n                    alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true) {\n                    altsCurrPathAppearsIn.push(currOtherAltIdx);\n                }\n            });\n            if (altsCurrPathAppearsIn.length > 1 &&\n                !containsPath(foundAmbiguousPaths, currPath)) {\n                foundAmbiguousPaths.push(currPath);\n                result.push({\n                    alts: altsCurrPathAppearsIn,\n                    path: currPath,\n                });\n            }\n        });\n        return result;\n    }, []);\n    const currErrors = map(identicalAmbiguities, (currAmbDescriptor) => {\n        const ambgIndices = map(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1);\n        const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n            topLevelRule: rule,\n            alternation: alternation,\n            ambiguityIndices: ambgIndices,\n            prefixPath: currAmbDescriptor.path,\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    return currErrors;\n}\nexport function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n    // flatten\n    const pathsAndIndices = reduce(alternatives, (result, currAlt, idx) => {\n        const currPathsAndIdx = map(currAlt, (currPath) => {\n            return { idx: idx, path: currPath };\n        });\n        return result.concat(currPathsAndIdx);\n    }, []);\n    const errors = compact(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        const prefixAmbiguitiesPathsAndIndices = filter(pathsAndIndices, (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        const currPathPrefixErrors = map(prefixAmbiguitiesPathsAndIndices, (currAmbPathAndIdx) => {\n            const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];\n            const occurrence = alternation.idx === 0 ? \"\" : alternation.idx;\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        return currPathPrefixErrors;\n    }));\n    return errors;\n}\nfunction checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {\n    const errors = [];\n    const tokenNames = map(tokenTypes, (currToken) => currToken.name);\n    forEach(topLevels, (currRule) => {\n        const currRuleName = currRule.name;\n        if (includes(tokenNames, currRuleName)) {\n            const errMsg = errMsgProvider.buildNamespaceConflictError(currRule);\n            errors.push({\n                message: errMsg,\n                type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n                ruleName: currRuleName,\n            });\n        }\n    });\n    return errors;\n}\n//# sourceMappingURL=checks.js.map","import { defaults, forEach } from \"lodash-es\";\nimport { resolveGrammar as orgResolveGrammar } from \"../resolver.js\";\nimport { validateGrammar as orgValidateGrammar } from \"../checks.js\";\nimport { defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider, } from \"../../errors_public.js\";\nexport function resolveGrammar(options) {\n    const actualOptions = defaults(options, {\n        errMsgProvider: defaultGrammarResolverErrorProvider,\n    });\n    const topRulesTable = {};\n    forEach(options.rules, (rule) => {\n        topRulesTable[rule.name] = rule;\n    });\n    return orgResolveGrammar(topRulesTable, actualOptions.errMsgProvider);\n}\nexport function validateGrammar(options) {\n    options = defaults(options, {\n        errMsgProvider: defaultGrammarValidatorErrorProvider,\n    });\n    return orgValidateGrammar(options.rules, options.tokenTypes, options.errMsgProvider, options.grammarName);\n}\n//# sourceMappingURL=gast_resolver_public.js.map","import { includes } from \"lodash-es\";\nconst MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\";\nconst NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\";\nconst EARLY_EXIT_EXCEPTION = \"EarlyExitException\";\nconst NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\";\nconst RECOGNITION_EXCEPTION_NAMES = [\n    MISMATCHED_TOKEN_EXCEPTION,\n    NO_VIABLE_ALT_EXCEPTION,\n    EARLY_EXIT_EXCEPTION,\n    NOT_ALL_INPUT_PARSED_EXCEPTION,\n];\nObject.freeze(RECOGNITION_EXCEPTION_NAMES);\n// hacks to bypass no support for custom Errors in javascript/typescript\nexport function isRecognitionException(error) {\n    // can't do instanceof on hacked custom js exceptions\n    return includes(RECOGNITION_EXCEPTION_NAMES, error.name);\n}\nclass RecognitionException extends Error {\n    constructor(message, token) {\n        super(message);\n        this.token = token;\n        this.resyncedTokens = [];\n        // fix prototype chain when typescript target is ES5\n        Object.setPrototypeOf(this, new.target.prototype);\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}\nexport class MismatchedTokenException extends RecognitionException {\n    constructor(message, token, previousToken) {\n        super(message, token);\n        this.previousToken = previousToken;\n        this.name = MISMATCHED_TOKEN_EXCEPTION;\n    }\n}\nexport class NoViableAltException extends RecognitionException {\n    constructor(message, token, previousToken) {\n        super(message, token);\n        this.previousToken = previousToken;\n        this.name = NO_VIABLE_ALT_EXCEPTION;\n    }\n}\nexport class NotAllInputParsedException extends RecognitionException {\n    constructor(message, token) {\n        super(message, token);\n        this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;\n    }\n}\nexport class EarlyExitException extends RecognitionException {\n    constructor(message, token, previousToken) {\n        super(message, token);\n        this.previousToken = previousToken;\n        this.name = EARLY_EXIT_EXCEPTION;\n    }\n}\n//# sourceMappingURL=exceptions_public.js.map","import { createTokenInstance, EOF, tokenMatcher, } from \"../../../scan/tokens_public.js\";\nimport { clone, dropRight, find, flatten, has, includes, isEmpty, map, } from \"lodash-es\";\nimport { MismatchedTokenException } from \"../../exceptions_public.js\";\nimport { IN } from \"../../constants.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\nexport const EOF_FOLLOW_KEY = {};\nexport const IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\";\nexport class InRuleRecoveryException extends Error {\n    constructor(message) {\n        super(message);\n        this.name = IN_RULE_RECOVERY_EXCEPTION;\n    }\n}\n/**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\nexport class Recoverable {\n    initRecoverable(config) {\n        this.firstAfterRepMap = {};\n        this.resyncFollows = {};\n        this.recoveryEnabled = has(config, \"recoveryEnabled\")\n            ? config.recoveryEnabled // assumes end user provides the correct config value/type\n            : DEFAULT_PARSER_CONFIG.recoveryEnabled;\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    getTokenToInsert(tokType) {\n        const tokToInsert = createTokenInstance(tokType, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\n        tokToInsert.isInsertedInRecovery = true;\n        return tokToInsert;\n    }\n    canTokenTypeBeInsertedInRecovery(tokType) {\n        return true;\n    }\n    canTokenTypeBeDeletedInRecovery(tokType) {\n        return true;\n    }\n    tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {\n        // TODO: can the resyncTokenType be cached?\n        const reSyncTokType = this.findReSyncTokenType();\n        const savedLexerState = this.exportLexerState();\n        const resyncedTokens = [];\n        let passedResyncPoint = false;\n        const nextTokenWithoutResync = this.LA(1);\n        let currToken = this.LA(1);\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(msg, nextTokenWithoutResync, this.LA(0));\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        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            }\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            }\n            else if (this.tokenMatcher(currToken, reSyncTokType)) {\n                passedResyncPoint = true;\n            }\n            else {\n                currToken = this.SKIP_TOKEN();\n                this.addToResyncTokens(currToken, resyncedTokens);\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    shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) {\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        // no need to recover, next token is what we expect...\n        if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n            return false;\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        // 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 (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) {\n            return false;\n        }\n        return true;\n    }\n    // Error Recovery functionality\n    getFollowsForInRuleRecovery(tokType, tokIdxInRule) {\n        const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);\n        const follows = this.getNextPossibleTokenTypes(grammarPath);\n        return follows;\n    }\n    tryInRuleRecovery(expectedTokType, follows) {\n        if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n            const tokToInsert = this.getTokenToInsert(expectedTokType);\n            return tokToInsert;\n        }\n        if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n            const nextTok = this.SKIP_TOKEN();\n            this.consumeToken();\n            return nextTok;\n        }\n        throw new InRuleRecoveryException(\"sad sad panda\");\n    }\n    canPerformInRuleRecovery(expectedToken, follows) {\n        return (this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n            this.canRecoverWithSingleTokenDeletion(expectedToken));\n    }\n    canRecoverWithSingleTokenInsertion(expectedTokType, follows) {\n        if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n            return false;\n        }\n        // must know the possible following tokens to perform single token insertion\n        if (isEmpty(follows)) {\n            return false;\n        }\n        const mismatchedTok = this.LA(1);\n        const isMisMatchedTokInFollows = find(follows, (possibleFollowsTokType) => {\n            return this.tokenMatcher(mismatchedTok, possibleFollowsTokType);\n        }) !== undefined;\n        return isMisMatchedTokInFollows;\n    }\n    canRecoverWithSingleTokenDeletion(expectedTokType) {\n        if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {\n            return false;\n        }\n        const isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType);\n        return isNextTokenWhatIsExpected;\n    }\n    isInCurrentRuleReSyncSet(tokenTypeIdx) {\n        const followKey = this.getCurrFollowKey();\n        const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);\n        return includes(currentRuleReSyncSet, tokenTypeIdx);\n    }\n    findReSyncTokenType() {\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    getCurrFollowKey() {\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        return {\n            ruleName: this.shortRuleNameToFullName(currRuleShortName),\n            idxInCallingRule: currRuleIdx,\n            inRule: this.shortRuleNameToFullName(prevRuleShortName),\n        };\n    }\n    buildFullFollowKeyStack() {\n        const explicitRuleStack = this.RULE_STACK;\n        const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;\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    flattenFollowSet() {\n        const followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n            return this.getFollowSetFromFollowKey(currKey);\n        });\n        return flatten(followStack);\n    }\n    getFollowSetFromFollowKey(followKey) {\n        if (followKey === EOF_FOLLOW_KEY) {\n            return [EOF];\n        }\n        const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule;\n        return this.resyncFollows[followName];\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(token, resyncTokens) {\n        if (!this.tokenMatcher(token, EOF)) {\n            resyncTokens.push(token);\n        }\n        return resyncTokens;\n    }\n    reSyncTo(tokType) {\n        const resyncedTokens = [];\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    attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n        // by default this is a NO-OP\n        // The actual implementation is with the function(not method) below\n    }\n    getCurrentGrammarPath(tokType, tokIdxInRule) {\n        const pathRuleStack = this.getHumanReadableRuleStack();\n        const pathOccurrenceStack = clone(this.RULE_OCCURRENCE_STACK);\n        const grammarPath = {\n            ruleStack: pathRuleStack,\n            occurrenceStack: pathOccurrenceStack,\n            lastTok: tokType,\n            lastTokOccurrence: tokIdxInRule,\n        };\n        return grammarPath;\n    }\n    getHumanReadableRuleStack() {\n        return map(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName));\n    }\n}\nexport function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\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 = new nextToksWalker(ruleGrammar, prodOccurrence);\n        firstAfterRepInfo = walker.startWalking();\n        this.firstAfterRepMap[key] = firstAfterRepInfo;\n    }\n    let expectTokAfterLastMatch = firstAfterRepInfo.token;\n    let nextTokIdx = firstAfterRepInfo.occurrence;\n    const isEndOfRule = firstAfterRepInfo.isEndOfRule;\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 (this.RULE_STACK.length === 1 &&\n        isEndOfRule &&\n        expectTokAfterLastMatch === undefined) {\n        expectTokAfterLastMatch = EOF;\n        nextTokIdx = 1;\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    if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {\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(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch);\n    }\n}\n//# sourceMappingURL=recoverable.js.map","// 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\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// 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// this actually returns a number, but it is always used as a string (object prop key)\nexport function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {\n    return occurrence | dslMethodIdx | ruleIdx;\n}\nconst BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX;\n//# sourceMappingURL=keys.js.map","import { flatMap, isEmpty } from \"lodash-es\";\nimport { defaultGrammarValidatorErrorProvider } from \"../errors_public.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser/parser.js\";\nimport { validateAmbiguousAlternationAlternatives, validateEmptyOrAlternative, validateNoLeftRecursion, validateSomeNonEmptyLookaheadPath, } from \"./checks.js\";\nimport { buildAlternativesLookAheadFunc, buildLookaheadFuncForOptionalProd, buildLookaheadFuncForOr, buildSingleAlternativeLookaheadFunction, getProdType, } from \"./lookahead.js\";\nexport class LLkLookaheadStrategy {\n    constructor(options) {\n        var _a;\n        this.maxLookahead =\n            (_a = options === null || options === void 0 ? void 0 : options.maxLookahead) !== null && _a !== void 0 ? _a : DEFAULT_PARSER_CONFIG.maxLookahead;\n    }\n    validate(options) {\n        const leftRecursionErrors = this.validateNoLeftRecursion(options.rules);\n        if (isEmpty(leftRecursionErrors)) {\n            const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules);\n            const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options.rules, this.maxLookahead);\n            const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options.rules, this.maxLookahead);\n            const allErrors = [\n                ...leftRecursionErrors,\n                ...emptyAltErrors,\n                ...ambiguousAltsErrors,\n                ...emptyRepetitionErrors,\n            ];\n            return allErrors;\n        }\n        return leftRecursionErrors;\n    }\n    validateNoLeftRecursion(rules) {\n        return flatMap(rules, (currTopRule) => validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider));\n    }\n    validateEmptyOrAlternatives(rules) {\n        return flatMap(rules, (currTopRule) => validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider));\n    }\n    validateAmbiguousAlternationAlternatives(rules, maxLookahead) {\n        return flatMap(rules, (currTopRule) => validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider));\n    }\n    validateSomeNonEmptyLookaheadPath(rules, maxLookahead) {\n        return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider);\n    }\n    buildLookaheadForAlternation(options) {\n        return buildLookaheadFuncForOr(options.prodOccurrence, options.rule, options.maxLookahead, options.hasPredicates, options.dynamicTokensEnabled, buildAlternativesLookAheadFunc);\n    }\n    buildLookaheadForOptional(options) {\n        return buildLookaheadFuncForOptionalProd(options.prodOccurrence, options.rule, options.maxLookahead, options.dynamicTokensEnabled, getProdType(options.prodType), buildSingleAlternativeLookaheadFunction);\n    }\n}\n//# sourceMappingURL=llk_lookahead.js.map","import { forEach, has } from \"lodash-es\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, getKeyForAutomaticLookahead, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX, } from \"../../grammar/keys.js\";\nimport { GAstVisitor, getProductionDslName, } from \"@chevrotain/gast\";\nimport { LLkLookaheadStrategy } from \"../../grammar/llk_lookahead.js\";\n/**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\nexport class LooksAhead {\n    initLooksAhead(config) {\n        this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\")\n            ? config.dynamicTokensEnabled // assumes end user provides the correct config value/type\n            : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;\n        this.maxLookahead = has(config, \"maxLookahead\")\n            ? config.maxLookahead // assumes end user provides the correct config value/type\n            : DEFAULT_PARSER_CONFIG.maxLookahead;\n        this.lookaheadStrategy = has(config, \"lookaheadStrategy\")\n            ? config.lookaheadStrategy // assumes end user provides the correct config value/type\n            : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead });\n        this.lookAheadFuncsCache = new Map();\n    }\n    preComputeLookaheadFunctions(rules) {\n        forEach(rules, (currRule) => {\n            this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n                const { alternation, repetition, option, repetitionMandatory, repetitionMandatoryWithSeparator, repetitionWithSeparator, } = collectMethods(currRule);\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                        const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx);\n                        this.setLaFuncCache(key, laFunc);\n                    });\n                });\n                forEach(repetition, (currProd) => {\n                    this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, \"Repetition\", currProd.maxLookahead, getProductionDslName(currProd));\n                });\n                forEach(option, (currProd) => {\n                    this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, \"Option\", currProd.maxLookahead, getProductionDslName(currProd));\n                });\n                forEach(repetitionMandatory, (currProd) => {\n                    this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, \"RepetitionMandatory\", currProd.maxLookahead, getProductionDslName(currProd));\n                });\n                forEach(repetitionMandatoryWithSeparator, (currProd) => {\n                    this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, \"RepetitionMandatoryWithSeparator\", currProd.maxLookahead, getProductionDslName(currProd));\n                });\n                forEach(repetitionWithSeparator, (currProd) => {\n                    this.computeLookaheadFunc(currRule, currProd.idx, MANY_SEP_IDX, \"RepetitionWithSeparator\", currProd.maxLookahead, getProductionDslName(currProd));\n                });\n            });\n        });\n    }\n    computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {\n        this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? \"\" : prodOccurrence}`, () => {\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(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence);\n            this.setLaFuncCache(key, laFunc);\n        });\n    }\n    // this actually returns a number, but it is always used as a string (object prop key)\n    getKeyForAutomaticLookahead(dslMethodIdx, occurrence) {\n        const currRuleShortName = this.getLastExplicitRuleShortName();\n        return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence);\n    }\n    getLaFuncFromCache(key) {\n        return this.lookAheadFuncsCache.get(key);\n    }\n    /* istanbul ignore next */\n    setLaFuncCache(key, value) {\n        this.lookAheadFuncsCache.set(key, value);\n    }\n}\nclass DslMethodsCollectorVisitor extends GAstVisitor {\n    constructor() {\n        super(...arguments);\n        this.dslMethods = {\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    visitOption(option) {\n        this.dslMethods.option.push(option);\n    }\n    visitRepetitionWithSeparator(manySep) {\n        this.dslMethods.repetitionWithSeparator.push(manySep);\n    }\n    visitRepetitionMandatory(atLeastOne) {\n        this.dslMethods.repetitionMandatory.push(atLeastOne);\n    }\n    visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n        this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);\n    }\n    visitRepetition(many) {\n        this.dslMethods.repetition.push(many);\n    }\n    visitAlternation(or) {\n        this.dslMethods.alternation.push(or);\n    }\n}\nconst collectorVisitor = new DslMethodsCollectorVisitor();\nexport function collectMethods(rule) {\n    collectorVisitor.reset();\n    rule.accept(collectorVisitor);\n    const dslMethods = collectorVisitor.dslMethods;\n    // avoid uncleaned references\n    collectorVisitor.reset();\n    return dslMethods;\n}\n//# sourceMappingURL=looksahead.js.map","/**\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(currNodeLocation, newLocationInfo) {\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 * 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(currNodeLocation, newLocationInfo) {\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}\nexport function addTerminalToCst(node, token, tokenTypeName) {\n    if (node.children[tokenTypeName] === undefined) {\n        node.children[tokenTypeName] = [token];\n    }\n    else {\n        node.children[tokenTypeName].push(token);\n    }\n}\nexport function addNoneTerminalToCst(node, ruleName, ruleResult) {\n    if (node.children[ruleName] === undefined) {\n        node.children[ruleName] = [ruleResult];\n    }\n    else {\n        node.children[ruleName].push(ruleResult);\n    }\n}\n//# sourceMappingURL=cst.js.map","const NAME = \"name\";\nexport function defineNameProp(obj, nameValue) {\n    Object.defineProperty(obj, NAME, {\n        enumerable: false,\n        configurable: true,\n        writable: false,\n        value: nameValue,\n    });\n}\n//# sourceMappingURL=lang_extensions.js.map","import { compact, filter, forEach, isArray, isEmpty, isFunction, isUndefined, keys, map, } from \"lodash-es\";\nimport { defineNameProp } from \"../../lang/lang_extensions.js\";\nexport function defaultVisit(ctx, param) {\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 = 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}\nexport function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {\n    const derivedConstructor = function () { };\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    const semanticProto = {\n        visit: function (cstNode, param) {\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            // enables passing optional CstNodes concisely.\n            if (isUndefined(cstNode)) {\n                return undefined;\n            }\n            return this[cstNode.name](cstNode.children, param);\n        },\n        validateVisitor: function () {\n            const semanticDefinitionErrors = validateVisitor(this, ruleNames);\n            if (!isEmpty(semanticDefinitionErrors)) {\n                const errorMessages = map(semanticDefinitionErrors, (currDefError) => currDefError.msg);\n                throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>:\\n\\t` +\n                    `${errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\\t\")}`);\n            }\n        },\n    };\n    derivedConstructor.prototype = semanticProto;\n    derivedConstructor.prototype.constructor = derivedConstructor;\n    derivedConstructor._RULE_NAMES = ruleNames;\n    return derivedConstructor;\n}\nexport function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {\n    const derivedConstructor = function () { };\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    const withDefaultsProto = Object.create(baseConstructor.prototype);\n    forEach(ruleNames, (ruleName) => {\n        withDefaultsProto[ruleName] = defaultVisit;\n    });\n    derivedConstructor.prototype = withDefaultsProto;\n    derivedConstructor.prototype.constructor = derivedConstructor;\n    return derivedConstructor;\n}\nexport var CstVisitorDefinitionError;\n(function (CstVisitorDefinitionError) {\n    CstVisitorDefinitionError[CstVisitorDefinitionError[\"REDUNDANT_METHOD\"] = 0] = \"REDUNDANT_METHOD\";\n    CstVisitorDefinitionError[CstVisitorDefinitionError[\"MISSING_METHOD\"] = 1] = \"MISSING_METHOD\";\n})(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}));\nexport function validateVisitor(visitorInstance, ruleNames) {\n    const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);\n    return missingErrors;\n}\nexport function validateMissingCstMethods(visitorInstance, ruleNames) {\n    const missingRuleNames = filter(ruleNames, (currRuleName) => {\n        return isFunction(visitorInstance[currRuleName]) === false;\n    });\n    const errors = map(missingRuleNames, (currRuleName) => {\n        return {\n            msg: `Missing visitor method: <${currRuleName}> on ${(visitorInstance.constructor.name)} CST Visitor.`,\n            type: CstVisitorDefinitionError.MISSING_METHOD,\n            methodName: currRuleName,\n        };\n    });\n    return compact(errors);\n}\n//# sourceMappingURL=cst_visitor.js.map","import { addNoneTerminalToCst, addTerminalToCst, setNodeLocationFull, setNodeLocationOnlyOffset, } from \"../../cst/cst.js\";\nimport { has, isUndefined, keys, noop } from \"lodash-es\";\nimport { createBaseSemanticVisitorConstructor, createBaseVisitorConstructorWithDefaults, } from \"../../cst/cst_visitor.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n/**\n * This trait is responsible for the CST building logic.\n */\nexport class TreeBuilder {\n    initTreeBuilder(config) {\n        this.CST_STACK = [];\n        // outputCst is no longer exposed/defined in the pubic API\n        this.outputCst = config.outputCst;\n        this.nodeLocationTracking = has(config, \"nodeLocationTracking\")\n            ? config.nodeLocationTracking // assumes end user provides the correct config value/type\n            : DEFAULT_PARSER_CONFIG.nodeLocationTracking;\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        }\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                }\n                else {\n                    this.setNodeLocationFromToken = noop;\n                    this.setNodeLocationFromNode = noop;\n                    this.cstPostRule = this.cstPostRuleFull;\n                    this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;\n                }\n            }\n            else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n                if (this.recoveryEnabled) {\n                    this.setNodeLocationFromToken = setNodeLocationOnlyOffset;\n                    this.setNodeLocationFromNode = setNodeLocationOnlyOffset;\n                    this.cstPostRule = noop;\n                    this.setInitialNodeLocation =\n                        this.setInitialNodeLocationOnlyOffsetRecovery;\n                }\n                else {\n                    this.setNodeLocationFromToken = noop;\n                    this.setNodeLocationFromNode = noop;\n                    this.cstPostRule = this.cstPostRuleOnlyOffset;\n                    this.setInitialNodeLocation =\n                        this.setInitialNodeLocationOnlyOffsetRegular;\n                }\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            }\n            else {\n                throw Error(`Invalid <nodeLocationTracking> config option: \"${config.nodeLocationTracking}\"`);\n            }\n        }\n    }\n    setInitialNodeLocationOnlyOffsetRecovery(cstNode) {\n        cstNode.location = {\n            startOffset: NaN,\n            endOffset: NaN,\n        };\n    }\n    setInitialNodeLocationOnlyOffsetRegular(cstNode) {\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    setInitialNodeLocationFullRecovery(cstNode) {\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       *  @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n  \n       * @param cstNode\n       */\n    setInitialNodeLocationFullRegular(cstNode) {\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    cstInvocationStateUpdate(fullRuleName) {\n        const cstNode = {\n            name: fullRuleName,\n            children: Object.create(null),\n        };\n        this.setInitialNodeLocation(cstNode);\n        this.CST_STACK.push(cstNode);\n    }\n    cstFinallyStateUpdate() {\n        this.CST_STACK.pop();\n    }\n    cstPostRuleFull(ruleCstNode) {\n        // casts to `required<CstNodeLocation>` are safe because `cstPostRuleFull` should only be invoked when full location is enabled\n        const prevToken = this.LA(0);\n        const loc = ruleCstNode.location;\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    cstPostRuleOnlyOffset(ruleCstNode) {\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        // 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    cstPostTerminal(key, consumedToken) {\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, consumedToken);\n    }\n    cstPostNonTerminal(ruleCstResult, ruleName) {\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    getBaseCstVisitorConstructor() {\n        if (isUndefined(this.baseCstVisitorConstructor)) {\n            const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, keys(this.gastProductionsCache));\n            this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;\n            return newBaseCstVisitorConstructor;\n        }\n        return this.baseCstVisitorConstructor;\n    }\n    getBaseCstVisitorConstructorWithDefaults() {\n        if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n            const newConstructor = createBaseVisitorConstructorWithDefaults(this.className, keys(this.gastProductionsCache), this.getBaseCstVisitorConstructor());\n            this.baseCstVisitorWithDefaultsConstructor = newConstructor;\n            return newConstructor;\n        }\n        return this.baseCstVisitorWithDefaultsConstructor;\n    }\n    getLastExplicitRuleShortName() {\n        const ruleStack = this.RULE_STACK;\n        return ruleStack[ruleStack.length - 1];\n    }\n    getPreviousExplicitRuleShortName() {\n        const ruleStack = this.RULE_STACK;\n        return ruleStack[ruleStack.length - 2];\n    }\n    getLastExplicitRuleOccurrenceIndex() {\n        const occurrenceStack = this.RULE_OCCURRENCE_STACK;\n        return occurrenceStack[occurrenceStack.length - 1];\n    }\n}\n//# sourceMappingURL=tree_builder.js.map","import { END_OF_FILE } from \"../parser.js\";\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    initLexerAdapter() {\n        this.tokVector = [];\n        this.tokVectorLength = 0;\n        this.currIdx = -1;\n    }\n    set input(newInput) {\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(`Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`);\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    get input() {\n        return this.tokVector;\n    }\n    // skips a token and returns the next token\n    SKIP_TOKEN() {\n        if (this.currIdx <= this.tokVector.length - 2) {\n            this.consumeToken();\n            return this.LA(1);\n        }\n        else {\n            return END_OF_FILE;\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(howMuch) {\n        const soughtIdx = this.currIdx + howMuch;\n        if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n            return END_OF_FILE;\n        }\n        else {\n            return this.tokVector[soughtIdx];\n        }\n    }\n    consumeToken() {\n        this.currIdx++;\n    }\n    exportLexerState() {\n        return this.currIdx;\n    }\n    importLexerState(newState) {\n        this.currIdx = newState;\n    }\n    resetLexerState() {\n        this.currIdx = -1;\n    }\n    moveToTerminatedState() {\n        this.currIdx = this.tokVector.length - 1;\n    }\n    getLexerPosition() {\n        return this.exportLexerState();\n    }\n}\n//# sourceMappingURL=lexer_adapter.js.map","import { includes, values } from \"lodash-es\";\nimport { isRecognitionException } from \"../../exceptions_public.js\";\nimport { DEFAULT_RULE_CONFIG, ParserDefinitionErrorType } from \"../parser.js\";\nimport { defaultGrammarValidatorErrorProvider } from \"../../errors_public.js\";\nimport { validateRuleIsOverridden } from \"../../grammar/checks.js\";\nimport { serializeGrammar } from \"@chevrotain/gast\";\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(impl) {\n        return impl.call(this);\n    }\n    consume(idx, tokType, options) {\n        return this.consumeInternal(tokType, idx, options);\n    }\n    subrule(idx, ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, idx, options);\n    }\n    option(idx, actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, idx);\n    }\n    or(idx, altsOrOpts) {\n        return this.orInternal(altsOrOpts, idx);\n    }\n    many(idx, actionORMethodDef) {\n        return this.manyInternal(idx, actionORMethodDef);\n    }\n    atLeastOne(idx, actionORMethodDef) {\n        return this.atLeastOneInternal(idx, actionORMethodDef);\n    }\n    CONSUME(tokType, options) {\n        return this.consumeInternal(tokType, 0, options);\n    }\n    CONSUME1(tokType, options) {\n        return this.consumeInternal(tokType, 1, options);\n    }\n    CONSUME2(tokType, options) {\n        return this.consumeInternal(tokType, 2, options);\n    }\n    CONSUME3(tokType, options) {\n        return this.consumeInternal(tokType, 3, options);\n    }\n    CONSUME4(tokType, options) {\n        return this.consumeInternal(tokType, 4, options);\n    }\n    CONSUME5(tokType, options) {\n        return this.consumeInternal(tokType, 5, options);\n    }\n    CONSUME6(tokType, options) {\n        return this.consumeInternal(tokType, 6, options);\n    }\n    CONSUME7(tokType, options) {\n        return this.consumeInternal(tokType, 7, options);\n    }\n    CONSUME8(tokType, options) {\n        return this.consumeInternal(tokType, 8, options);\n    }\n    CONSUME9(tokType, options) {\n        return this.consumeInternal(tokType, 9, options);\n    }\n    SUBRULE(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 0, options);\n    }\n    SUBRULE1(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 1, options);\n    }\n    SUBRULE2(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 2, options);\n    }\n    SUBRULE3(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 3, options);\n    }\n    SUBRULE4(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 4, options);\n    }\n    SUBRULE5(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 5, options);\n    }\n    SUBRULE6(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 6, options);\n    }\n    SUBRULE7(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 7, options);\n    }\n    SUBRULE8(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 8, options);\n    }\n    SUBRULE9(ruleToCall, options) {\n        return this.subruleInternal(ruleToCall, 9, options);\n    }\n    OPTION(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 0);\n    }\n    OPTION1(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 1);\n    }\n    OPTION2(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 2);\n    }\n    OPTION3(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 3);\n    }\n    OPTION4(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 4);\n    }\n    OPTION5(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 5);\n    }\n    OPTION6(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 6);\n    }\n    OPTION7(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 7);\n    }\n    OPTION8(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 8);\n    }\n    OPTION9(actionORMethodDef) {\n        return this.optionInternal(actionORMethodDef, 9);\n    }\n    OR(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 0);\n    }\n    OR1(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 1);\n    }\n    OR2(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 2);\n    }\n    OR3(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 3);\n    }\n    OR4(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 4);\n    }\n    OR5(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 5);\n    }\n    OR6(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 6);\n    }\n    OR7(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 7);\n    }\n    OR8(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 8);\n    }\n    OR9(altsOrOpts) {\n        return this.orInternal(altsOrOpts, 9);\n    }\n    MANY(actionORMethodDef) {\n        this.manyInternal(0, actionORMethodDef);\n    }\n    MANY1(actionORMethodDef) {\n        this.manyInternal(1, actionORMethodDef);\n    }\n    MANY2(actionORMethodDef) {\n        this.manyInternal(2, actionORMethodDef);\n    }\n    MANY3(actionORMethodDef) {\n        this.manyInternal(3, actionORMethodDef);\n    }\n    MANY4(actionORMethodDef) {\n        this.manyInternal(4, actionORMethodDef);\n    }\n    MANY5(actionORMethodDef) {\n        this.manyInternal(5, actionORMethodDef);\n    }\n    MANY6(actionORMethodDef) {\n        this.manyInternal(6, actionORMethodDef);\n    }\n    MANY7(actionORMethodDef) {\n        this.manyInternal(7, actionORMethodDef);\n    }\n    MANY8(actionORMethodDef) {\n        this.manyInternal(8, actionORMethodDef);\n    }\n    MANY9(actionORMethodDef) {\n        this.manyInternal(9, actionORMethodDef);\n    }\n    MANY_SEP(options) {\n        this.manySepFirstInternal(0, options);\n    }\n    MANY_SEP1(options) {\n        this.manySepFirstInternal(1, options);\n    }\n    MANY_SEP2(options) {\n        this.manySepFirstInternal(2, options);\n    }\n    MANY_SEP3(options) {\n        this.manySepFirstInternal(3, options);\n    }\n    MANY_SEP4(options) {\n        this.manySepFirstInternal(4, options);\n    }\n    MANY_SEP5(options) {\n        this.manySepFirstInternal(5, options);\n    }\n    MANY_SEP6(options) {\n        this.manySepFirstInternal(6, options);\n    }\n    MANY_SEP7(options) {\n        this.manySepFirstInternal(7, options);\n    }\n    MANY_SEP8(options) {\n        this.manySepFirstInternal(8, options);\n    }\n    MANY_SEP9(options) {\n        this.manySepFirstInternal(9, options);\n    }\n    AT_LEAST_ONE(actionORMethodDef) {\n        this.atLeastOneInternal(0, actionORMethodDef);\n    }\n    AT_LEAST_ONE1(actionORMethodDef) {\n        return this.atLeastOneInternal(1, actionORMethodDef);\n    }\n    AT_LEAST_ONE2(actionORMethodDef) {\n        this.atLeastOneInternal(2, actionORMethodDef);\n    }\n    AT_LEAST_ONE3(actionORMethodDef) {\n        this.atLeastOneInternal(3, actionORMethodDef);\n    }\n    AT_LEAST_ONE4(actionORMethodDef) {\n        this.atLeastOneInternal(4, actionORMethodDef);\n    }\n    AT_LEAST_ONE5(actionORMethodDef) {\n        this.atLeastOneInternal(5, actionORMethodDef);\n    }\n    AT_LEAST_ONE6(actionORMethodDef) {\n        this.atLeastOneInternal(6, actionORMethodDef);\n    }\n    AT_LEAST_ONE7(actionORMethodDef) {\n        this.atLeastOneInternal(7, actionORMethodDef);\n    }\n    AT_LEAST_ONE8(actionORMethodDef) {\n        this.atLeastOneInternal(8, actionORMethodDef);\n    }\n    AT_LEAST_ONE9(actionORMethodDef) {\n        this.atLeastOneInternal(9, actionORMethodDef);\n    }\n    AT_LEAST_ONE_SEP(options) {\n        this.atLeastOneSepFirstInternal(0, options);\n    }\n    AT_LEAST_ONE_SEP1(options) {\n        this.atLeastOneSepFirstInternal(1, options);\n    }\n    AT_LEAST_ONE_SEP2(options) {\n        this.atLeastOneSepFirstInternal(2, options);\n    }\n    AT_LEAST_ONE_SEP3(options) {\n        this.atLeastOneSepFirstInternal(3, options);\n    }\n    AT_LEAST_ONE_SEP4(options) {\n        this.atLeastOneSepFirstInternal(4, options);\n    }\n    AT_LEAST_ONE_SEP5(options) {\n        this.atLeastOneSepFirstInternal(5, options);\n    }\n    AT_LEAST_ONE_SEP6(options) {\n        this.atLeastOneSepFirstInternal(6, options);\n    }\n    AT_LEAST_ONE_SEP7(options) {\n        this.atLeastOneSepFirstInternal(7, options);\n    }\n    AT_LEAST_ONE_SEP8(options) {\n        this.atLeastOneSepFirstInternal(8, options);\n    }\n    AT_LEAST_ONE_SEP9(options) {\n        this.atLeastOneSepFirstInternal(9, options);\n    }\n    RULE(name, implementation, config = DEFAULT_RULE_CONFIG) {\n        if (includes(this.definedRulesNames, name)) {\n            const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n                topLevelRule: name,\n                grammarName: this.className,\n            });\n            const error = {\n                message: errMsg,\n                type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n                ruleName: name,\n            };\n            this.definitionErrors.push(error);\n        }\n        this.definedRulesNames.push(name);\n        const ruleImplementation = this.defineRule(name, implementation, config);\n        this[name] = ruleImplementation;\n        return ruleImplementation;\n    }\n    OVERRIDE_RULE(name, impl, config = DEFAULT_RULE_CONFIG) {\n        const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className);\n        this.definitionErrors = this.definitionErrors.concat(ruleErrors);\n        const ruleImplementation = this.defineRule(name, impl, config);\n        this[name] = ruleImplementation;\n        return ruleImplementation;\n    }\n    BACKTRACK(grammarRule, args) {\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            }\n            catch (e) {\n                if (isRecognitionException(e)) {\n                    return false;\n                }\n                else {\n                    throw e;\n                }\n            }\n            finally {\n                this.reloadRecogState(orgState);\n                this.isBackTrackingStack.pop();\n            }\n        };\n    }\n    // GAST export APIs\n    getGAstProductions() {\n        return this.gastProductionsCache;\n    }\n    getSerializedGastProductions() {\n        return serializeGrammar(values(this.gastProductionsCache));\n    }\n}\n//# sourceMappingURL=recognizer_api.js.map","import { clone, every, flatten, has, isArray, isEmpty, isObject, reduce, uniq, values, } from \"lodash-es\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, BITS_FOR_METHOD_TYPE, BITS_FOR_OCCURRENCE_IDX, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX, } from \"../../grammar/keys.js\";\nimport { isRecognitionException, MismatchedTokenException, NotAllInputParsedException, } from \"../../exceptions_public.js\";\nimport { PROD_TYPE } from \"../../grammar/lookahead.js\";\nimport { NextTerminalAfterAtLeastOneSepWalker, NextTerminalAfterAtLeastOneWalker, NextTerminalAfterManySepWalker, NextTerminalAfterManyWalker, } from \"../../grammar/interpreter.js\";\nimport { DEFAULT_RULE_CONFIG } from \"../parser.js\";\nimport { IN_RULE_RECOVERY_EXCEPTION } from \"./recoverable.js\";\nimport { EOF } from \"../../../scan/tokens_public.js\";\nimport { augmentTokenTypes, isTokenType, tokenStructuredMatcher, tokenStructuredMatcherNoCategories, } from \"../../../scan/tokens.js\";\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    initRecognizerEngine(tokenVocabulary, config) {\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        this.definedRulesNames = [];\n        this.tokensMap = {};\n        this.isBackTrackingStack = [];\n        this.RULE_STACK = [];\n        this.RULE_OCCURRENCE_STACK = [];\n        this.gastProductionsCache = {};\n        if (has(config, \"serializedGrammar\")) {\n            throw Error(\"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        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)) {\n                throw Error(\"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            if (typeof tokenVocabulary[0].startOffset === \"number\") {\n                throw Error(\"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        if (isArray(tokenVocabulary)) {\n            this.tokensMap = reduce(tokenVocabulary, (acc, tokType) => {\n                acc[tokType.name] = tokType;\n                return acc;\n            }, {});\n        }\n        else if (has(tokenVocabulary, \"modes\") &&\n            every(flatten(values(tokenVocabulary.modes)), isTokenType)) {\n            const allTokenTypes = flatten(values(tokenVocabulary.modes));\n            const uniqueTokens = uniq(allTokenTypes);\n            this.tokensMap = reduce(uniqueTokens, (acc, tokType) => {\n                acc[tokType.name] = tokType;\n                return acc;\n            }, {});\n        }\n        else if (isObject(tokenVocabulary)) {\n            this.tokensMap = clone(tokenVocabulary);\n        }\n        else {\n            throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors,\" +\n                \" A dictionary of Token constructors or an IMultiModeLexerDefinition\");\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        const allTokenTypes = has(tokenVocabulary, \"modes\")\n            ? flatten(values(tokenVocabulary.modes))\n            : values(tokenVocabulary);\n        const noTokenCategoriesUsed = every(allTokenTypes, (tokenConstructor) => isEmpty(tokenConstructor.categoryMatches));\n        this.tokenMatcher = noTokenCategoriesUsed\n            ? tokenStructuredMatcherNoCategories\n            : tokenStructuredMatcher;\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    defineRule(ruleName, impl, config) {\n        if (this.selfAnalysisDone) {\n            throw Error(`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        const resyncEnabled = has(config, \"resyncEnabled\")\n            ? config.resyncEnabled // assumes end user provides the correct config value/type\n            : DEFAULT_RULE_CONFIG.resyncEnabled;\n        const recoveryValueFunc = has(config, \"recoveryValueFunc\")\n            ? config.recoveryValueFunc // assumes end user provides the correct config value/type\n            : DEFAULT_RULE_CONFIG.recoveryValueFunc;\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 = this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX);\n        this.ruleShortNameIdx++;\n        this.shortRuleNameToFull[shortName] = ruleName;\n        this.fullRuleNameToShort[ruleName] = shortName;\n        let invokeRuleWithTry;\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(...args) {\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;\n                }\n                catch (e) {\n                    return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);\n                }\n                finally {\n                    this.ruleFinallyStateUpdate();\n                }\n            };\n        }\n        else {\n            invokeRuleWithTry = function invokeRuleWithTryCst(...args) {\n                try {\n                    this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);\n                    return impl.apply(this, args);\n                }\n                catch (e) {\n                    return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);\n                }\n                finally {\n                    this.ruleFinallyStateUpdate();\n                }\n            };\n        }\n        const wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName, originalGrammarAction: impl });\n        return wrappedGrammarRule;\n    }\n    invokeRuleCatch(e, resyncEnabledConfig, recoveryValueFunc) {\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 = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled;\n        if (isRecognitionException(e)) {\n            const recogError = 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 = this.CST_STACK[this.CST_STACK.length - 1];\n                        partialCstResult.recoveredNode = true;\n                        return partialCstResult;\n                    }\n                    else {\n                        return recoveryValueFunc(e);\n                    }\n                }\n                else {\n                    if (this.outputCst) {\n                        const partialCstResult = 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            }\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            }\n            else {\n                // to be recovered Further up the call stack\n                throw recogError;\n            }\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    // Implementation of parsing DSL\n    optionInternal(actionORMethodDef, occurrence) {\n        const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);\n        return this.optionInternalLogic(actionORMethodDef, occurrence, key);\n    }\n    optionInternalLogic(actionORMethodDef, occurrence, key) {\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        }\n        else {\n            action = actionORMethodDef;\n        }\n        if (lookAheadFunc.call(this) === true) {\n            return action.call(this);\n        }\n        return undefined;\n    }\n    atLeastOneInternal(prodOccurrence, actionORMethodDef) {\n        const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence);\n        return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n    }\n    atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) {\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        }\n        else {\n            action = actionORMethodDef;\n        }\n        if (lookAheadFunc.call(this) === true) {\n            let notStuck = this.doSingleRepetition(action);\n            while (lookAheadFunc.call(this) === true &&\n                notStuck === true) {\n                notStuck = this.doSingleRepetition(action);\n            }\n        }\n        else {\n            throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG);\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        // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n        this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, AT_LEAST_ONE_IDX, prodOccurrence, NextTerminalAfterAtLeastOneWalker);\n    }\n    atLeastOneSepFirstInternal(prodOccurrence, options) {\n        const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence);\n        this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);\n    }\n    atLeastOneSepFirstInternalLogic(prodOccurrence, options, key) {\n        const action = options.DEF;\n        const separator = options.SEP;\n        const firstIterationLookaheadFunc = this.getLaFuncFromCache(key);\n        // 1st iteration\n        if (firstIterationLookaheadFunc.call(this) === true) {\n            action.call(this);\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            // 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            // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n            this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n                prodOccurrence,\n                separator,\n                separatorLookAheadFunc,\n                action,\n                NextTerminalAfterAtLeastOneSepWalker,\n            ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, NextTerminalAfterAtLeastOneSepWalker);\n        }\n        else {\n            throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options.ERR_MSG);\n        }\n    }\n    manyInternal(prodOccurrence, actionORMethodDef) {\n        const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);\n        return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n    }\n    manyInternalLogic(prodOccurrence, actionORMethodDef, key) {\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        }\n        else {\n            action = actionORMethodDef;\n        }\n        let notStuck = true;\n        while (lookaheadFunction.call(this) === true && notStuck === true) {\n            notStuck = this.doSingleRepetition(action);\n        }\n        // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n        this.attemptInRepetitionRecovery(this.manyInternal, [prodOccurrence, actionORMethodDef], lookaheadFunction, MANY_IDX, prodOccurrence, 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    manySepFirstInternal(prodOccurrence, options) {\n        const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence);\n        this.manySepFirstInternalLogic(prodOccurrence, options, laKey);\n    }\n    manySepFirstInternalLogic(prodOccurrence, options, key) {\n        const action = options.DEF;\n        const separator = options.SEP;\n        const firstIterationLaFunc = this.getLaFuncFromCache(key);\n        // 1st iteration\n        if (firstIterationLaFunc.call(this) === true) {\n            action.call(this);\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            // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n            this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n                prodOccurrence,\n                separator,\n                separatorLookAheadFunc,\n                action,\n                NextTerminalAfterManySepWalker,\n            ], separatorLookAheadFunc, MANY_SEP_IDX, prodOccurrence, NextTerminalAfterManySepWalker);\n        }\n    }\n    repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {\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        // 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(this.repetitionSepSecondInternal, [\n            prodOccurrence,\n            separator,\n            separatorLookAheadFunc,\n            action,\n            nextTerminalAfterWalker,\n        ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker);\n    }\n    doSingleRepetition(action) {\n        const beforeIteration = this.getLexerPosition();\n        action.call(this);\n        const afterIteration = this.getLexerPosition();\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    orInternal(altsOrOpts, occurrence) {\n        const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);\n        const alts = isArray(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF;\n        const laFunc = this.getLaFuncFromCache(laKey);\n        const altIdxToTake = laFunc.call(this, alts);\n        if (altIdxToTake !== undefined) {\n            const chosenAlternative = alts[altIdxToTake];\n            return chosenAlternative.ALT.call(this);\n        }\n        this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);\n    }\n    ruleFinallyStateUpdate() {\n        this.RULE_STACK.pop();\n        this.RULE_OCCURRENCE_STACK.pop();\n        // NOOP when cst is disabled\n        this.cstFinallyStateUpdate();\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    subruleInternal(ruleToCall, idx, options) {\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(ruleResult, options !== undefined && options.LABEL !== undefined\n                ? options.LABEL\n                : ruleToCall.ruleName);\n            return ruleResult;\n        }\n        catch (e) {\n            throw this.subruleInternalError(e, options, ruleToCall.ruleName);\n        }\n    }\n    subruleInternalError(e, options, ruleName) {\n        if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n            this.cstPostNonTerminal(e.partialCstResult, options !== undefined && options.LABEL !== undefined\n                ? options.LABEL\n                : ruleName);\n            delete e.partialCstResult;\n        }\n        throw e;\n    }\n    consumeInternal(tokType, idx, options) {\n        let consumedToken;\n        try {\n            const nextToken = this.LA(1);\n            if (this.tokenMatcher(nextToken, tokType) === true) {\n                this.consumeToken();\n                consumedToken = nextToken;\n            }\n            else {\n                this.consumeInternalError(tokType, nextToken, options);\n            }\n        }\n        catch (eFromConsumption) {\n            consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption);\n        }\n        this.cstPostTerminal(options !== undefined && options.LABEL !== undefined\n            ? options.LABEL\n            : tokType.name, consumedToken);\n        return consumedToken;\n    }\n    consumeInternalError(tokType, nextToken, options) {\n        let msg;\n        const previousToken = this.LA(0);\n        if (options !== undefined && options.ERR_MSG) {\n            msg = options.ERR_MSG;\n        }\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(new MismatchedTokenException(msg, nextToken, previousToken));\n    }\n    consumeInternalRecovery(tokType, idx, eFromConsumption) {\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 (this.recoveryEnabled &&\n            // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n            eFromConsumption.name === \"MismatchedTokenException\" &&\n            !this.isBackTracking()) {\n            const follows = this.getFollowsForInRuleRecovery(tokType, idx);\n            try {\n                return this.tryInRuleRecovery(tokType, follows);\n            }\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                }\n                else {\n                    throw eFromInRuleRecovery;\n                }\n            }\n        }\n        else {\n            throw eFromConsumption;\n        }\n    }\n    saveRecogState() {\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    reloadRecogState(newState) {\n        this.errors = newState.errors;\n        this.importLexerState(newState.lexerState);\n        this.RULE_STACK = newState.RULE_STACK;\n    }\n    ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) {\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    isBackTracking() {\n        return this.isBackTrackingStack.length !== 0;\n    }\n    getCurrRuleFullName() {\n        const shortName = this.getLastExplicitRuleShortName();\n        return this.shortRuleNameToFull[shortName];\n    }\n    shortRuleNameToFullName(shortName) {\n        return this.shortRuleNameToFull[shortName];\n    }\n    isAtEndOfInput() {\n        return this.tokenMatcher(this.LA(1), EOF);\n    }\n    reset() {\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//# sourceMappingURL=recognizer_engine.js.map","import { EarlyExitException, isRecognitionException, NoViableAltException, } from \"../../exceptions_public.js\";\nimport { clone, has } from \"lodash-es\";\nimport { getLookaheadPathsForOptionalProd, getLookaheadPathsForOr, } from \"../../grammar/lookahead.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class ErrorHandler {\n    initErrorHandler(config) {\n        this._errors = [];\n        this.errorMessageProvider = has(config, \"errorMessageProvider\")\n            ? config.errorMessageProvider // assumes end user provides the correct config value/type\n            : DEFAULT_PARSER_CONFIG.errorMessageProvider;\n    }\n    SAVE_ERROR(error) {\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        }\n        else {\n            throw Error(\"Trying to save an Error which is not a RecognitionException\");\n        }\n    }\n    get errors() {\n        return clone(this._errors);\n    }\n    set errors(newErrors) {\n        this._errors = newErrors;\n    }\n    // TODO: consider caching the error message computed information\n    raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) {\n        const ruleName = this.getCurrRuleFullName();\n        const ruleGrammar = this.getGAstProductions()[ruleName];\n        const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, this.maxLookahead);\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        throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)));\n    }\n    // TODO: consider caching the error message computed information\n    raiseNoAltException(occurrence, errMsgTypes) {\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(occurrence, ruleGrammar, this.maxLookahead);\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        const errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n            expectedPathsPerAlt: lookAheadPathsPerAlternative,\n            actual: actualTokens,\n            previous: previousToken,\n            customUserDescription: errMsgTypes,\n            ruleName: this.getCurrRuleFullName(),\n        });\n        throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken));\n    }\n}\n//# sourceMappingURL=error_handler.js.map","import { NextAfterTokenWalker, nextPossibleTokensAfter, } from \"../../grammar/interpreter.js\";\nimport { first, isUndefined } from \"lodash-es\";\nexport class ContentAssist {\n    initContentAssist() { }\n    computeContentAssist(startRuleName, precedingInput) {\n        const startRuleGast = this.gastProductionsCache[startRuleName];\n        if (isUndefined(startRuleGast)) {\n            throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`);\n        }\n        return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead);\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    getNextPossibleTokenTypes(grammarPath) {\n        const topRuleName = first(grammarPath.ruleStack);\n        const gastProductions = this.getGAstProductions();\n        const topProduction = gastProductions[topRuleName];\n        const nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking();\n        return nextPossibleTokenTypes;\n    }\n}\n//# sourceMappingURL=context_assist.js.map","import { forEach, has, isArray, isFunction, last as peek, some, } from \"lodash-es\";\nimport { Alternation, Alternative, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal, } from \"@chevrotain/gast\";\nimport { Lexer } from \"../../../scan/lexer_public.js\";\nimport { augmentTokenTypes, hasShortKeyProperty, } from \"../../../scan/tokens.js\";\nimport { createToken, createTokenInstance, } from \"../../../scan/tokens_public.js\";\nimport { END_OF_FILE } from \"../parser.js\";\nimport { BITS_FOR_OCCURRENCE_IDX } from \"../../grammar/keys.js\";\nconst RECORDING_NULL_OBJECT = {\n    description: \"This Object indicates the Parser is during Recording Phase\",\n};\nObject.freeze(RECORDING_NULL_OBJECT);\nconst HANDLE_SEPARATOR = true;\nconst MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1;\nconst RFT = createToken({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer.NA });\naugmentTokenTypes([RFT]);\nconst RECORDING_PHASE_TOKEN = createTokenInstance(RFT, \"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, -1, -1, -1, -1, -1);\nObject.freeze(RECORDING_PHASE_TOKEN);\nconst RECORDING_PHASE_CSTNODE = {\n    name: \"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 * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\nexport class GastRecorder {\n    initGastRecorder(config) {\n        this.recordingProdStack = [];\n        this.RECORDING_PHASE = false;\n    }\n    enableRecording() {\n        this.RECORDING_PHASE = true;\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}`] = function (arg1, arg2) {\n                    return this.consumeInternalRecord(arg1, i, arg2);\n                };\n                this[`SUBRULE${idx}`] = function (arg1, arg2) {\n                    return this.subruleInternalRecord(arg1, i, arg2);\n                };\n                this[`OPTION${idx}`] = function (arg1) {\n                    return this.optionInternalRecord(arg1, i);\n                };\n                this[`OR${idx}`] = function (arg1) {\n                    return this.orInternalRecord(arg1, i);\n                };\n                this[`MANY${idx}`] = function (arg1) {\n                    this.manyInternalRecord(i, arg1);\n                };\n                this[`MANY_SEP${idx}`] = function (arg1) {\n                    this.manySepFirstInternalRecord(i, arg1);\n                };\n                this[`AT_LEAST_ONE${idx}`] = function (arg1) {\n                    this.atLeastOneInternalRecord(i, arg1);\n                };\n                this[`AT_LEAST_ONE_SEP${idx}`] = function (arg1) {\n                    this.atLeastOneSepFirstInternalRecord(i, arg1);\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);\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            this.ACTION = this.ACTION_RECORD;\n            this.BACKTRACK = this.BACKTRACK_RECORD;\n            this.LA = this.LA_RECORD;\n        });\n    }\n    disableRecording() {\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 = this;\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            delete that[`consume`];\n            delete that[`subrule`];\n            delete that[`option`];\n            delete that[`or`];\n            delete that[`many`];\n            delete that[`atLeastOne`];\n            delete that.ACTION;\n            delete that.BACKTRACK;\n            delete that.LA;\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(impl) {\n        // NO-OP during recording\n    }\n    // Executing backtracking logic will break our recording logic assumptions\n    BACKTRACK_RECORD(grammarRule, args) {\n        return () => true;\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) {\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    topLevelRuleRecord(name, def) {\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        }\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                }\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    // Implementation of parsing DSL\n    optionInternalRecord(actionORMethodDef, occurrence) {\n        return recordProd.call(this, Option, actionORMethodDef, occurrence);\n    }\n    atLeastOneInternalRecord(occurrence, actionORMethodDef) {\n        recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence);\n    }\n    atLeastOneSepFirstInternalRecord(occurrence, options) {\n        recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n    }\n    manyInternalRecord(occurrence, actionORMethodDef) {\n        recordProd.call(this, Repetition, actionORMethodDef, occurrence);\n    }\n    manySepFirstInternalRecord(occurrence, options) {\n        recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n    }\n    orInternalRecord(altsOrOpts, occurrence) {\n        return recordOrProd.call(this, altsOrOpts, occurrence);\n    }\n    subruleInternalRecord(ruleToCall, occurrence, options) {\n        assertMethodIdxIsValid(occurrence);\n        if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n            const error = new Error(`<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid` +\n                ` expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}>` +\n                `\\n inside top level rule: <${this.recordingProdStack[0].name}>`);\n            error.KNOWN_RECORDER_ERROR = true;\n            throw error;\n        }\n        const prevProd = peek(this.recordingProdStack);\n        const ruleName = ruleToCall.ruleName;\n        const newNoneTerminal = new NonTerminal({\n            idx: occurrence,\n            nonTerminalName: ruleName,\n            label: options === null || options === void 0 ? void 0 : 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        return this.outputCst\n            ? RECORDING_PHASE_CSTNODE\n            : RECORDING_NULL_OBJECT;\n    }\n    consumeInternalRecord(tokType, occurrence, options) {\n        assertMethodIdxIsValid(occurrence);\n        if (!hasShortKeyProperty(tokType)) {\n            const error = new Error(`<CONSUME${getIdxSuffix(occurrence)}> argument is invalid` +\n                ` expecting a TokenType reference but got: <${JSON.stringify(tokType)}>` +\n                `\\n inside top level rule: <${this.recordingProdStack[0].name}>`);\n            error.KNOWN_RECORDER_ERROR = true;\n            throw error;\n        }\n        const prevProd = peek(this.recordingProdStack);\n        const newNoneTerminal = new Terminal({\n            idx: occurrence,\n            terminalType: tokType,\n            label: options === null || options === void 0 ? void 0 : options.LABEL,\n        });\n        prevProd.definition.push(newNoneTerminal);\n        return RECORDING_PHASE_TOKEN;\n    }\n}\nfunction recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) {\n    assertMethodIdxIsValid(occurrence);\n    const prevProd = peek(this.recordingProdStack);\n    const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF;\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    this.recordingProdStack.push(newProd);\n    grammarAction.call(this);\n    prevProd.definition.push(newProd);\n    this.recordingProdStack.pop();\n    return RECORDING_NULL_OBJECT;\n}\nfunction recordOrProd(mainProdArg, occurrence) {\n    assertMethodIdxIsValid(occurrence);\n    const prevProd = peek(this.recordingProdStack);\n    // Only an array of alternatives\n    const hasOptions = isArray(mainProdArg) === false;\n    const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF;\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    const hasPredicates = some(alts, (currAlt) => isFunction(currAlt.GATE));\n    newOrProd.hasPredicates = hasPredicates;\n    prevProd.definition.push(newOrProd);\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; // 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}\nfunction getIdxSuffix(idx) {\n    return idx === 0 ? \"\" : `${idx}`;\n}\nfunction assertMethodIdxIsValid(idx) {\n    if (idx < 0 || idx > MAX_METHOD_IDX) {\n        const error = 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 ${MAX_METHOD_IDX + 1}`);\n        error.KNOWN_RECORDER_ERROR = true;\n        throw error;\n    }\n}\n//# sourceMappingURL=gast_recorder.js.map","import { has } from \"lodash-es\";\nimport { timer } from \"@chevrotain/utils\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class PerformanceTracer {\n    initPerformanceTracer(config) {\n        if (has(config, \"traceInitPerf\")) {\n            const userTraceInitPerf = config.traceInitPerf;\n            const traceIsNumber = typeof userTraceInitPerf === \"number\";\n            this.traceInitMaxIdent = traceIsNumber\n                ? userTraceInitPerf\n                : Infinity;\n            this.traceInitPerf = traceIsNumber\n                ? userTraceInitPerf > 0\n                : userTraceInitPerf; // assumes end user provides the correct config value/type\n        }\n        else {\n            this.traceInitMaxIdent = 0;\n            this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf;\n        }\n        this.traceInitIndent = -1;\n    }\n    TRACE_INIT(phaseDesc, phaseImpl) {\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        }\n        else {\n            return phaseImpl();\n        }\n    }\n}\n//# sourceMappingURL=perf_tracer.js.map","export function applyMixins(derivedCtor, baseCtors) {\n    baseCtors.forEach((baseCtor) => {\n        const baseProto = baseCtor.prototype;\n        Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n            if (propName === \"constructor\") {\n                return;\n            }\n            const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName);\n            // Handle Accessors\n            if (basePropDescriptor &&\n                (basePropDescriptor.get || basePropDescriptor.set)) {\n                Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor);\n            }\n            else {\n                derivedCtor.prototype[propName] = baseCtor.prototype[propName];\n            }\n        });\n    });\n}\n//# sourceMappingURL=apply_mixins.js.map","import { clone, forEach, has, isEmpty, map, values } from \"lodash-es\";\nimport { toFastProperties } from \"@chevrotain/utils\";\nimport { computeAllProdsFollows } from \"../grammar/follow.js\";\nimport { createTokenInstance, EOF } from \"../../scan/tokens_public.js\";\nimport { defaultGrammarValidatorErrorProvider, defaultParserErrorProvider, } from \"../errors_public.js\";\nimport { resolveGrammar, validateGrammar, } from \"../grammar/gast/gast_resolver_public.js\";\nimport { Recoverable } from \"./traits/recoverable.js\";\nimport { LooksAhead } from \"./traits/looksahead.js\";\nimport { TreeBuilder } from \"./traits/tree_builder.js\";\nimport { LexerAdapter } from \"./traits/lexer_adapter.js\";\nimport { RecognizerApi } from \"./traits/recognizer_api.js\";\nimport { RecognizerEngine } from \"./traits/recognizer_engine.js\";\nimport { ErrorHandler } from \"./traits/error_handler.js\";\nimport { ContentAssist } from \"./traits/context_assist.js\";\nimport { GastRecorder } from \"./traits/gast_recorder.js\";\nimport { PerformanceTracer } from \"./traits/perf_tracer.js\";\nimport { applyMixins } from \"./utils/apply_mixins.js\";\nimport { validateLookahead } from \"../grammar/checks.js\";\nexport const END_OF_FILE = createTokenInstance(EOF, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\nObject.freeze(END_OF_FILE);\nexport const DEFAULT_PARSER_CONFIG = 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});\nexport const DEFAULT_RULE_CONFIG = Object.freeze({\n    recoveryValueFunc: () => undefined,\n    resyncEnabled: true,\n});\nexport var ParserDefinitionErrorType;\n(function (ParserDefinitionErrorType) {\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_RULE_NAME\"] = 0] = \"INVALID_RULE_NAME\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_RULE_NAME\"] = 1] = \"DUPLICATE_RULE_NAME\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_RULE_OVERRIDE\"] = 2] = \"INVALID_RULE_OVERRIDE\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_PRODUCTIONS\"] = 3] = \"DUPLICATE_PRODUCTIONS\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"UNRESOLVED_SUBRULE_REF\"] = 4] = \"UNRESOLVED_SUBRULE_REF\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"LEFT_RECURSION\"] = 5] = \"LEFT_RECURSION\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"NONE_LAST_EMPTY_ALT\"] = 6] = \"NONE_LAST_EMPTY_ALT\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"AMBIGUOUS_ALTS\"] = 7] = \"AMBIGUOUS_ALTS\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"CONFLICT_TOKENS_RULES_NAMESPACE\"] = 8] = \"CONFLICT_TOKENS_RULES_NAMESPACE\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_TOKEN_NAME\"] = 9] = \"INVALID_TOKEN_NAME\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"NO_NON_EMPTY_LOOKAHEAD\"] = 10] = \"NO_NON_EMPTY_LOOKAHEAD\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"AMBIGUOUS_PREFIX_ALTS\"] = 11] = \"AMBIGUOUS_PREFIX_ALTS\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"TOO_MANY_ALTS\"] = 12] = \"TOO_MANY_ALTS\";\n    ParserDefinitionErrorType[ParserDefinitionErrorType[\"CUSTOM_LOOKAHEAD_VALIDATION\"] = 13] = \"CUSTOM_LOOKAHEAD_VALIDATION\";\n})(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}));\nexport function EMPTY_ALT(value = undefined) {\n    return function () {\n        return value;\n    };\n}\nexport class Parser {\n    /**\n     *  @deprecated use the **instance** method with the same name instead\n     */\n    static performSelfAnalysis(parserInstance) {\n        throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\" +\n            \"\\t\\nUse the **instance** method with the same name instead.\");\n    }\n    performSelfAnalysis() {\n        this.TRACE_INIT(\"performSelfAnalysis\", () => {\n            let defErrorsMsgs;\n            this.selfAnalysisDone = true;\n            const className = this.className;\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            this.TRACE_INIT(\"Grammar Recording\", () => {\n                try {\n                    this.enableRecording();\n                    // Building the GAST\n                    forEach(this.definedRulesNames, (currRuleName) => {\n                        const wrappedRule = this[currRuleName];\n                        const originalGrammarAction = wrappedRule[\"originalGrammarAction\"];\n                        let recordedRuleGast;\n                        this.TRACE_INIT(`${currRuleName} Rule`, () => {\n                            recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction);\n                        });\n                        this.gastProductionsCache[currRuleName] = recordedRuleGast;\n                    });\n                }\n                finally {\n                    this.disableRecording();\n                }\n            });\n            let resolverErrors = [];\n            this.TRACE_INIT(\"Grammar Resolving\", () => {\n                resolverErrors = resolveGrammar({\n                    rules: values(this.gastProductionsCache),\n                });\n                this.definitionErrors = this.definitionErrors.concat(resolverErrors);\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(validationErrors, lookaheadValidationErrors);\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(values(this.gastProductionsCache));\n                        this.resyncFollows = allFollows;\n                    });\n                }\n                this.TRACE_INIT(\"ComputeLookaheadFunctions\", () => {\n                    var _a, _b;\n                    (_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0 ? void 0 : _b.call(_a, {\n                        rules: values(this.gastProductionsCache),\n                    });\n                    this.preComputeLookaheadFunctions(values(this.gastProductionsCache));\n                });\n            }\n            if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING &&\n                !isEmpty(this.definitionErrors)) {\n                defErrorsMsgs = map(this.definitionErrors, (defError) => defError.message);\n                throw new Error(`Parser Definition Errors detected:\\n ${defErrorsMsgs.join(\"\\n-------------------------------\\n\")}`);\n            }\n        });\n    }\n    constructor(tokenVocabulary, config) {\n        this.definitionErrors = [];\n        this.selfAnalysisDone = false;\n        const that = this;\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        if (has(config, \"ignoredIssues\")) {\n            throw new Error(\"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        this.skipValidations = has(config, \"skipValidations\")\n            ? config.skipValidations // casting assumes the end user passing the correct type\n            : DEFAULT_PARSER_CONFIG.skipValidations;\n    }\n}\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).\nParser.DEFER_DEFINITION_ERRORS_HANDLING = false;\napplyMixins(Parser, [\n    Recoverable,\n    LooksAhead,\n    TreeBuilder,\n    LexerAdapter,\n    RecognizerEngine,\n    RecognizerApi,\n    ErrorHandler,\n    ContentAssist,\n    GastRecorder,\n    PerformanceTracer,\n]);\nexport class CstParser extends Parser {\n    constructor(tokenVocabulary, config = DEFAULT_PARSER_CONFIG) {\n        const configClone = clone(config);\n        configClone.outputCst = true;\n        super(tokenVocabulary, configClone);\n    }\n}\nexport class EmbeddedActionsParser extends Parser {\n    constructor(tokenVocabulary, config = DEFAULT_PARSER_CONFIG) {\n        const configClone = clone(config);\n        configClone.outputCst = false;\n        super(tokenVocabulary, configClone);\n    }\n}\n//# sourceMappingURL=parser.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport map from \"lodash-es/map.js\";\nimport filter from \"lodash-es/filter.js\";\nimport { Alternation, NonTerminal, Option, RepetitionMandatory, Repetition, Terminal, RepetitionWithSeparator, RepetitionMandatoryWithSeparator } from \"chevrotain\";\nexport function buildATNKey(rule, type, occurrence) {\n    return `${rule.name}_${type}_${occurrence}`;\n}\nexport const ATN_INVALID_TYPE = 0;\nexport const ATN_BASIC = 1;\nexport const ATN_RULE_START = 2;\nexport const ATN_PLUS_BLOCK_START = 4;\nexport const ATN_STAR_BLOCK_START = 5;\n// Currently unused as the ATN is not used for lexing\nexport const ATN_TOKEN_START = 6;\nexport const ATN_RULE_STOP = 7;\nexport const ATN_BLOCK_END = 8;\nexport const ATN_STAR_LOOP_BACK = 9;\nexport const ATN_STAR_LOOP_ENTRY = 10;\nexport const ATN_PLUS_LOOP_BACK = 11;\nexport const ATN_LOOP_END = 12;\nexport class AbstractTransition {\n    constructor(target) {\n        this.target = target;\n    }\n    isEpsilon() {\n        return false;\n    }\n}\nexport class AtomTransition extends AbstractTransition {\n    constructor(target, tokenType) {\n        super(target);\n        this.tokenType = tokenType;\n    }\n}\nexport class EpsilonTransition extends AbstractTransition {\n    constructor(target) {\n        super(target);\n    }\n    isEpsilon() {\n        return true;\n    }\n}\nexport class RuleTransition extends AbstractTransition {\n    constructor(ruleStart, rule, followState) {\n        super(ruleStart);\n        this.rule = rule;\n        this.followState = followState;\n    }\n    isEpsilon() {\n        return true;\n    }\n}\nexport function createATN(rules) {\n    const atn = {\n        decisionMap: {},\n        decisionStates: [],\n        ruleToStartState: new Map(),\n        ruleToStopState: new Map(),\n        states: []\n    };\n    createRuleStartAndStopATNStates(atn, rules);\n    const ruleLength = rules.length;\n    for (let i = 0; i < ruleLength; i++) {\n        const rule = rules[i];\n        const ruleBlock = block(atn, rule, rule);\n        if (ruleBlock === undefined) {\n            continue;\n        }\n        buildRuleHandle(atn, rule, ruleBlock);\n    }\n    return atn;\n}\nfunction createRuleStartAndStopATNStates(atn, rules) {\n    const ruleLength = rules.length;\n    for (let i = 0; i < ruleLength; i++) {\n        const rule = rules[i];\n        const start = newState(atn, rule, undefined, {\n            type: ATN_RULE_START\n        });\n        const stop = newState(atn, rule, undefined, {\n            type: ATN_RULE_STOP\n        });\n        start.stop = stop;\n        atn.ruleToStartState.set(rule, start);\n        atn.ruleToStopState.set(rule, stop);\n    }\n}\nfunction atom(atn, rule, production) {\n    if (production instanceof Terminal) {\n        return tokenRef(atn, rule, production.terminalType, production);\n    }\n    else if (production instanceof NonTerminal) {\n        return ruleRef(atn, rule, production);\n    }\n    else if (production instanceof Alternation) {\n        return alternation(atn, rule, production);\n    }\n    else if (production instanceof Option) {\n        return option(atn, rule, production);\n    }\n    else if (production instanceof Repetition) {\n        return repetition(atn, rule, production);\n    }\n    else if (production instanceof RepetitionWithSeparator) {\n        return repetitionSep(atn, rule, production);\n    }\n    else if (production instanceof RepetitionMandatory) {\n        return repetitionMandatory(atn, rule, production);\n    }\n    else if (production instanceof RepetitionMandatoryWithSeparator) {\n        return repetitionMandatorySep(atn, rule, production);\n    }\n    else {\n        return block(atn, rule, production);\n    }\n}\nfunction repetition(atn, rule, repetition) {\n    const starState = newState(atn, rule, repetition, {\n        type: ATN_STAR_BLOCK_START\n    });\n    defineDecisionState(atn, starState);\n    const handle = makeAlts(atn, rule, starState, repetition, block(atn, rule, repetition));\n    return star(atn, rule, repetition, handle);\n}\nfunction repetitionSep(atn, rule, repetition) {\n    const starState = newState(atn, rule, repetition, {\n        type: ATN_STAR_BLOCK_START\n    });\n    defineDecisionState(atn, starState);\n    const handle = makeAlts(atn, rule, starState, repetition, block(atn, rule, repetition));\n    const sep = tokenRef(atn, rule, repetition.separator, repetition);\n    return star(atn, rule, repetition, handle, sep);\n}\nfunction repetitionMandatory(atn, rule, repetition) {\n    const plusState = newState(atn, rule, repetition, {\n        type: ATN_PLUS_BLOCK_START\n    });\n    defineDecisionState(atn, plusState);\n    const handle = makeAlts(atn, rule, plusState, repetition, block(atn, rule, repetition));\n    return plus(atn, rule, repetition, handle);\n}\nfunction repetitionMandatorySep(atn, rule, repetition) {\n    const plusState = newState(atn, rule, repetition, {\n        type: ATN_PLUS_BLOCK_START\n    });\n    defineDecisionState(atn, plusState);\n    const handle = makeAlts(atn, rule, plusState, repetition, block(atn, rule, repetition));\n    const sep = tokenRef(atn, rule, repetition.separator, repetition);\n    return plus(atn, rule, repetition, handle, sep);\n}\nfunction alternation(atn, rule, alternation) {\n    const start = newState(atn, rule, alternation, {\n        type: ATN_BASIC\n    });\n    defineDecisionState(atn, start);\n    const alts = map(alternation.definition, (e) => atom(atn, rule, e));\n    const handle = makeAlts(atn, rule, start, alternation, ...alts);\n    return handle;\n}\nfunction option(atn, rule, option) {\n    const start = newState(atn, rule, option, {\n        type: ATN_BASIC\n    });\n    defineDecisionState(atn, start);\n    const handle = makeAlts(atn, rule, start, option, block(atn, rule, option));\n    return optional(atn, rule, option, handle);\n}\nfunction block(atn, rule, block) {\n    const handles = filter(map(block.definition, (e) => atom(atn, rule, e)), (e) => e !== undefined);\n    if (handles.length === 1) {\n        return handles[0];\n    }\n    else if (handles.length === 0) {\n        return undefined;\n    }\n    else {\n        return makeBlock(atn, handles);\n    }\n}\nfunction plus(atn, rule, plus, handle, sep) {\n    const blkStart = handle.left;\n    const blkEnd = handle.right;\n    const loop = newState(atn, rule, plus, {\n        type: ATN_PLUS_LOOP_BACK\n    });\n    defineDecisionState(atn, loop);\n    const end = newState(atn, rule, plus, {\n        type: ATN_LOOP_END\n    });\n    blkStart.loopback = loop;\n    end.loopback = loop;\n    atn.decisionMap[buildATNKey(rule, sep ? 'RepetitionMandatoryWithSeparator' : 'RepetitionMandatory', plus.idx)] = loop;\n    epsilon(blkEnd, loop); // block can see loop back\n    // Depending on whether we have a separator we put the exit transition at index 1 or 0\n    // This influences the chosen option in the lookahead DFA\n    if (sep === undefined) {\n        epsilon(loop, blkStart); // loop back to start\n        epsilon(loop, end); // exit\n    }\n    else {\n        epsilon(loop, end); // exit\n        // loop back to start with separator\n        epsilon(loop, sep.left);\n        epsilon(sep.right, blkStart);\n    }\n    return {\n        left: blkStart,\n        right: end\n    };\n}\nfunction star(atn, rule, star, handle, sep) {\n    const start = handle.left;\n    const end = handle.right;\n    const entry = newState(atn, rule, star, {\n        type: ATN_STAR_LOOP_ENTRY\n    });\n    defineDecisionState(atn, entry);\n    const loopEnd = newState(atn, rule, star, {\n        type: ATN_LOOP_END\n    });\n    const loop = newState(atn, rule, star, {\n        type: ATN_STAR_LOOP_BACK\n    });\n    entry.loopback = loop;\n    loopEnd.loopback = loop;\n    epsilon(entry, start); // loop enter edge (alt 2)\n    epsilon(entry, loopEnd); // bypass loop edge (alt 1)\n    epsilon(end, loop); // block end hits loop back\n    if (sep !== undefined) {\n        epsilon(loop, loopEnd); // end loop\n        // loop back to start of handle using separator\n        epsilon(loop, sep.left);\n        epsilon(sep.right, start);\n    }\n    else {\n        epsilon(loop, entry); // loop back to entry/exit decision\n    }\n    atn.decisionMap[buildATNKey(rule, sep ? 'RepetitionWithSeparator' : 'Repetition', star.idx)] = entry;\n    return {\n        left: entry,\n        right: loopEnd\n    };\n}\nfunction optional(atn, rule, optional, handle) {\n    const start = handle.left;\n    const end = handle.right;\n    epsilon(start, end);\n    atn.decisionMap[buildATNKey(rule, 'Option', optional.idx)] = start;\n    return handle;\n}\nfunction defineDecisionState(atn, state) {\n    atn.decisionStates.push(state);\n    state.decision = atn.decisionStates.length - 1;\n    return state.decision;\n}\nfunction makeAlts(atn, rule, start, production, ...alts) {\n    const end = newState(atn, rule, production, {\n        type: ATN_BLOCK_END,\n        start\n    });\n    start.end = end;\n    for (const alt of alts) {\n        if (alt !== undefined) {\n            // hook alts up to decision block\n            epsilon(start, alt.left);\n            epsilon(alt.right, end);\n        }\n        else {\n            epsilon(start, end);\n        }\n    }\n    const handle = {\n        left: start,\n        right: end\n    };\n    atn.decisionMap[buildATNKey(rule, getProdType(production), production.idx)] = start;\n    return handle;\n}\nfunction getProdType(production) {\n    if (production instanceof Alternation) {\n        return 'Alternation';\n    }\n    else if (production instanceof Option) {\n        return 'Option';\n    }\n    else if (production instanceof Repetition) {\n        return 'Repetition';\n    }\n    else if (production instanceof RepetitionWithSeparator) {\n        return 'RepetitionWithSeparator';\n    }\n    else if (production instanceof RepetitionMandatory) {\n        return 'RepetitionMandatory';\n    }\n    else if (production instanceof RepetitionMandatoryWithSeparator) {\n        return 'RepetitionMandatoryWithSeparator';\n    }\n    else {\n        throw new Error('Invalid production type encountered');\n    }\n}\nfunction makeBlock(atn, alts) {\n    const altsLength = alts.length;\n    for (let i = 0; i < altsLength - 1; i++) {\n        const handle = alts[i];\n        let transition;\n        if (handle.left.transitions.length === 1) {\n            transition = handle.left.transitions[0];\n        }\n        const isRuleTransition = transition instanceof RuleTransition;\n        const ruleTransition = transition;\n        const next = alts[i + 1].left;\n        if (handle.left.type === ATN_BASIC &&\n            handle.right.type === ATN_BASIC &&\n            transition !== undefined &&\n            ((isRuleTransition && ruleTransition.followState === handle.right) ||\n                transition.target === handle.right)) {\n            // we can avoid epsilon edge to next element\n            if (isRuleTransition) {\n                ruleTransition.followState = next;\n            }\n            else {\n                transition.target = next;\n            }\n            removeState(atn, handle.right); // we skipped over this state\n        }\n        else {\n            // need epsilon if previous block's right end node is complex\n            epsilon(handle.right, next);\n        }\n    }\n    const first = alts[0];\n    const last = alts[altsLength - 1];\n    return {\n        left: first.left,\n        right: last.right\n    };\n}\nfunction tokenRef(atn, rule, tokenType, production) {\n    const left = newState(atn, rule, production, {\n        type: ATN_BASIC\n    });\n    const right = newState(atn, rule, production, {\n        type: ATN_BASIC\n    });\n    addTransition(left, new AtomTransition(right, tokenType));\n    return {\n        left,\n        right\n    };\n}\nfunction ruleRef(atn, currentRule, nonTerminal) {\n    const rule = nonTerminal.referencedRule;\n    const start = atn.ruleToStartState.get(rule);\n    const left = newState(atn, currentRule, nonTerminal, {\n        type: ATN_BASIC\n    });\n    const right = newState(atn, currentRule, nonTerminal, {\n        type: ATN_BASIC\n    });\n    const call = new RuleTransition(start, rule, right);\n    addTransition(left, call);\n    return {\n        left,\n        right\n    };\n}\nfunction buildRuleHandle(atn, rule, block) {\n    const start = atn.ruleToStartState.get(rule);\n    epsilon(start, block.left);\n    const stop = atn.ruleToStopState.get(rule);\n    epsilon(block.right, stop);\n    const handle = {\n        left: start,\n        right: stop\n    };\n    return handle;\n}\nfunction epsilon(a, b) {\n    const transition = new EpsilonTransition(b);\n    addTransition(a, transition);\n}\nfunction newState(atn, rule, production, partial) {\n    const t = Object.assign({ atn,\n        production, epsilonOnlyTransitions: false, rule, transitions: [], nextTokenWithinRule: [], stateNumber: atn.states.length }, partial);\n    atn.states.push(t);\n    return t;\n}\nfunction addTransition(state, transition) {\n    // A single ATN state can only contain epsilon transitions or non-epsilon transitions\n    // Because they are never mixed, only setting the property for the first transition is fine\n    if (state.transitions.length === 0) {\n        state.epsilonOnlyTransitions = transition.isEpsilon();\n    }\n    state.transitions.push(transition);\n}\nfunction removeState(atn, state) {\n    atn.states.splice(atn.states.indexOf(state), 1);\n}\n//# sourceMappingURL=atn.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport map from \"lodash-es/map.js\";\nexport const DFA_ERROR = {};\nexport class ATNConfigSet {\n    constructor() {\n        this.map = {};\n        this.configs = [];\n    }\n    get size() {\n        return this.configs.length;\n    }\n    finalize() {\n        // Empties the map to free up memory\n        this.map = {};\n    }\n    add(config) {\n        const key = getATNConfigKey(config);\n        // Only add configs which don't exist in our map already\n        // While this does not influence the actual algorithm, adding them anyway would massively increase memory consumption\n        if (!(key in this.map)) {\n            this.map[key] = this.configs.length;\n            this.configs.push(config);\n        }\n    }\n    get elements() {\n        return this.configs;\n    }\n    get alts() {\n        return map(this.configs, (e) => e.alt);\n    }\n    get key() {\n        let value = \"\";\n        for (const k in this.map) {\n            value += k + \":\";\n        }\n        return value;\n    }\n}\nexport function getATNConfigKey(config, alt = true) {\n    return `${alt ? `a${config.alt}` : \"\"}s${config.state.stateNumber}:${config.stack.map((e) => e.stateNumber.toString()).join(\"_\")}`;\n}\n//# sourceMappingURL=dfa.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { tokenMatcher, tokenLabel, NonTerminal, Alternation, Option, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Repetition, Terminal, LLkLookaheadStrategy, getLookaheadPaths } from \"chevrotain\";\nimport { ATN_RULE_STOP, AtomTransition, buildATNKey, createATN, EpsilonTransition, RuleTransition } from \"./atn.js\";\nimport { ATNConfigSet, DFA_ERROR, getATNConfigKey } from \"./dfa.js\";\nimport min from \"lodash-es/min.js\";\nimport flatMap from \"lodash-es/flatMap.js\";\nimport uniqBy from \"lodash-es/uniqBy.js\";\nimport map from \"lodash-es/map.js\";\nimport flatten from \"lodash-es/flatten.js\";\nimport forEach from \"lodash-es/forEach.js\";\nimport isEmpty from \"lodash-es/isEmpty.js\";\nimport reduce from \"lodash-es/reduce.js\";\nfunction createDFACache(startState, decision) {\n    const map = {};\n    return (predicateSet) => {\n        const key = predicateSet.toString();\n        let existing = map[key];\n        if (existing !== undefined) {\n            return existing;\n        }\n        else {\n            existing = {\n                atnStartState: startState,\n                decision,\n                states: {}\n            };\n            map[key] = existing;\n            return existing;\n        }\n    };\n}\nclass PredicateSet {\n    constructor() {\n        this.predicates = [];\n    }\n    is(index) {\n        return index >= this.predicates.length || this.predicates[index];\n    }\n    set(index, value) {\n        this.predicates[index] = value;\n    }\n    toString() {\n        let value = \"\";\n        const size = this.predicates.length;\n        for (let i = 0; i < size; i++) {\n            value += this.predicates[i] === true ? \"1\" : \"0\";\n        }\n        return value;\n    }\n}\nconst EMPTY_PREDICATES = new PredicateSet();\nexport class LLStarLookaheadStrategy extends LLkLookaheadStrategy {\n    constructor(options) {\n        var _a;\n        super();\n        this.logging = (_a = options === null || options === void 0 ? void 0 : options.logging) !== null && _a !== void 0 ? _a : ((message) => console.log(message));\n    }\n    initialize(options) {\n        this.atn = createATN(options.rules);\n        this.dfas = initATNSimulator(this.atn);\n    }\n    validateAmbiguousAlternationAlternatives() {\n        return [];\n    }\n    validateEmptyOrAlternatives() {\n        return [];\n    }\n    buildLookaheadForAlternation(options) {\n        const { prodOccurrence, rule, hasPredicates, dynamicTokensEnabled } = options;\n        const dfas = this.dfas;\n        const logging = this.logging;\n        const key = buildATNKey(rule, 'Alternation', prodOccurrence);\n        const decisionState = this.atn.decisionMap[key];\n        const decisionIndex = decisionState.decision;\n        const partialAlts = map(getLookaheadPaths({\n            maxLookahead: 1,\n            occurrence: prodOccurrence,\n            prodType: \"Alternation\",\n            rule: rule\n        }), (currAlt) => map(currAlt, (path) => path[0]));\n        if (isLL1Sequence(partialAlts, false) && !dynamicTokensEnabled) {\n            const choiceToAlt = reduce(partialAlts, (result, currAlt, idx) => {\n                forEach(currAlt, (currTokType) => {\n                    if (currTokType) {\n                        result[currTokType.tokenTypeIdx] = idx;\n                        forEach(currTokType.categoryMatches, (currExtendingType) => {\n                            result[currExtendingType] = idx;\n                        });\n                    }\n                });\n                return result;\n            }, {});\n            if (hasPredicates) {\n                return function (orAlts) {\n                    var _a;\n                    const nextToken = this.LA(1);\n                    const prediction = choiceToAlt[nextToken.tokenTypeIdx];\n                    if (orAlts !== undefined && prediction !== undefined) {\n                        const gate = (_a = orAlts[prediction]) === null || _a === void 0 ? void 0 : _a.GATE;\n                        if (gate !== undefined && gate.call(this) === false) {\n                            return undefined;\n                        }\n                    }\n                    return prediction;\n                };\n            }\n            else {\n                return function () {\n                    const nextToken = this.LA(1);\n                    return choiceToAlt[nextToken.tokenTypeIdx];\n                };\n            }\n        }\n        else if (hasPredicates) {\n            return function (orAlts) {\n                const predicates = new PredicateSet();\n                const length = orAlts === undefined ? 0 : orAlts.length;\n                for (let i = 0; i < length; i++) {\n                    const gate = orAlts === null || orAlts === void 0 ? void 0 : orAlts[i].GATE;\n                    predicates.set(i, gate === undefined || gate.call(this));\n                }\n                const result = adaptivePredict.call(this, dfas, decisionIndex, predicates, logging);\n                return typeof result === 'number' ? result : undefined;\n            };\n        }\n        else {\n            return function () {\n                const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging);\n                return typeof result === 'number' ? result : undefined;\n            };\n        }\n    }\n    buildLookaheadForOptional(options) {\n        const { prodOccurrence, rule, prodType, dynamicTokensEnabled } = options;\n        const dfas = this.dfas;\n        const logging = this.logging;\n        const key = buildATNKey(rule, prodType, prodOccurrence);\n        const decisionState = this.atn.decisionMap[key];\n        const decisionIndex = decisionState.decision;\n        const alts = map(getLookaheadPaths({\n            maxLookahead: 1,\n            occurrence: prodOccurrence,\n            prodType,\n            rule\n        }), (e) => {\n            return map(e, (g) => g[0]);\n        });\n        if (isLL1Sequence(alts) && alts[0][0] && !dynamicTokensEnabled) {\n            const alt = alts[0];\n            const singleTokensTypes = flatten(alt);\n            if (singleTokensTypes.length === 1 &&\n                isEmpty(singleTokensTypes[0].categoryMatches)) {\n                const expectedTokenType = singleTokensTypes[0];\n                const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx;\n                return function () {\n                    return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey;\n                };\n            }\n            else {\n                const choiceToAlt = reduce(singleTokensTypes, (result, currTokType) => {\n                    if (currTokType !== undefined) {\n                        result[currTokType.tokenTypeIdx] = true;\n                        forEach(currTokType.categoryMatches, (currExtendingType) => {\n                            result[currExtendingType] = true;\n                        });\n                    }\n                    return result;\n                }, {});\n                return function () {\n                    const nextToken = this.LA(1);\n                    return choiceToAlt[nextToken.tokenTypeIdx] === true;\n                };\n            }\n        }\n        return function () {\n            const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging);\n            return typeof result === \"object\" ? false : result === 0;\n        };\n    }\n}\nfunction isLL1Sequence(sequences, allowEmpty = true) {\n    const fullSet = new Set();\n    for (const alt of sequences) {\n        const altSet = new Set();\n        for (const tokType of alt) {\n            if (tokType === undefined) {\n                if (allowEmpty) {\n                    // Epsilon production encountered\n                    break;\n                }\n                else {\n                    return false;\n                }\n            }\n            const indices = [tokType.tokenTypeIdx].concat(tokType.categoryMatches);\n            for (const index of indices) {\n                if (fullSet.has(index)) {\n                    if (!altSet.has(index)) {\n                        return false;\n                    }\n                }\n                else {\n                    fullSet.add(index);\n                    altSet.add(index);\n                }\n            }\n        }\n    }\n    return true;\n}\nfunction initATNSimulator(atn) {\n    const decisionLength = atn.decisionStates.length;\n    const decisionToDFA = Array(decisionLength);\n    for (let i = 0; i < decisionLength; i++) {\n        decisionToDFA[i] = createDFACache(atn.decisionStates[i], i);\n    }\n    return decisionToDFA;\n}\nfunction adaptivePredict(dfaCaches, decision, predicateSet, logging) {\n    const dfa = dfaCaches[decision](predicateSet);\n    let start = dfa.start;\n    if (start === undefined) {\n        const closure = computeStartState(dfa.atnStartState);\n        start = addDFAState(dfa, newDFAState(closure));\n        dfa.start = start;\n    }\n    const alt = performLookahead.apply(this, [dfa, start, predicateSet, logging]);\n    return alt;\n}\nfunction performLookahead(dfa, s0, predicateSet, logging) {\n    let previousD = s0;\n    let i = 1;\n    const path = [];\n    let t = this.LA(i++);\n    while (true) {\n        let d = getExistingTargetState(previousD, t);\n        if (d === undefined) {\n            d = computeLookaheadTarget.apply(this, [dfa, previousD, t, i, predicateSet, logging]);\n        }\n        if (d === DFA_ERROR) {\n            return buildAdaptivePredictError(path, previousD, t);\n        }\n        if (d.isAcceptState === true) {\n            return d.prediction;\n        }\n        previousD = d;\n        path.push(t);\n        t = this.LA(i++);\n    }\n}\nfunction computeLookaheadTarget(dfa, previousD, token, lookahead, predicateSet, logging) {\n    const reach = computeReachSet(previousD.configs, token, predicateSet);\n    if (reach.size === 0) {\n        addDFAEdge(dfa, previousD, token, DFA_ERROR);\n        return DFA_ERROR;\n    }\n    let newState = newDFAState(reach);\n    const predictedAlt = getUniqueAlt(reach, predicateSet);\n    if (predictedAlt !== undefined) {\n        newState.isAcceptState = true;\n        newState.prediction = predictedAlt;\n        newState.configs.uniqueAlt = predictedAlt;\n    }\n    else if (hasConflictTerminatingPrediction(reach)) {\n        const prediction = min(reach.alts);\n        newState.isAcceptState = true;\n        newState.prediction = prediction;\n        newState.configs.uniqueAlt = prediction;\n        reportLookaheadAmbiguity.apply(this, [dfa, lookahead, reach.alts, logging]);\n    }\n    newState = addDFAEdge(dfa, previousD, token, newState);\n    return newState;\n}\nfunction reportLookaheadAmbiguity(dfa, lookahead, ambiguityIndices, logging) {\n    const prefixPath = [];\n    for (let i = 1; i <= lookahead; i++) {\n        prefixPath.push(this.LA(i).tokenType);\n    }\n    const atnState = dfa.atnStartState;\n    const topLevelRule = atnState.rule;\n    const production = atnState.production;\n    const message = buildAmbiguityError({\n        topLevelRule,\n        ambiguityIndices,\n        production,\n        prefixPath\n    });\n    logging(message);\n}\nfunction buildAmbiguityError(options) {\n    const pathMsg = map(options.prefixPath, (currtok) => tokenLabel(currtok)).join(\", \");\n    const occurrence = options.production.idx === 0 ? \"\" : options.production.idx;\n    let currMessage = `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\", \")}> in <${getProductionDslName(options.production)}${occurrence}>` +\n        ` inside <${options.topLevelRule.name}> Rule,\\n` +\n        `<${pathMsg}> may appears as a prefix path in all these alternatives.\\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}\nfunction getProductionDslName(prod) {\n    if (prod instanceof NonTerminal) {\n        return \"SUBRULE\";\n    }\n    else if (prod instanceof Option) {\n        return \"OPTION\";\n    }\n    else if (prod instanceof Alternation) {\n        return \"OR\";\n    }\n    else if (prod instanceof RepetitionMandatory) {\n        return \"AT_LEAST_ONE\";\n    }\n    else if (prod instanceof RepetitionMandatoryWithSeparator) {\n        return \"AT_LEAST_ONE_SEP\";\n    }\n    else if (prod instanceof RepetitionWithSeparator) {\n        return \"MANY_SEP\";\n    }\n    else if (prod instanceof Repetition) {\n        return \"MANY\";\n    }\n    else if (prod instanceof Terminal) {\n        return \"CONSUME\";\n    }\n    else {\n        throw Error(\"non exhaustive match\");\n    }\n}\nfunction buildAdaptivePredictError(path, previous, current) {\n    const nextTransitions = flatMap(previous.configs.elements, (e) => e.state.transitions);\n    const nextTokenTypes = uniqBy(nextTransitions\n        .filter((e) => e instanceof AtomTransition)\n        .map((e) => e.tokenType), (e) => e.tokenTypeIdx);\n    return {\n        actualToken: current,\n        possibleTokenTypes: nextTokenTypes,\n        tokenPath: path\n    };\n}\nfunction getExistingTargetState(state, token) {\n    return state.edges[token.tokenTypeIdx];\n}\nfunction computeReachSet(configs, token, predicateSet) {\n    const intermediate = new ATNConfigSet();\n    const skippedStopStates = [];\n    for (const c of configs.elements) {\n        if (predicateSet.is(c.alt) === false) {\n            continue;\n        }\n        if (c.state.type === ATN_RULE_STOP) {\n            skippedStopStates.push(c);\n            continue;\n        }\n        const transitionLength = c.state.transitions.length;\n        for (let i = 0; i < transitionLength; i++) {\n            const transition = c.state.transitions[i];\n            const target = getReachableTarget(transition, token);\n            if (target !== undefined) {\n                intermediate.add({\n                    state: target,\n                    alt: c.alt,\n                    stack: c.stack\n                });\n            }\n        }\n    }\n    let reach;\n    if (skippedStopStates.length === 0 && intermediate.size === 1) {\n        reach = intermediate;\n    }\n    if (reach === undefined) {\n        reach = new ATNConfigSet();\n        for (const c of intermediate.elements) {\n            closure(c, reach);\n        }\n    }\n    if (skippedStopStates.length > 0 && !hasConfigInRuleStopState(reach)) {\n        for (const c of skippedStopStates) {\n            reach.add(c);\n        }\n    }\n    return reach;\n}\nfunction getReachableTarget(transition, token) {\n    if (transition instanceof AtomTransition &&\n        tokenMatcher(token, transition.tokenType)) {\n        return transition.target;\n    }\n    return undefined;\n}\nfunction getUniqueAlt(configs, predicateSet) {\n    let alt;\n    for (const c of configs.elements) {\n        if (predicateSet.is(c.alt) === true) {\n            if (alt === undefined) {\n                alt = c.alt;\n            }\n            else if (alt !== c.alt) {\n                return undefined;\n            }\n        }\n    }\n    return alt;\n}\nfunction newDFAState(closure) {\n    return {\n        configs: closure,\n        edges: {},\n        isAcceptState: false,\n        prediction: -1\n    };\n}\nfunction addDFAEdge(dfa, from, token, to) {\n    to = addDFAState(dfa, to);\n    from.edges[token.tokenTypeIdx] = to;\n    return to;\n}\nfunction addDFAState(dfa, state) {\n    if (state === DFA_ERROR) {\n        return state;\n    }\n    // Repetitions have the same config set\n    // Therefore, storing the key of the config in a map allows us to create a loop in our DFA\n    const mapKey = state.configs.key;\n    const existing = dfa.states[mapKey];\n    if (existing !== undefined) {\n        return existing;\n    }\n    state.configs.finalize();\n    dfa.states[mapKey] = state;\n    return state;\n}\nfunction computeStartState(atnState) {\n    const configs = new ATNConfigSet();\n    const numberOfTransitions = atnState.transitions.length;\n    for (let i = 0; i < numberOfTransitions; i++) {\n        const target = atnState.transitions[i].target;\n        const config = {\n            state: target,\n            alt: i,\n            stack: []\n        };\n        closure(config, configs);\n    }\n    return configs;\n}\nfunction closure(config, configs) {\n    const p = config.state;\n    if (p.type === ATN_RULE_STOP) {\n        if (config.stack.length > 0) {\n            const atnStack = [...config.stack];\n            const followState = atnStack.pop();\n            const followConfig = {\n                state: followState,\n                alt: config.alt,\n                stack: atnStack\n            };\n            closure(followConfig, configs);\n        }\n        else {\n            // Dipping into outer context, simply add the config\n            // This will stop computation once every config is at the rule stop state\n            configs.add(config);\n        }\n        return;\n    }\n    if (!p.epsilonOnlyTransitions) {\n        configs.add(config);\n    }\n    const transitionLength = p.transitions.length;\n    for (let i = 0; i < transitionLength; i++) {\n        const transition = p.transitions[i];\n        const c = getEpsilonTarget(config, transition);\n        if (c !== undefined) {\n            closure(c, configs);\n        }\n    }\n}\nfunction getEpsilonTarget(config, transition) {\n    if (transition instanceof EpsilonTransition) {\n        return {\n            state: transition.target,\n            alt: config.alt,\n            stack: config.stack\n        };\n    }\n    else if (transition instanceof RuleTransition) {\n        const stack = [...config.stack, transition.followState];\n        return {\n            state: transition.target,\n            alt: config.alt,\n            stack\n        };\n    }\n    return undefined;\n}\nfunction hasConfigInRuleStopState(configs) {\n    for (const c of configs.elements) {\n        if (c.state.type === ATN_RULE_STOP) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction allConfigsInRuleStopStates(configs) {\n    for (const c of configs.elements) {\n        if (c.state.type !== ATN_RULE_STOP) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction hasConflictTerminatingPrediction(configs) {\n    if (allConfigsInRuleStopStates(configs)) {\n        return true;\n    }\n    const altSets = getConflictingAltSets(configs.elements);\n    const heuristic = hasConflictingAltSet(altSets) && !hasStateAssociatedWithOneAlt(altSets);\n    return heuristic;\n}\nfunction getConflictingAltSets(configs) {\n    const configToAlts = new Map();\n    for (const c of configs) {\n        const key = getATNConfigKey(c, false);\n        let alts = configToAlts.get(key);\n        if (alts === undefined) {\n            alts = {};\n            configToAlts.set(key, alts);\n        }\n        alts[c.alt] = true;\n    }\n    return configToAlts;\n}\nfunction hasConflictingAltSet(altSets) {\n    for (const value of Array.from(altSets.values())) {\n        if (Object.keys(value).length > 1) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction hasStateAssociatedWithOneAlt(altSets) {\n    for (const value of Array.from(altSets.values())) {\n        if (Object.keys(value).length === 1) {\n            return true;\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=all-star-lookahead.js.map","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nexport var DocumentUri;\n(function (DocumentUri) {\n    function is(value) {\n        return typeof value === 'string';\n    }\n    DocumentUri.is = is;\n})(DocumentUri || (DocumentUri = {}));\nexport var URI;\n(function (URI) {\n    function is(value) {\n        return typeof value === 'string';\n    }\n    URI.is = is;\n})(URI || (URI = {}));\nexport var integer;\n(function (integer) {\n    integer.MIN_VALUE = -2147483648;\n    integer.MAX_VALUE = 2147483647;\n    function is(value) {\n        return typeof value === 'number' && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;\n    }\n    integer.is = is;\n})(integer || (integer = {}));\nexport var uinteger;\n(function (uinteger) {\n    uinteger.MIN_VALUE = 0;\n    uinteger.MAX_VALUE = 2147483647;\n    function is(value) {\n        return typeof value === 'number' && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;\n    }\n    uinteger.is = is;\n})(uinteger || (uinteger = {}));\n/**\n * The Position namespace provides helper functions to work with\n * {@link Position} literals.\n */\nexport var Position;\n(function (Position) {\n    /**\n     * Creates a new Position literal from the given line and character.\n     * @param line The position's line.\n     * @param character The position's character.\n     */\n    function create(line, character) {\n        if (line === Number.MAX_VALUE) {\n            line = uinteger.MAX_VALUE;\n        }\n        if (character === Number.MAX_VALUE) {\n            character = uinteger.MAX_VALUE;\n        }\n        return { line, character };\n    }\n    Position.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link Position} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n    }\n    Position.is = is;\n})(Position || (Position = {}));\n/**\n * The Range namespace provides helper functions to work with\n * {@link Range} literals.\n */\nexport var Range;\n(function (Range) {\n    function create(one, two, three, four) {\n        if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n            return { start: Position.create(one, two), end: Position.create(three, four) };\n        }\n        else if (Position.is(one) && Position.is(two)) {\n            return { start: one, end: two };\n        }\n        else {\n            throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n        }\n    }\n    Range.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link Range} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n    }\n    Range.is = is;\n})(Range || (Range = {}));\n/**\n * The Location namespace provides helper functions to work with\n * {@link Location} literals.\n */\nexport var Location;\n(function (Location) {\n    /**\n     * Creates a Location literal.\n     * @param uri The location's uri.\n     * @param range The location's range.\n     */\n    function create(uri, range) {\n        return { uri, range };\n    }\n    Location.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link Location} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n    }\n    Location.is = is;\n})(Location || (Location = {}));\n/**\n * The LocationLink namespace provides helper functions to work with\n * {@link LocationLink} literals.\n */\nexport var LocationLink;\n(function (LocationLink) {\n    /**\n     * Creates a LocationLink literal.\n     * @param targetUri The definition's uri.\n     * @param targetRange The full range of the definition.\n     * @param targetSelectionRange The span of the symbol definition at the target.\n     * @param originSelectionRange The span of the symbol being defined in the originating source file.\n     */\n    function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n        return { targetUri, targetRange, targetSelectionRange, originSelectionRange };\n    }\n    LocationLink.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link LocationLink} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\n            && Range.is(candidate.targetSelectionRange)\n            && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n    }\n    LocationLink.is = is;\n})(LocationLink || (LocationLink = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link Color} literals.\n */\nexport var Color;\n(function (Color) {\n    /**\n     * Creates a new Color literal.\n     */\n    function create(red, green, blue, alpha) {\n        return {\n            red,\n            green,\n            blue,\n            alpha,\n        };\n    }\n    Color.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link Color} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1)\n            && Is.numberRange(candidate.green, 0, 1)\n            && Is.numberRange(candidate.blue, 0, 1)\n            && Is.numberRange(candidate.alpha, 0, 1);\n    }\n    Color.is = is;\n})(Color || (Color = {}));\n/**\n * The ColorInformation namespace provides helper functions to work with\n * {@link ColorInformation} literals.\n */\nexport var ColorInformation;\n(function (ColorInformation) {\n    /**\n     * Creates a new ColorInformation literal.\n     */\n    function create(range, color) {\n        return {\n            range,\n            color,\n        };\n    }\n    ColorInformation.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n    }\n    ColorInformation.is = is;\n})(ColorInformation || (ColorInformation = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link ColorPresentation} literals.\n */\nexport var ColorPresentation;\n(function (ColorPresentation) {\n    /**\n     * Creates a new ColorInformation literal.\n     */\n    function create(label, textEdit, additionalTextEdits) {\n        return {\n            label,\n            textEdit,\n            additionalTextEdits,\n        };\n    }\n    ColorPresentation.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Is.string(candidate.label)\n            && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\n            && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n    }\n    ColorPresentation.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\n/**\n * A set of predefined range kinds.\n */\nexport var FoldingRangeKind;\n(function (FoldingRangeKind) {\n    /**\n     * Folding range for a comment\n     */\n    FoldingRangeKind.Comment = 'comment';\n    /**\n     * Folding range for an import or include\n     */\n    FoldingRangeKind.Imports = 'imports';\n    /**\n     * Folding range for a region (e.g. `#region`)\n     */\n    FoldingRangeKind.Region = 'region';\n})(FoldingRangeKind || (FoldingRangeKind = {}));\n/**\n * The folding range namespace provides helper functions to work with\n * {@link FoldingRange} literals.\n */\nexport var FoldingRange;\n(function (FoldingRange) {\n    /**\n     * Creates a new FoldingRange literal.\n     */\n    function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n        const result = {\n            startLine,\n            endLine\n        };\n        if (Is.defined(startCharacter)) {\n            result.startCharacter = startCharacter;\n        }\n        if (Is.defined(endCharacter)) {\n            result.endCharacter = endCharacter;\n        }\n        if (Is.defined(kind)) {\n            result.kind = kind;\n        }\n        if (Is.defined(collapsedText)) {\n            result.collapsedText = collapsedText;\n        }\n        return result;\n    }\n    FoldingRange.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link FoldingRange} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)\n            && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))\n            && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))\n            && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n    }\n    FoldingRange.is = is;\n})(FoldingRange || (FoldingRange = {}));\n/**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * {@link DiagnosticRelatedInformation} literals.\n */\nexport var DiagnosticRelatedInformation;\n(function (DiagnosticRelatedInformation) {\n    /**\n     * Creates a new DiagnosticRelatedInformation literal.\n     */\n    function create(location, message) {\n        return {\n            location,\n            message\n        };\n    }\n    DiagnosticRelatedInformation.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n    }\n    DiagnosticRelatedInformation.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n/**\n * The diagnostic's severity.\n */\nexport var DiagnosticSeverity;\n(function (DiagnosticSeverity) {\n    /**\n     * Reports an error.\n     */\n    DiagnosticSeverity.Error = 1;\n    /**\n     * Reports a warning.\n     */\n    DiagnosticSeverity.Warning = 2;\n    /**\n     * Reports an information.\n     */\n    DiagnosticSeverity.Information = 3;\n    /**\n     * Reports a hint.\n     */\n    DiagnosticSeverity.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\n/**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\nexport var DiagnosticTag;\n(function (DiagnosticTag) {\n    /**\n     * Unused or unnecessary code.\n     *\n     * Clients are allowed to render diagnostics with this tag faded out instead of having\n     * an error squiggle.\n     */\n    DiagnosticTag.Unnecessary = 1;\n    /**\n     * Deprecated or obsolete code.\n     *\n     * Clients are allowed to rendered diagnostics with this tag strike through.\n     */\n    DiagnosticTag.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\n/**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\nexport var CodeDescription;\n(function (CodeDescription) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Is.string(candidate.href);\n    }\n    CodeDescription.is = is;\n})(CodeDescription || (CodeDescription = {}));\n/**\n * The Diagnostic namespace provides helper functions to work with\n * {@link Diagnostic} literals.\n */\nexport var Diagnostic;\n(function (Diagnostic) {\n    /**\n     * Creates a new Diagnostic literal.\n     */\n    function create(range, message, severity, code, source, relatedInformation) {\n        let result = { range, message };\n        if (Is.defined(severity)) {\n            result.severity = severity;\n        }\n        if (Is.defined(code)) {\n            result.code = code;\n        }\n        if (Is.defined(source)) {\n            result.source = source;\n        }\n        if (Is.defined(relatedInformation)) {\n            result.relatedInformation = relatedInformation;\n        }\n        return result;\n    }\n    Diagnostic.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link Diagnostic} interface.\n     */\n    function is(value) {\n        var _a;\n        let candidate = value;\n        return Is.defined(candidate)\n            && Range.is(candidate.range)\n            && Is.string(candidate.message)\n            && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\n            && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\n            && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))\n            && (Is.string(candidate.source) || Is.undefined(candidate.source))\n            && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n    }\n    Diagnostic.is = is;\n})(Diagnostic || (Diagnostic = {}));\n/**\n * The Command namespace provides helper functions to work with\n * {@link Command} literals.\n */\nexport var Command;\n(function (Command) {\n    /**\n     * Creates a new Command literal.\n     */\n    function create(title, command, ...args) {\n        let result = { title, command };\n        if (Is.defined(args) && args.length > 0) {\n            result.arguments = args;\n        }\n        return result;\n    }\n    Command.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link Command} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n    }\n    Command.is = is;\n})(Command || (Command = {}));\n/**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\nexport var TextEdit;\n(function (TextEdit) {\n    /**\n     * Creates a replace text edit.\n     * @param range The range of text to be replaced.\n     * @param newText The new text.\n     */\n    function replace(range, newText) {\n        return { range, newText };\n    }\n    TextEdit.replace = replace;\n    /**\n     * Creates an insert text edit.\n     * @param position The position to insert the text at.\n     * @param newText The text to be inserted.\n     */\n    function insert(position, newText) {\n        return { range: { start: position, end: position }, newText };\n    }\n    TextEdit.insert = insert;\n    /**\n     * Creates a delete text edit.\n     * @param range The range of text to be deleted.\n     */\n    function del(range) {\n        return { range, newText: '' };\n    }\n    TextEdit.del = del;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate)\n            && Is.string(candidate.newText)\n            && Range.is(candidate.range);\n    }\n    TextEdit.is = is;\n})(TextEdit || (TextEdit = {}));\nexport var ChangeAnnotation;\n(function (ChangeAnnotation) {\n    function create(label, needsConfirmation, description) {\n        const result = { label };\n        if (needsConfirmation !== undefined) {\n            result.needsConfirmation = needsConfirmation;\n        }\n        if (description !== undefined) {\n            result.description = description;\n        }\n        return result;\n    }\n    ChangeAnnotation.create = create;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Is.string(candidate.label) &&\n            (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&\n            (Is.string(candidate.description) || candidate.description === undefined);\n    }\n    ChangeAnnotation.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nexport var ChangeAnnotationIdentifier;\n(function (ChangeAnnotationIdentifier) {\n    function is(value) {\n        const candidate = value;\n        return Is.string(candidate);\n    }\n    ChangeAnnotationIdentifier.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nexport var AnnotatedTextEdit;\n(function (AnnotatedTextEdit) {\n    /**\n     * Creates an annotated replace text edit.\n     *\n     * @param range The range of text to be replaced.\n     * @param newText The new text.\n     * @param annotation The annotation.\n     */\n    function replace(range, newText, annotation) {\n        return { range, newText, annotationId: annotation };\n    }\n    AnnotatedTextEdit.replace = replace;\n    /**\n     * Creates an annotated insert text edit.\n     *\n     * @param position The position to insert the text at.\n     * @param newText The text to be inserted.\n     * @param annotation The annotation.\n     */\n    function insert(position, newText, annotation) {\n        return { range: { start: position, end: position }, newText, annotationId: annotation };\n    }\n    AnnotatedTextEdit.insert = insert;\n    /**\n     * Creates an annotated delete text edit.\n     *\n     * @param range The range of text to be deleted.\n     * @param annotation The annotation.\n     */\n    function del(range, annotation) {\n        return { range, newText: '', annotationId: annotation };\n    }\n    AnnotatedTextEdit.del = del;\n    function is(value) {\n        const candidate = value;\n        return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n    }\n    AnnotatedTextEdit.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n/**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\nexport var TextDocumentEdit;\n(function (TextDocumentEdit) {\n    /**\n     * Creates a new `TextDocumentEdit`\n     */\n    function create(textDocument, edits) {\n        return { textDocument, edits };\n    }\n    TextDocumentEdit.create = create;\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate)\n            && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n            && Array.isArray(candidate.edits);\n    }\n    TextDocumentEdit.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nexport var CreateFile;\n(function (CreateFile) {\n    function create(uri, options, annotation) {\n        let result = {\n            kind: 'create',\n            uri\n        };\n        if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n            result.options = options;\n        }\n        if (annotation !== undefined) {\n            result.annotationId = annotation;\n        }\n        return result;\n    }\n    CreateFile.create = create;\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||\n            ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n    }\n    CreateFile.is = is;\n})(CreateFile || (CreateFile = {}));\nexport var RenameFile;\n(function (RenameFile) {\n    function create(oldUri, newUri, options, annotation) {\n        let result = {\n            kind: 'rename',\n            oldUri,\n            newUri\n        };\n        if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n            result.options = options;\n        }\n        if (annotation !== undefined) {\n            result.annotationId = annotation;\n        }\n        return result;\n    }\n    RenameFile.create = create;\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||\n            ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n    }\n    RenameFile.is = is;\n})(RenameFile || (RenameFile = {}));\nexport var DeleteFile;\n(function (DeleteFile) {\n    function create(uri, options, annotation) {\n        let result = {\n            kind: 'delete',\n            uri\n        };\n        if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {\n            result.options = options;\n        }\n        if (annotation !== undefined) {\n            result.annotationId = annotation;\n        }\n        return result;\n    }\n    DeleteFile.create = create;\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||\n            ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n    }\n    DeleteFile.is = is;\n})(DeleteFile || (DeleteFile = {}));\nexport var WorkspaceEdit;\n(function (WorkspaceEdit) {\n    function is(value) {\n        let candidate = value;\n        return candidate &&\n            (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n            (candidate.documentChanges === undefined || candidate.documentChanges.every((change) => {\n                if (Is.string(change.kind)) {\n                    return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n                }\n                else {\n                    return TextDocumentEdit.is(change);\n                }\n            }));\n    }\n    WorkspaceEdit.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nclass TextEditChangeImpl {\n    constructor(edits, changeAnnotations) {\n        this.edits = edits;\n        this.changeAnnotations = changeAnnotations;\n    }\n    insert(position, newText, annotation) {\n        let edit;\n        let id;\n        if (annotation === undefined) {\n            edit = TextEdit.insert(position, newText);\n        }\n        else if (ChangeAnnotationIdentifier.is(annotation)) {\n            id = annotation;\n            edit = AnnotatedTextEdit.insert(position, newText, annotation);\n        }\n        else {\n            this.assertChangeAnnotations(this.changeAnnotations);\n            id = this.changeAnnotations.manage(annotation);\n            edit = AnnotatedTextEdit.insert(position, newText, id);\n        }\n        this.edits.push(edit);\n        if (id !== undefined) {\n            return id;\n        }\n    }\n    replace(range, newText, annotation) {\n        let edit;\n        let id;\n        if (annotation === undefined) {\n            edit = TextEdit.replace(range, newText);\n        }\n        else if (ChangeAnnotationIdentifier.is(annotation)) {\n            id = annotation;\n            edit = AnnotatedTextEdit.replace(range, newText, annotation);\n        }\n        else {\n            this.assertChangeAnnotations(this.changeAnnotations);\n            id = this.changeAnnotations.manage(annotation);\n            edit = AnnotatedTextEdit.replace(range, newText, id);\n        }\n        this.edits.push(edit);\n        if (id !== undefined) {\n            return id;\n        }\n    }\n    delete(range, annotation) {\n        let edit;\n        let id;\n        if (annotation === undefined) {\n            edit = TextEdit.del(range);\n        }\n        else if (ChangeAnnotationIdentifier.is(annotation)) {\n            id = annotation;\n            edit = AnnotatedTextEdit.del(range, annotation);\n        }\n        else {\n            this.assertChangeAnnotations(this.changeAnnotations);\n            id = this.changeAnnotations.manage(annotation);\n            edit = AnnotatedTextEdit.del(range, id);\n        }\n        this.edits.push(edit);\n        if (id !== undefined) {\n            return id;\n        }\n    }\n    add(edit) {\n        this.edits.push(edit);\n    }\n    all() {\n        return this.edits;\n    }\n    clear() {\n        this.edits.splice(0, this.edits.length);\n    }\n    assertChangeAnnotations(value) {\n        if (value === undefined) {\n            throw new Error(`Text edit change is not configured to manage change annotations.`);\n        }\n    }\n}\n/**\n * A helper class\n */\nclass ChangeAnnotations {\n    constructor(annotations) {\n        this._annotations = annotations === undefined ? Object.create(null) : annotations;\n        this._counter = 0;\n        this._size = 0;\n    }\n    all() {\n        return this._annotations;\n    }\n    get size() {\n        return this._size;\n    }\n    manage(idOrAnnotation, annotation) {\n        let id;\n        if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {\n            id = idOrAnnotation;\n        }\n        else {\n            id = this.nextId();\n            annotation = idOrAnnotation;\n        }\n        if (this._annotations[id] !== undefined) {\n            throw new Error(`Id ${id} is already in use.`);\n        }\n        if (annotation === undefined) {\n            throw new Error(`No annotation provided for id ${id}`);\n        }\n        this._annotations[id] = annotation;\n        this._size++;\n        return id;\n    }\n    nextId() {\n        this._counter++;\n        return this._counter.toString();\n    }\n}\n/**\n * A workspace change helps constructing changes to a workspace.\n */\nexport class WorkspaceChange {\n    constructor(workspaceEdit) {\n        this._textEditChanges = Object.create(null);\n        if (workspaceEdit !== undefined) {\n            this._workspaceEdit = workspaceEdit;\n            if (workspaceEdit.documentChanges) {\n                this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);\n                workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n                workspaceEdit.documentChanges.forEach((change) => {\n                    if (TextDocumentEdit.is(change)) {\n                        const textEditChange = new TextEditChangeImpl(change.edits, this._changeAnnotations);\n                        this._textEditChanges[change.textDocument.uri] = textEditChange;\n                    }\n                });\n            }\n            else if (workspaceEdit.changes) {\n                Object.keys(workspaceEdit.changes).forEach((key) => {\n                    const textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n                    this._textEditChanges[key] = textEditChange;\n                });\n            }\n        }\n        else {\n            this._workspaceEdit = {};\n        }\n    }\n    /**\n     * Returns the underlying {@link WorkspaceEdit} literal\n     * use to be returned from a workspace edit operation like rename.\n     */\n    get edit() {\n        this.initDocumentChanges();\n        if (this._changeAnnotations !== undefined) {\n            if (this._changeAnnotations.size === 0) {\n                this._workspaceEdit.changeAnnotations = undefined;\n            }\n            else {\n                this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n            }\n        }\n        return this._workspaceEdit;\n    }\n    getTextEditChange(key) {\n        if (OptionalVersionedTextDocumentIdentifier.is(key)) {\n            this.initDocumentChanges();\n            if (this._workspaceEdit.documentChanges === undefined) {\n                throw new Error('Workspace edit is not configured for document changes.');\n            }\n            const textDocument = { uri: key.uri, version: key.version };\n            let result = this._textEditChanges[textDocument.uri];\n            if (!result) {\n                const edits = [];\n                const textDocumentEdit = {\n                    textDocument,\n                    edits\n                };\n                this._workspaceEdit.documentChanges.push(textDocumentEdit);\n                result = new TextEditChangeImpl(edits, this._changeAnnotations);\n                this._textEditChanges[textDocument.uri] = result;\n            }\n            return result;\n        }\n        else {\n            this.initChanges();\n            if (this._workspaceEdit.changes === undefined) {\n                throw new Error('Workspace edit is not configured for normal text edit changes.');\n            }\n            let result = this._textEditChanges[key];\n            if (!result) {\n                let edits = [];\n                this._workspaceEdit.changes[key] = edits;\n                result = new TextEditChangeImpl(edits);\n                this._textEditChanges[key] = result;\n            }\n            return result;\n        }\n    }\n    initDocumentChanges() {\n        if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n            this._changeAnnotations = new ChangeAnnotations();\n            this._workspaceEdit.documentChanges = [];\n            this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n        }\n    }\n    initChanges() {\n        if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n            this._workspaceEdit.changes = Object.create(null);\n        }\n    }\n    createFile(uri, optionsOrAnnotation, options) {\n        this.initDocumentChanges();\n        if (this._workspaceEdit.documentChanges === undefined) {\n            throw new Error('Workspace edit is not configured for document changes.');\n        }\n        let annotation;\n        if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n            annotation = optionsOrAnnotation;\n        }\n        else {\n            options = optionsOrAnnotation;\n        }\n        let operation;\n        let id;\n        if (annotation === undefined) {\n            operation = CreateFile.create(uri, options);\n        }\n        else {\n            id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n            operation = CreateFile.create(uri, options, id);\n        }\n        this._workspaceEdit.documentChanges.push(operation);\n        if (id !== undefined) {\n            return id;\n        }\n    }\n    renameFile(oldUri, newUri, optionsOrAnnotation, options) {\n        this.initDocumentChanges();\n        if (this._workspaceEdit.documentChanges === undefined) {\n            throw new Error('Workspace edit is not configured for document changes.');\n        }\n        let annotation;\n        if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n            annotation = optionsOrAnnotation;\n        }\n        else {\n            options = optionsOrAnnotation;\n        }\n        let operation;\n        let id;\n        if (annotation === undefined) {\n            operation = RenameFile.create(oldUri, newUri, options);\n        }\n        else {\n            id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n            operation = RenameFile.create(oldUri, newUri, options, id);\n        }\n        this._workspaceEdit.documentChanges.push(operation);\n        if (id !== undefined) {\n            return id;\n        }\n    }\n    deleteFile(uri, optionsOrAnnotation, options) {\n        this.initDocumentChanges();\n        if (this._workspaceEdit.documentChanges === undefined) {\n            throw new Error('Workspace edit is not configured for document changes.');\n        }\n        let annotation;\n        if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n            annotation = optionsOrAnnotation;\n        }\n        else {\n            options = optionsOrAnnotation;\n        }\n        let operation;\n        let id;\n        if (annotation === undefined) {\n            operation = DeleteFile.create(uri, options);\n        }\n        else {\n            id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n            operation = DeleteFile.create(uri, options, id);\n        }\n        this._workspaceEdit.documentChanges.push(operation);\n        if (id !== undefined) {\n            return id;\n        }\n    }\n}\n/**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * {@link TextDocumentIdentifier} literals.\n */\nexport var TextDocumentIdentifier;\n(function (TextDocumentIdentifier) {\n    /**\n     * Creates a new TextDocumentIdentifier literal.\n     * @param uri The document's uri.\n     */\n    function create(uri) {\n        return { uri };\n    }\n    TextDocumentIdentifier.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.string(candidate.uri);\n    }\n    TextDocumentIdentifier.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n/**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link VersionedTextDocumentIdentifier} literals.\n */\nexport var VersionedTextDocumentIdentifier;\n(function (VersionedTextDocumentIdentifier) {\n    /**\n     * Creates a new VersionedTextDocumentIdentifier literal.\n     * @param uri The document's uri.\n     * @param version The document's version.\n     */\n    function create(uri, version) {\n        return { uri, version };\n    }\n    VersionedTextDocumentIdentifier.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n    }\n    VersionedTextDocumentIdentifier.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n/**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link OptionalVersionedTextDocumentIdentifier} literals.\n */\nexport var OptionalVersionedTextDocumentIdentifier;\n(function (OptionalVersionedTextDocumentIdentifier) {\n    /**\n     * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n     * @param uri The document's uri.\n     * @param version The document's version.\n     */\n    function create(uri, version) {\n        return { uri, version };\n    }\n    OptionalVersionedTextDocumentIdentifier.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n    }\n    OptionalVersionedTextDocumentIdentifier.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n/**\n * The TextDocumentItem namespace provides helper functions to work with\n * {@link TextDocumentItem} literals.\n */\nexport var TextDocumentItem;\n(function (TextDocumentItem) {\n    /**\n     * Creates a new TextDocumentItem literal.\n     * @param uri The document's uri.\n     * @param languageId The document's language identifier.\n     * @param version The document's version number.\n     * @param text The document's text.\n     */\n    function create(uri, languageId, version, text) {\n        return { uri, languageId, version, text };\n    }\n    TextDocumentItem.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link TextDocumentItem} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n    }\n    TextDocumentItem.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\n/**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\nexport var MarkupKind;\n(function (MarkupKind) {\n    /**\n     * Plain text is supported as a content format\n     */\n    MarkupKind.PlainText = 'plaintext';\n    /**\n     * Markdown is supported as a content format\n     */\n    MarkupKind.Markdown = 'markdown';\n    /**\n     * Checks whether the given value is a value of the {@link MarkupKind} type.\n     */\n    function is(value) {\n        const candidate = value;\n        return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n    }\n    MarkupKind.is = is;\n})(MarkupKind || (MarkupKind = {}));\nexport var MarkupContent;\n(function (MarkupContent) {\n    /**\n     * Checks whether the given value conforms to the {@link MarkupContent} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n    }\n    MarkupContent.is = is;\n})(MarkupContent || (MarkupContent = {}));\n/**\n * The kind of a completion entry.\n */\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n    CompletionItemKind.Text = 1;\n    CompletionItemKind.Method = 2;\n    CompletionItemKind.Function = 3;\n    CompletionItemKind.Constructor = 4;\n    CompletionItemKind.Field = 5;\n    CompletionItemKind.Variable = 6;\n    CompletionItemKind.Class = 7;\n    CompletionItemKind.Interface = 8;\n    CompletionItemKind.Module = 9;\n    CompletionItemKind.Property = 10;\n    CompletionItemKind.Unit = 11;\n    CompletionItemKind.Value = 12;\n    CompletionItemKind.Enum = 13;\n    CompletionItemKind.Keyword = 14;\n    CompletionItemKind.Snippet = 15;\n    CompletionItemKind.Color = 16;\n    CompletionItemKind.File = 17;\n    CompletionItemKind.Reference = 18;\n    CompletionItemKind.Folder = 19;\n    CompletionItemKind.EnumMember = 20;\n    CompletionItemKind.Constant = 21;\n    CompletionItemKind.Struct = 22;\n    CompletionItemKind.Event = 23;\n    CompletionItemKind.Operator = 24;\n    CompletionItemKind.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\n/**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\nexport var InsertTextFormat;\n(function (InsertTextFormat) {\n    /**\n     * The primary text to be inserted is treated as a plain string.\n     */\n    InsertTextFormat.PlainText = 1;\n    /**\n     * The primary text to be inserted is treated as a snippet.\n     *\n     * A snippet can define tab stops and placeholders with `$1`, `$2`\n     * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n     * the end of the snippet. Placeholders with equal identifiers are linked,\n     * that is typing in one will update others too.\n     *\n     * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n     */\n    InsertTextFormat.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\n/**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n    /**\n     * Render a completion as obsolete, usually using a strike-out.\n     */\n    CompletionItemTag.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\nexport var InsertReplaceEdit;\n(function (InsertReplaceEdit) {\n    /**\n     * Creates a new insert / replace edit\n     */\n    function create(newText, insert, replace) {\n        return { newText, insert, replace };\n    }\n    InsertReplaceEdit.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n    }\n    InsertReplaceEdit.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\n/**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\nexport var InsertTextMode;\n(function (InsertTextMode) {\n    /**\n     * The insertion or replace strings is taken as it is. If the\n     * value is multi line the lines below the cursor will be\n     * inserted using the indentation defined in the string value.\n     * The client will not apply any kind of adjustments to the\n     * string.\n     */\n    InsertTextMode.asIs = 1;\n    /**\n     * The editor adjusts leading whitespace of new lines so that\n     * they match the indentation up to the cursor of the line for\n     * which the item is accepted.\n     *\n     * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a\n     * multi line completion item is indented using 2 tabs and all\n     * following lines inserted will be indented using 2 tabs as well.\n     */\n    InsertTextMode.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nexport var CompletionItemLabelDetails;\n(function (CompletionItemLabelDetails) {\n    function is(value) {\n        const candidate = value;\n        return candidate && (Is.string(candidate.detail) || candidate.detail === undefined) &&\n            (Is.string(candidate.description) || candidate.description === undefined);\n    }\n    CompletionItemLabelDetails.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\n/**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\nexport var CompletionItem;\n(function (CompletionItem) {\n    /**\n     * Create a completion item and seed it with a label.\n     * @param label The completion item's label\n     */\n    function create(label) {\n        return { label };\n    }\n    CompletionItem.create = create;\n})(CompletionItem || (CompletionItem = {}));\n/**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\nexport var CompletionList;\n(function (CompletionList) {\n    /**\n     * Creates a new completion list.\n     *\n     * @param items The completion items.\n     * @param isIncomplete The list is not complete.\n     */\n    function create(items, isIncomplete) {\n        return { items: items ? items : [], isIncomplete: !!isIncomplete };\n    }\n    CompletionList.create = create;\n})(CompletionList || (CompletionList = {}));\nexport var MarkedString;\n(function (MarkedString) {\n    /**\n     * Creates a marked string from plain text.\n     *\n     * @param plainText The plain text.\n     */\n    function fromPlainText(plainText) {\n        return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n    }\n    MarkedString.fromPlainText = fromPlainText;\n    /**\n     * Checks whether the given value conforms to the {@link MarkedString} type.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\n    }\n    MarkedString.is = is;\n})(MarkedString || (MarkedString = {}));\nexport var Hover;\n(function (Hover) {\n    /**\n     * Checks whether the given value conforms to the {@link Hover} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\n            MarkedString.is(candidate.contents) ||\n            Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));\n    }\n    Hover.is = is;\n})(Hover || (Hover = {}));\n/**\n * The ParameterInformation namespace provides helper functions to work with\n * {@link ParameterInformation} literals.\n */\nexport var ParameterInformation;\n(function (ParameterInformation) {\n    /**\n     * Creates a new parameter information literal.\n     *\n     * @param label A label string.\n     * @param documentation A doc string.\n     */\n    function create(label, documentation) {\n        return documentation ? { label, documentation } : { label };\n    }\n    ParameterInformation.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\n/**\n * The SignatureInformation namespace provides helper functions to work with\n * {@link SignatureInformation} literals.\n */\nexport var SignatureInformation;\n(function (SignatureInformation) {\n    function create(label, documentation, ...parameters) {\n        let result = { label };\n        if (Is.defined(documentation)) {\n            result.documentation = documentation;\n        }\n        if (Is.defined(parameters)) {\n            result.parameters = parameters;\n        }\n        else {\n            result.parameters = [];\n        }\n        return result;\n    }\n    SignatureInformation.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n    /**\n     * A textual occurrence.\n     */\n    DocumentHighlightKind.Text = 1;\n    /**\n     * Read-access of a symbol, like reading a variable.\n     */\n    DocumentHighlightKind.Read = 2;\n    /**\n     * Write-access of a symbol, like writing to a variable.\n     */\n    DocumentHighlightKind.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * DocumentHighlight namespace to provide helper functions to work with\n * {@link DocumentHighlight} literals.\n */\nexport var DocumentHighlight;\n(function (DocumentHighlight) {\n    /**\n     * Create a DocumentHighlight object.\n     * @param range The range the highlight applies to.\n     * @param kind The highlight kind\n     */\n    function create(range, kind) {\n        let result = { range };\n        if (Is.number(kind)) {\n            result.kind = kind;\n        }\n        return result;\n    }\n    DocumentHighlight.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n    SymbolKind.File = 1;\n    SymbolKind.Module = 2;\n    SymbolKind.Namespace = 3;\n    SymbolKind.Package = 4;\n    SymbolKind.Class = 5;\n    SymbolKind.Method = 6;\n    SymbolKind.Property = 7;\n    SymbolKind.Field = 8;\n    SymbolKind.Constructor = 9;\n    SymbolKind.Enum = 10;\n    SymbolKind.Interface = 11;\n    SymbolKind.Function = 12;\n    SymbolKind.Variable = 13;\n    SymbolKind.Constant = 14;\n    SymbolKind.String = 15;\n    SymbolKind.Number = 16;\n    SymbolKind.Boolean = 17;\n    SymbolKind.Array = 18;\n    SymbolKind.Object = 19;\n    SymbolKind.Key = 20;\n    SymbolKind.Null = 21;\n    SymbolKind.EnumMember = 22;\n    SymbolKind.Struct = 23;\n    SymbolKind.Event = 24;\n    SymbolKind.Operator = 25;\n    SymbolKind.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\n/**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n *\n * @since 3.16\n */\nexport var SymbolTag;\n(function (SymbolTag) {\n    /**\n     * Render a symbol as obsolete, usually using a strike-out.\n     */\n    SymbolTag.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nexport var SymbolInformation;\n(function (SymbolInformation) {\n    /**\n     * Creates a new symbol information literal.\n     *\n     * @param name The name of the symbol.\n     * @param kind The kind of the symbol.\n     * @param range The range of the location of the symbol.\n     * @param uri The resource of the location of symbol.\n     * @param containerName The name of the symbol containing the symbol.\n     */\n    function create(name, kind, range, uri, containerName) {\n        let result = {\n            name,\n            kind,\n            location: { uri, range }\n        };\n        if (containerName) {\n            result.containerName = containerName;\n        }\n        return result;\n    }\n    SymbolInformation.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nexport var WorkspaceSymbol;\n(function (WorkspaceSymbol) {\n    /**\n     * Create a new workspace symbol.\n     *\n     * @param name The name of the symbol.\n     * @param kind The kind of the symbol.\n     * @param uri The resource of the location of the symbol.\n     * @param range An options range of the location.\n     * @returns A WorkspaceSymbol.\n     */\n    function create(name, kind, uri, range) {\n        return range !== undefined\n            ? { name, kind, location: { uri, range } }\n            : { name, kind, location: { uri } };\n    }\n    WorkspaceSymbol.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nexport var DocumentSymbol;\n(function (DocumentSymbol) {\n    /**\n     * Creates a new symbol information literal.\n     *\n     * @param name The name of the symbol.\n     * @param detail The detail of the symbol.\n     * @param kind The kind of the symbol.\n     * @param range The range of the symbol.\n     * @param selectionRange The selectionRange of the symbol.\n     * @param children Children of the symbol.\n     */\n    function create(name, detail, kind, range, selectionRange, children) {\n        let result = {\n            name,\n            detail,\n            kind,\n            range,\n            selectionRange\n        };\n        if (children !== undefined) {\n            result.children = children;\n        }\n        return result;\n    }\n    DocumentSymbol.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link DocumentSymbol} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return candidate &&\n            Is.string(candidate.name) && Is.number(candidate.kind) &&\n            Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\n            (candidate.detail === undefined || Is.string(candidate.detail)) &&\n            (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&\n            (candidate.children === undefined || Array.isArray(candidate.children)) &&\n            (candidate.tags === undefined || Array.isArray(candidate.tags));\n    }\n    DocumentSymbol.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\n/**\n * A set of predefined code action kinds\n */\nexport var CodeActionKind;\n(function (CodeActionKind) {\n    /**\n     * Empty kind.\n     */\n    CodeActionKind.Empty = '';\n    /**\n     * Base kind for quickfix actions: 'quickfix'\n     */\n    CodeActionKind.QuickFix = 'quickfix';\n    /**\n     * Base kind for refactoring actions: 'refactor'\n     */\n    CodeActionKind.Refactor = 'refactor';\n    /**\n     * Base kind for refactoring extraction actions: 'refactor.extract'\n     *\n     * Example extract actions:\n     *\n     * - Extract method\n     * - Extract function\n     * - Extract variable\n     * - Extract interface from class\n     * - ...\n     */\n    CodeActionKind.RefactorExtract = 'refactor.extract';\n    /**\n     * Base kind for refactoring inline actions: 'refactor.inline'\n     *\n     * Example inline actions:\n     *\n     * - Inline function\n     * - Inline variable\n     * - Inline constant\n     * - ...\n     */\n    CodeActionKind.RefactorInline = 'refactor.inline';\n    /**\n     * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n     *\n     * Example rewrite actions:\n     *\n     * - Convert JavaScript function to class\n     * - Add or remove parameter\n     * - Encapsulate field\n     * - Make method static\n     * - Move method to base class\n     * - ...\n     */\n    CodeActionKind.RefactorRewrite = 'refactor.rewrite';\n    /**\n     * Base kind for source actions: `source`\n     *\n     * Source code actions apply to the entire file.\n     */\n    CodeActionKind.Source = 'source';\n    /**\n     * Base kind for an organize imports source action: `source.organizeImports`\n     */\n    CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\n    /**\n     * Base kind for auto-fix source actions: `source.fixAll`.\n     *\n     * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n     * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n     *\n     * @since 3.15.0\n     */\n    CodeActionKind.SourceFixAll = 'source.fixAll';\n})(CodeActionKind || (CodeActionKind = {}));\n/**\n * The reason why code actions were requested.\n *\n * @since 3.17.0\n */\nexport var CodeActionTriggerKind;\n(function (CodeActionTriggerKind) {\n    /**\n     * Code actions were explicitly requested by the user or by an extension.\n     */\n    CodeActionTriggerKind.Invoked = 1;\n    /**\n     * Code actions were requested automatically.\n     *\n     * This typically happens when current selection in a file changes, but can\n     * also be triggered when file content changes.\n     */\n    CodeActionTriggerKind.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\n/**\n * The CodeActionContext namespace provides helper functions to work with\n * {@link CodeActionContext} literals.\n */\nexport var CodeActionContext;\n(function (CodeActionContext) {\n    /**\n     * Creates a new CodeActionContext literal.\n     */\n    function create(diagnostics, only, triggerKind) {\n        let result = { diagnostics };\n        if (only !== undefined && only !== null) {\n            result.only = only;\n        }\n        if (triggerKind !== undefined && triggerKind !== null) {\n            result.triggerKind = triggerKind;\n        }\n        return result;\n    }\n    CodeActionContext.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link CodeActionContext} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is)\n            && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string))\n            && (candidate.triggerKind === undefined || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n    }\n    CodeActionContext.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nexport var CodeAction;\n(function (CodeAction) {\n    function create(title, kindOrCommandOrEdit, kind) {\n        let result = { title };\n        let checkKind = true;\n        if (typeof kindOrCommandOrEdit === 'string') {\n            checkKind = false;\n            result.kind = kindOrCommandOrEdit;\n        }\n        else if (Command.is(kindOrCommandOrEdit)) {\n            result.command = kindOrCommandOrEdit;\n        }\n        else {\n            result.edit = kindOrCommandOrEdit;\n        }\n        if (checkKind && kind !== undefined) {\n            result.kind = kind;\n        }\n        return result;\n    }\n    CodeAction.create = create;\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.string(candidate.title) &&\n            (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\n            (candidate.kind === undefined || Is.string(candidate.kind)) &&\n            (candidate.edit !== undefined || candidate.command !== undefined) &&\n            (candidate.command === undefined || Command.is(candidate.command)) &&\n            (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&\n            (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));\n    }\n    CodeAction.is = is;\n})(CodeAction || (CodeAction = {}));\n/**\n * The CodeLens namespace provides helper functions to work with\n * {@link CodeLens} literals.\n */\nexport var CodeLens;\n(function (CodeLens) {\n    /**\n     * Creates a new CodeLens literal.\n     */\n    function create(range, data) {\n        let result = { range };\n        if (Is.defined(data)) {\n            result.data = data;\n        }\n        return result;\n    }\n    CodeLens.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link CodeLens} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n    }\n    CodeLens.is = is;\n})(CodeLens || (CodeLens = {}));\n/**\n * The FormattingOptions namespace provides helper functions to work with\n * {@link FormattingOptions} literals.\n */\nexport var FormattingOptions;\n(function (FormattingOptions) {\n    /**\n     * Creates a new FormattingOptions literal.\n     */\n    function create(tabSize, insertSpaces) {\n        return { tabSize, insertSpaces };\n    }\n    FormattingOptions.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link FormattingOptions} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n    }\n    FormattingOptions.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\n/**\n * The DocumentLink namespace provides helper functions to work with\n * {@link DocumentLink} literals.\n */\nexport var DocumentLink;\n(function (DocumentLink) {\n    /**\n     * Creates a new DocumentLink literal.\n     */\n    function create(range, target, data) {\n        return { range, target, data };\n    }\n    DocumentLink.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link DocumentLink} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n    }\n    DocumentLink.is = is;\n})(DocumentLink || (DocumentLink = {}));\n/**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\nexport var SelectionRange;\n(function (SelectionRange) {\n    /**\n     * Creates a new SelectionRange\n     * @param range the range.\n     * @param parent an optional parent.\n     */\n    function create(range, parent) {\n        return { range, parent };\n    }\n    SelectionRange.create = create;\n    function is(value) {\n        let candidate = value;\n        return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\n    }\n    SelectionRange.is = is;\n})(SelectionRange || (SelectionRange = {}));\n/**\n * A set of predefined token types. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenTypes;\n(function (SemanticTokenTypes) {\n    SemanticTokenTypes[\"namespace\"] = \"namespace\";\n    /**\n     * Represents a generic type. Acts as a fallback for types which can't be mapped to\n     * a specific type like class or enum.\n     */\n    SemanticTokenTypes[\"type\"] = \"type\";\n    SemanticTokenTypes[\"class\"] = \"class\";\n    SemanticTokenTypes[\"enum\"] = \"enum\";\n    SemanticTokenTypes[\"interface\"] = \"interface\";\n    SemanticTokenTypes[\"struct\"] = \"struct\";\n    SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\n    SemanticTokenTypes[\"parameter\"] = \"parameter\";\n    SemanticTokenTypes[\"variable\"] = \"variable\";\n    SemanticTokenTypes[\"property\"] = \"property\";\n    SemanticTokenTypes[\"enumMember\"] = \"enumMember\";\n    SemanticTokenTypes[\"event\"] = \"event\";\n    SemanticTokenTypes[\"function\"] = \"function\";\n    SemanticTokenTypes[\"method\"] = \"method\";\n    SemanticTokenTypes[\"macro\"] = \"macro\";\n    SemanticTokenTypes[\"keyword\"] = \"keyword\";\n    SemanticTokenTypes[\"modifier\"] = \"modifier\";\n    SemanticTokenTypes[\"comment\"] = \"comment\";\n    SemanticTokenTypes[\"string\"] = \"string\";\n    SemanticTokenTypes[\"number\"] = \"number\";\n    SemanticTokenTypes[\"regexp\"] = \"regexp\";\n    SemanticTokenTypes[\"operator\"] = \"operator\";\n    /**\n     * @since 3.17.0\n     */\n    SemanticTokenTypes[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\n/**\n * A set of predefined token modifiers. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenModifiers;\n(function (SemanticTokenModifiers) {\n    SemanticTokenModifiers[\"declaration\"] = \"declaration\";\n    SemanticTokenModifiers[\"definition\"] = \"definition\";\n    SemanticTokenModifiers[\"readonly\"] = \"readonly\";\n    SemanticTokenModifiers[\"static\"] = \"static\";\n    SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\n    SemanticTokenModifiers[\"abstract\"] = \"abstract\";\n    SemanticTokenModifiers[\"async\"] = \"async\";\n    SemanticTokenModifiers[\"modification\"] = \"modification\";\n    SemanticTokenModifiers[\"documentation\"] = \"documentation\";\n    SemanticTokenModifiers[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\n/**\n * @since 3.16.0\n */\nexport var SemanticTokens;\n(function (SemanticTokens) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\n            Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\n    }\n    SemanticTokens.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\n/**\n * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n *\n * @since 3.17.0\n */\nexport var InlineValueText;\n(function (InlineValueText) {\n    /**\n     * Creates a new InlineValueText literal.\n     */\n    function create(range, text) {\n        return { range, text };\n    }\n    InlineValueText.create = create;\n    function is(value) {\n        const candidate = value;\n        return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n    }\n    InlineValueText.is = is;\n})(InlineValueText || (InlineValueText = {}));\n/**\n * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n *\n * @since 3.17.0\n */\nexport var InlineValueVariableLookup;\n(function (InlineValueVariableLookup) {\n    /**\n     * Creates a new InlineValueText literal.\n     */\n    function create(range, variableName, caseSensitiveLookup) {\n        return { range, variableName, caseSensitiveLookup };\n    }\n    InlineValueVariableLookup.create = create;\n    function is(value) {\n        const candidate = value;\n        return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup)\n            && (Is.string(candidate.variableName) || candidate.variableName === undefined);\n    }\n    InlineValueVariableLookup.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\n/**\n * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n *\n * @since 3.17.0\n */\nexport var InlineValueEvaluatableExpression;\n(function (InlineValueEvaluatableExpression) {\n    /**\n     * Creates a new InlineValueEvaluatableExpression literal.\n     */\n    function create(range, expression) {\n        return { range, expression };\n    }\n    InlineValueEvaluatableExpression.create = create;\n    function is(value) {\n        const candidate = value;\n        return candidate !== undefined && candidate !== null && Range.is(candidate.range)\n            && (Is.string(candidate.expression) || candidate.expression === undefined);\n    }\n    InlineValueEvaluatableExpression.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\n/**\n * The InlineValueContext namespace provides helper functions to work with\n * {@link InlineValueContext} literals.\n *\n * @since 3.17.0\n */\nexport var InlineValueContext;\n(function (InlineValueContext) {\n    /**\n     * Creates a new InlineValueContext literal.\n     */\n    function create(frameId, stoppedLocation) {\n        return { frameId, stoppedLocation };\n    }\n    InlineValueContext.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link InlineValueContext} interface.\n     */\n    function is(value) {\n        const candidate = value;\n        return Is.defined(candidate) && Range.is(value.stoppedLocation);\n    }\n    InlineValueContext.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\n/**\n * Inlay hint kinds.\n *\n * @since 3.17.0\n */\nexport var InlayHintKind;\n(function (InlayHintKind) {\n    /**\n     * An inlay hint that for a type annotation.\n     */\n    InlayHintKind.Type = 1;\n    /**\n     * An inlay hint that is for a parameter.\n     */\n    InlayHintKind.Parameter = 2;\n    function is(value) {\n        return value === 1 || value === 2;\n    }\n    InlayHintKind.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nexport var InlayHintLabelPart;\n(function (InlayHintLabelPart) {\n    function create(value) {\n        return { value };\n    }\n    InlayHintLabelPart.create = create;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate)\n            && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n            && (candidate.location === undefined || Location.is(candidate.location))\n            && (candidate.command === undefined || Command.is(candidate.command));\n    }\n    InlayHintLabelPart.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nexport var InlayHint;\n(function (InlayHint) {\n    function create(position, label, kind) {\n        const result = { position, label };\n        if (kind !== undefined) {\n            result.kind = kind;\n        }\n        return result;\n    }\n    InlayHint.create = create;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Position.is(candidate.position)\n            && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is))\n            && (candidate.kind === undefined || InlayHintKind.is(candidate.kind))\n            && (candidate.textEdits === undefined) || Is.typedArray(candidate.textEdits, TextEdit.is)\n            && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n            && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft))\n            && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight));\n    }\n    InlayHint.is = is;\n})(InlayHint || (InlayHint = {}));\nexport var StringValue;\n(function (StringValue) {\n    function createSnippet(value) {\n        return { kind: 'snippet', value };\n    }\n    StringValue.createSnippet = createSnippet;\n})(StringValue || (StringValue = {}));\nexport var InlineCompletionItem;\n(function (InlineCompletionItem) {\n    function create(insertText, filterText, range, command) {\n        return { insertText, filterText, range, command };\n    }\n    InlineCompletionItem.create = create;\n})(InlineCompletionItem || (InlineCompletionItem = {}));\nexport var InlineCompletionList;\n(function (InlineCompletionList) {\n    function create(items) {\n        return { items };\n    }\n    InlineCompletionList.create = create;\n})(InlineCompletionList || (InlineCompletionList = {}));\n/**\n * Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered.\n *\n * @since 3.18.0\n * @proposed\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n    /**\n     * Completion was triggered explicitly by a user gesture.\n     */\n    InlineCompletionTriggerKind.Invoked = 0;\n    /**\n     * Completion was triggered automatically while editing.\n     */\n    InlineCompletionTriggerKind.Automatic = 1;\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport var SelectedCompletionInfo;\n(function (SelectedCompletionInfo) {\n    function create(range, text) {\n        return { range, text };\n    }\n    SelectedCompletionInfo.create = create;\n})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\nexport var InlineCompletionContext;\n(function (InlineCompletionContext) {\n    function create(triggerKind, selectedCompletionInfo) {\n        return { triggerKind, selectedCompletionInfo };\n    }\n    InlineCompletionContext.create = create;\n})(InlineCompletionContext || (InlineCompletionContext = {}));\nexport var WorkspaceFolder;\n(function (WorkspaceFolder) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n    }\n    WorkspaceFolder.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nexport const EOL = ['\\n', '\\r\\n', '\\r'];\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nexport var TextDocument;\n(function (TextDocument) {\n    /**\n     * Creates a new ITextDocument literal from the given uri and content.\n     * @param uri The document's uri.\n     * @param languageId The document's language Id.\n     * @param version The document's version.\n     * @param content The document's content.\n     */\n    function create(uri, languageId, version, content) {\n        return new FullTextDocument(uri, languageId, version, content);\n    }\n    TextDocument.create = create;\n    /**\n     * Checks whether the given literal conforms to the {@link ITextDocument} interface.\n     */\n    function is(value) {\n        let candidate = value;\n        return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)\n            && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n    }\n    TextDocument.is = is;\n    function applyEdits(document, edits) {\n        let text = document.getText();\n        let sortedEdits = mergeSort(edits, (a, b) => {\n            let diff = a.range.start.line - b.range.start.line;\n            if (diff === 0) {\n                return a.range.start.character - b.range.start.character;\n            }\n            return diff;\n        });\n        let lastModifiedOffset = text.length;\n        for (let i = sortedEdits.length - 1; i >= 0; i--) {\n            let e = sortedEdits[i];\n            let startOffset = document.offsetAt(e.range.start);\n            let endOffset = document.offsetAt(e.range.end);\n            if (endOffset <= lastModifiedOffset) {\n                text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n            }\n            else {\n                throw new Error('Overlapping edit');\n            }\n            lastModifiedOffset = startOffset;\n        }\n        return text;\n    }\n    TextDocument.applyEdits = applyEdits;\n    function mergeSort(data, compare) {\n        if (data.length <= 1) {\n            // sorted\n            return data;\n        }\n        const p = (data.length / 2) | 0;\n        const left = data.slice(0, p);\n        const right = data.slice(p);\n        mergeSort(left, compare);\n        mergeSort(right, compare);\n        let leftIdx = 0;\n        let rightIdx = 0;\n        let i = 0;\n        while (leftIdx < left.length && rightIdx < right.length) {\n            let ret = compare(left[leftIdx], right[rightIdx]);\n            if (ret <= 0) {\n                // smaller_equal -> take left to preserve order\n                data[i++] = left[leftIdx++];\n            }\n            else {\n                // greater -> take right\n                data[i++] = right[rightIdx++];\n            }\n        }\n        while (leftIdx < left.length) {\n            data[i++] = left[leftIdx++];\n        }\n        while (rightIdx < right.length) {\n            data[i++] = right[rightIdx++];\n        }\n        return data;\n    }\n})(TextDocument || (TextDocument = {}));\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nclass FullTextDocument {\n    constructor(uri, languageId, version, content) {\n        this._uri = uri;\n        this._languageId = languageId;\n        this._version = version;\n        this._content = content;\n        this._lineOffsets = undefined;\n    }\n    get uri() {\n        return this._uri;\n    }\n    get languageId() {\n        return this._languageId;\n    }\n    get version() {\n        return this._version;\n    }\n    getText(range) {\n        if (range) {\n            let start = this.offsetAt(range.start);\n            let end = this.offsetAt(range.end);\n            return this._content.substring(start, end);\n        }\n        return this._content;\n    }\n    update(event, version) {\n        this._content = event.text;\n        this._version = version;\n        this._lineOffsets = undefined;\n    }\n    getLineOffsets() {\n        if (this._lineOffsets === undefined) {\n            let lineOffsets = [];\n            let text = this._content;\n            let isLineStart = true;\n            for (let i = 0; i < text.length; i++) {\n                if (isLineStart) {\n                    lineOffsets.push(i);\n                    isLineStart = false;\n                }\n                let ch = text.charAt(i);\n                isLineStart = (ch === '\\r' || ch === '\\n');\n                if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n                    i++;\n                }\n            }\n            if (isLineStart && text.length > 0) {\n                lineOffsets.push(text.length);\n            }\n            this._lineOffsets = lineOffsets;\n        }\n        return this._lineOffsets;\n    }\n    positionAt(offset) {\n        offset = Math.max(Math.min(offset, this._content.length), 0);\n        let lineOffsets = this.getLineOffsets();\n        let low = 0, high = lineOffsets.length;\n        if (high === 0) {\n            return Position.create(0, offset);\n        }\n        while (low < high) {\n            let mid = Math.floor((low + high) / 2);\n            if (lineOffsets[mid] > offset) {\n                high = mid;\n            }\n            else {\n                low = mid + 1;\n            }\n        }\n        // low is the least x for which the line offset is larger than the current offset\n        // or array.length if no line offset is larger than the current offset\n        let line = low - 1;\n        return Position.create(line, offset - lineOffsets[line]);\n    }\n    offsetAt(position) {\n        let lineOffsets = this.getLineOffsets();\n        if (position.line >= lineOffsets.length) {\n            return this._content.length;\n        }\n        else if (position.line < 0) {\n            return 0;\n        }\n        let lineOffset = lineOffsets[position.line];\n        let nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n        return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n    }\n    get lineCount() {\n        return this.getLineOffsets().length;\n    }\n}\nvar Is;\n(function (Is) {\n    const toString = Object.prototype.toString;\n    function defined(value) {\n        return typeof value !== 'undefined';\n    }\n    Is.defined = defined;\n    function undefined(value) {\n        return typeof value === 'undefined';\n    }\n    Is.undefined = undefined;\n    function boolean(value) {\n        return value === true || value === false;\n    }\n    Is.boolean = boolean;\n    function string(value) {\n        return toString.call(value) === '[object String]';\n    }\n    Is.string = string;\n    function number(value) {\n        return toString.call(value) === '[object Number]';\n    }\n    Is.number = number;\n    function numberRange(value, min, max) {\n        return toString.call(value) === '[object Number]' && min <= value && value <= max;\n    }\n    Is.numberRange = numberRange;\n    function integer(value) {\n        return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;\n    }\n    Is.integer = integer;\n    function uinteger(value) {\n        return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;\n    }\n    Is.uinteger = uinteger;\n    function func(value) {\n        return toString.call(value) === '[object Function]';\n    }\n    Is.func = func;\n    function objectLiteral(value) {\n        // Strictly speaking class instances pass this check as well. Since the LSP\n        // doesn't use classes we ignore this for now. If we do we need to add something\n        // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\n        return value !== null && typeof value === 'object';\n    }\n    Is.objectLiteral = objectLiteral;\n    function typedArray(value, check) {\n        return Array.isArray(value) && value.every(check);\n    }\n    Is.typedArray = typedArray;\n})(Is || (Is = {}));\n","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Position } from 'vscode-languageserver-types';\nimport { tokenToRange } from '../utils/cst-utils.js';\nexport class CstNodeBuilder {\n    constructor() {\n        this.nodeStack = [];\n    }\n    get current() {\n        var _a;\n        return (_a = this.nodeStack[this.nodeStack.length - 1]) !== null && _a !== void 0 ? _a : this.rootNode;\n    }\n    buildRootNode(input) {\n        this.rootNode = new RootCstNodeImpl(input);\n        this.rootNode.root = this.rootNode;\n        this.nodeStack = [this.rootNode];\n        return this.rootNode;\n    }\n    buildCompositeNode(feature) {\n        const compositeNode = new CompositeCstNodeImpl();\n        compositeNode.grammarSource = feature;\n        compositeNode.root = this.rootNode;\n        this.current.content.push(compositeNode);\n        this.nodeStack.push(compositeNode);\n        return compositeNode;\n    }\n    buildLeafNode(token, feature) {\n        const leafNode = new LeafCstNodeImpl(token.startOffset, token.image.length, tokenToRange(token), token.tokenType, !feature);\n        leafNode.grammarSource = feature;\n        leafNode.root = this.rootNode;\n        this.current.content.push(leafNode);\n        return leafNode;\n    }\n    removeNode(node) {\n        const parent = node.container;\n        if (parent) {\n            const index = parent.content.indexOf(node);\n            if (index >= 0) {\n                parent.content.splice(index, 1);\n            }\n        }\n    }\n    addHiddenNodes(tokens) {\n        const nodes = [];\n        for (const token of tokens) {\n            const leafNode = new LeafCstNodeImpl(token.startOffset, token.image.length, tokenToRange(token), token.tokenType, true);\n            leafNode.root = this.rootNode;\n            nodes.push(leafNode);\n        }\n        let current = this.current;\n        let added = false;\n        // If we are within a composite node, we add the hidden nodes to the content\n        if (current.content.length > 0) {\n            current.content.push(...nodes);\n            return;\n        }\n        // Otherwise we are at a newly created node\n        // Instead of adding the hidden nodes here, we search for the first parent node with content\n        while (current.container) {\n            const index = current.container.content.indexOf(current);\n            if (index > 0) {\n                // Add the hidden nodes before the current node\n                current.container.content.splice(index, 0, ...nodes);\n                added = true;\n                break;\n            }\n            current = current.container;\n        }\n        // If we arrive at the root node, we add the hidden nodes at the beginning\n        // This is the case if the hidden nodes are the first nodes in the tree\n        if (!added) {\n            this.rootNode.content.unshift(...nodes);\n        }\n    }\n    construct(item) {\n        const current = this.current;\n        // The specified item could be a datatype ($type is symbol) or a fragment ($type is undefined)\n        // Only if the $type is a string, we actually assign the element\n        if (typeof item.$type === 'string') {\n            this.current.astNode = item;\n        }\n        item.$cstNode = current;\n        const node = this.nodeStack.pop();\n        // Empty composite nodes are not valid\n        // Simply remove the node from the tree\n        if ((node === null || node === void 0 ? void 0 : node.content.length) === 0) {\n            this.removeNode(node);\n        }\n    }\n}\nexport class AbstractCstNode {\n    /** @deprecated use `container` instead. */\n    get parent() {\n        return this.container;\n    }\n    /** @deprecated use `grammarSource` instead. */\n    get feature() {\n        return this.grammarSource;\n    }\n    get hidden() {\n        return false;\n    }\n    get astNode() {\n        var _a, _b;\n        const node = typeof ((_a = this._astNode) === null || _a === void 0 ? void 0 : _a.$type) === 'string' ? this._astNode : (_b = this.container) === null || _b === void 0 ? void 0 : _b.astNode;\n        if (!node) {\n            throw new Error('This node has no associated AST element');\n        }\n        return node;\n    }\n    set astNode(value) {\n        this._astNode = value;\n    }\n    /** @deprecated use `astNode` instead. */\n    get element() {\n        return this.astNode;\n    }\n    get text() {\n        return this.root.fullText.substring(this.offset, this.end);\n    }\n}\nexport class LeafCstNodeImpl extends AbstractCstNode {\n    get offset() {\n        return this._offset;\n    }\n    get length() {\n        return this._length;\n    }\n    get end() {\n        return this._offset + this._length;\n    }\n    get hidden() {\n        return this._hidden;\n    }\n    get tokenType() {\n        return this._tokenType;\n    }\n    get range() {\n        return this._range;\n    }\n    constructor(offset, length, range, tokenType, hidden = false) {\n        super();\n        this._hidden = hidden;\n        this._offset = offset;\n        this._tokenType = tokenType;\n        this._length = length;\n        this._range = range;\n    }\n}\nexport class CompositeCstNodeImpl extends AbstractCstNode {\n    constructor() {\n        super(...arguments);\n        this.content = new CstNodeContainer(this);\n    }\n    /** @deprecated use `content` instead. */\n    get children() {\n        return this.content;\n    }\n    get offset() {\n        var _a, _b;\n        return (_b = (_a = this.firstNonHiddenNode) === null || _a === void 0 ? void 0 : _a.offset) !== null && _b !== void 0 ? _b : 0;\n    }\n    get length() {\n        return this.end - this.offset;\n    }\n    get end() {\n        var _a, _b;\n        return (_b = (_a = this.lastNonHiddenNode) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : 0;\n    }\n    get range() {\n        const firstNode = this.firstNonHiddenNode;\n        const lastNode = this.lastNonHiddenNode;\n        if (firstNode && lastNode) {\n            if (this._rangeCache === undefined) {\n                const { range: firstRange } = firstNode;\n                const { range: lastRange } = lastNode;\n                this._rangeCache = { start: firstRange.start, end: lastRange.end.line < firstRange.start.line ? firstRange.start : lastRange.end };\n            }\n            return this._rangeCache;\n        }\n        else {\n            return { start: Position.create(0, 0), end: Position.create(0, 0) };\n        }\n    }\n    get firstNonHiddenNode() {\n        for (const child of this.content) {\n            if (!child.hidden) {\n                return child;\n            }\n        }\n        return this.content[0];\n    }\n    get lastNonHiddenNode() {\n        for (let i = this.content.length - 1; i >= 0; i--) {\n            const child = this.content[i];\n            if (!child.hidden) {\n                return child;\n            }\n        }\n        return this.content[this.content.length - 1];\n    }\n}\nclass CstNodeContainer extends Array {\n    constructor(parent) {\n        super();\n        this.parent = parent;\n        Object.setPrototypeOf(this, CstNodeContainer.prototype);\n    }\n    push(...items) {\n        this.addParents(items);\n        return super.push(...items);\n    }\n    unshift(...items) {\n        this.addParents(items);\n        return super.unshift(...items);\n    }\n    splice(start, count, ...items) {\n        this.addParents(items);\n        return super.splice(start, count, ...items);\n    }\n    addParents(items) {\n        for (const item of items) {\n            item.container = this.parent;\n        }\n    }\n}\nexport class RootCstNodeImpl extends CompositeCstNodeImpl {\n    get text() {\n        return this._text.substring(this.offset, this.end);\n    }\n    get fullText() {\n        return this._text;\n    }\n    constructor(input) {\n        super();\n        this._text = '';\n        this._text = input !== null && input !== void 0 ? input : '';\n    }\n}\n//# sourceMappingURL=cst-node-builder.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { defaultParserErrorProvider, EmbeddedActionsParser, LLkLookaheadStrategy } from 'chevrotain';\nimport { LLStarLookaheadStrategy } from 'chevrotain-allstar';\nimport { isAssignment, isCrossReference, isKeyword } from '../languages/generated/ast.js';\nimport { getExplicitRuleType, isDataTypeRule } from '../utils/grammar-utils.js';\nimport { assignMandatoryProperties, getContainerOfType, linkContentToContainer } from '../utils/ast-utils.js';\nimport { CstNodeBuilder } from './cst-node-builder.js';\nexport const DatatypeSymbol = Symbol('Datatype');\nfunction isDataTypeNode(node) {\n    return node.$type === DatatypeSymbol;\n}\nconst ruleSuffix = '\\u200B';\nconst withRuleSuffix = (name) => name.endsWith(ruleSuffix) ? name : name + ruleSuffix;\nexport class AbstractLangiumParser {\n    constructor(services) {\n        this._unorderedGroups = new Map();\n        this.allRules = new Map();\n        this.lexer = services.parser.Lexer;\n        const tokens = this.lexer.definition;\n        const production = services.LanguageMetaData.mode === 'production';\n        this.wrapper = new ChevrotainWrapper(tokens, Object.assign(Object.assign({}, services.parser.ParserConfig), { skipValidations: production, errorMessageProvider: services.parser.ParserErrorMessageProvider }));\n    }\n    alternatives(idx, choices) {\n        this.wrapper.wrapOr(idx, choices);\n    }\n    optional(idx, callback) {\n        this.wrapper.wrapOption(idx, callback);\n    }\n    many(idx, callback) {\n        this.wrapper.wrapMany(idx, callback);\n    }\n    atLeastOne(idx, callback) {\n        this.wrapper.wrapAtLeastOne(idx, callback);\n    }\n    getRule(name) {\n        return this.allRules.get(name);\n    }\n    isRecording() {\n        return this.wrapper.IS_RECORDING;\n    }\n    get unorderedGroups() {\n        return this._unorderedGroups;\n    }\n    getRuleStack() {\n        return this.wrapper.RULE_STACK;\n    }\n    finalize() {\n        this.wrapper.wrapSelfAnalysis();\n    }\n}\nexport class LangiumParser extends AbstractLangiumParser {\n    get current() {\n        return this.stack[this.stack.length - 1];\n    }\n    constructor(services) {\n        super(services);\n        this.nodeBuilder = new CstNodeBuilder();\n        this.stack = [];\n        this.assignmentMap = new Map();\n        this.linker = services.references.Linker;\n        this.converter = services.parser.ValueConverter;\n        this.astReflection = services.shared.AstReflection;\n    }\n    rule(rule, impl) {\n        const type = this.computeRuleType(rule);\n        const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(type, impl).bind(this));\n        this.allRules.set(rule.name, ruleMethod);\n        if (rule.entry) {\n            this.mainRule = ruleMethod;\n        }\n        return ruleMethod;\n    }\n    computeRuleType(rule) {\n        if (rule.fragment) {\n            return undefined;\n        }\n        else if (isDataTypeRule(rule)) {\n            return DatatypeSymbol;\n        }\n        else {\n            const explicit = getExplicitRuleType(rule);\n            return explicit !== null && explicit !== void 0 ? explicit : rule.name;\n        }\n    }\n    parse(input, options = {}) {\n        this.nodeBuilder.buildRootNode(input);\n        const lexerResult = this.lexerResult = this.lexer.tokenize(input);\n        this.wrapper.input = lexerResult.tokens;\n        const ruleMethod = options.rule ? this.allRules.get(options.rule) : this.mainRule;\n        if (!ruleMethod) {\n            throw new Error(options.rule ? `No rule found with name '${options.rule}'` : 'No main rule available.');\n        }\n        const result = ruleMethod.call(this.wrapper, {});\n        this.nodeBuilder.addHiddenNodes(lexerResult.hidden);\n        this.unorderedGroups.clear();\n        this.lexerResult = undefined;\n        return {\n            value: result,\n            lexerErrors: lexerResult.errors,\n            lexerReport: lexerResult.report,\n            parserErrors: this.wrapper.errors\n        };\n    }\n    startImplementation($type, implementation) {\n        return (args) => {\n            // Only create a new AST node in case the calling rule is not a fragment rule\n            const createNode = !this.isRecording() && $type !== undefined;\n            if (createNode) {\n                const node = { $type };\n                this.stack.push(node);\n                if ($type === DatatypeSymbol) {\n                    node.value = '';\n                }\n            }\n            let result;\n            try {\n                result = implementation(args);\n            }\n            catch (err) {\n                result = undefined;\n            }\n            if (result === undefined && createNode) {\n                result = this.construct();\n            }\n            return result;\n        };\n    }\n    extractHiddenTokens(token) {\n        const hiddenTokens = this.lexerResult.hidden;\n        if (!hiddenTokens.length) {\n            return [];\n        }\n        const offset = token.startOffset;\n        for (let i = 0; i < hiddenTokens.length; i++) {\n            const token = hiddenTokens[i];\n            if (token.startOffset > offset) {\n                return hiddenTokens.splice(0, i);\n            }\n        }\n        return hiddenTokens.splice(0, hiddenTokens.length);\n    }\n    consume(idx, tokenType, feature) {\n        const token = this.wrapper.wrapConsume(idx, tokenType);\n        if (!this.isRecording() && this.isValidToken(token)) {\n            const hiddenTokens = this.extractHiddenTokens(token);\n            this.nodeBuilder.addHiddenNodes(hiddenTokens);\n            const leafNode = this.nodeBuilder.buildLeafNode(token, feature);\n            const { assignment, isCrossRef } = this.getAssignment(feature);\n            const current = this.current;\n            if (assignment) {\n                const convertedValue = isKeyword(feature) ? token.image : this.converter.convert(token.image, leafNode);\n                this.assign(assignment.operator, assignment.feature, convertedValue, leafNode, isCrossRef);\n            }\n            else if (isDataTypeNode(current)) {\n                let text = token.image;\n                if (!isKeyword(feature)) {\n                    text = this.converter.convert(text, leafNode).toString();\n                }\n                current.value += text;\n            }\n        }\n    }\n    /**\n     * Most consumed parser tokens are valid. However there are two cases in which they are not valid:\n     *\n     * 1. They were inserted during error recovery by the parser. These tokens don't really exist and should not be further processed\n     * 2. They contain invalid token ranges. This might include the special EOF token, or other tokens produced by invalid token builders.\n     */\n    isValidToken(token) {\n        return !token.isInsertedInRecovery && !isNaN(token.startOffset) && typeof token.endOffset === 'number' && !isNaN(token.endOffset);\n    }\n    subrule(idx, rule, fragment, feature, args) {\n        let cstNode;\n        if (!this.isRecording() && !fragment) {\n            // We only want to create a new CST node if the subrule actually creates a new AST node.\n            // In other cases like calls of fragment rules the current CST/AST is populated further.\n            // Note that skipping this initialization and leaving cstNode unassigned also skips the subrule assignment later on.\n            // This is intended, as fragment rules only enrich the current AST node\n            cstNode = this.nodeBuilder.buildCompositeNode(feature);\n        }\n        const subruleResult = this.wrapper.wrapSubrule(idx, rule, args);\n        if (!this.isRecording() && cstNode && cstNode.length > 0) {\n            this.performSubruleAssignment(subruleResult, feature, cstNode);\n        }\n    }\n    performSubruleAssignment(result, feature, cstNode) {\n        const { assignment, isCrossRef } = this.getAssignment(feature);\n        if (assignment) {\n            this.assign(assignment.operator, assignment.feature, result, cstNode, isCrossRef);\n        }\n        else if (!assignment) {\n            // If we call a subrule without an assignment we either:\n            // 1. append the result of the subrule (data type rule)\n            // 2. override the current object with the newly parsed object\n            // If the current element is an AST node and the result of the subrule\n            // is a data type rule, we can safely discard the results.\n            const current = this.current;\n            if (isDataTypeNode(current)) {\n                current.value += result.toString();\n            }\n            else if (typeof result === 'object' && result) {\n                const object = this.assignWithoutOverride(result, current);\n                const newItem = object;\n                this.stack.pop();\n                this.stack.push(newItem);\n            }\n        }\n    }\n    action($type, action) {\n        if (!this.isRecording()) {\n            let last = this.current;\n            if (action.feature && action.operator) {\n                last = this.construct();\n                this.nodeBuilder.removeNode(last.$cstNode);\n                const node = this.nodeBuilder.buildCompositeNode(action);\n                node.content.push(last.$cstNode);\n                const newItem = { $type };\n                this.stack.push(newItem);\n                this.assign(action.operator, action.feature, last, last.$cstNode, false);\n            }\n            else {\n                last.$type = $type;\n            }\n        }\n    }\n    construct() {\n        if (this.isRecording()) {\n            return undefined;\n        }\n        const obj = this.current;\n        linkContentToContainer(obj);\n        this.nodeBuilder.construct(obj);\n        this.stack.pop();\n        if (isDataTypeNode(obj)) {\n            return this.converter.convert(obj.value, obj.$cstNode);\n        }\n        else {\n            assignMandatoryProperties(this.astReflection, obj);\n        }\n        return obj;\n    }\n    getAssignment(feature) {\n        if (!this.assignmentMap.has(feature)) {\n            const assignment = getContainerOfType(feature, isAssignment);\n            this.assignmentMap.set(feature, {\n                assignment: assignment,\n                isCrossRef: assignment ? isCrossReference(assignment.terminal) : false\n            });\n        }\n        return this.assignmentMap.get(feature);\n    }\n    assign(operator, feature, value, cstNode, isCrossRef) {\n        const obj = this.current;\n        let item;\n        if (isCrossRef && typeof value === 'string') {\n            item = this.linker.buildReference(obj, feature, cstNode, value);\n        }\n        else {\n            item = value;\n        }\n        switch (operator) {\n            case '=': {\n                obj[feature] = item;\n                break;\n            }\n            case '?=': {\n                obj[feature] = true;\n                break;\n            }\n            case '+=': {\n                if (!Array.isArray(obj[feature])) {\n                    obj[feature] = [];\n                }\n                obj[feature].push(item);\n            }\n        }\n    }\n    assignWithoutOverride(target, source) {\n        for (const [name, existingValue] of Object.entries(source)) {\n            const newValue = target[name];\n            if (newValue === undefined) {\n                target[name] = existingValue;\n            }\n            else if (Array.isArray(newValue) && Array.isArray(existingValue)) {\n                existingValue.push(...newValue);\n                target[name] = existingValue;\n            }\n        }\n        // The target was parsed from a unassigned subrule\n        // After the subrule construction, it received a cst node\n        // This CST node will later be overriden by the cst node builder\n        // To prevent references to stale AST nodes in the CST,\n        // we need to remove the reference here\n        const targetCstNode = target.$cstNode;\n        if (targetCstNode) {\n            targetCstNode.astNode = undefined;\n            target.$cstNode = undefined;\n        }\n        return target;\n    }\n    get definitionErrors() {\n        return this.wrapper.definitionErrors;\n    }\n}\nexport class AbstractParserErrorMessageProvider {\n    buildMismatchTokenMessage(options) {\n        return defaultParserErrorProvider.buildMismatchTokenMessage(options);\n    }\n    buildNotAllInputParsedMessage(options) {\n        return defaultParserErrorProvider.buildNotAllInputParsedMessage(options);\n    }\n    buildNoViableAltMessage(options) {\n        return defaultParserErrorProvider.buildNoViableAltMessage(options);\n    }\n    buildEarlyExitMessage(options) {\n        return defaultParserErrorProvider.buildEarlyExitMessage(options);\n    }\n}\nexport class LangiumParserErrorMessageProvider extends AbstractParserErrorMessageProvider {\n    buildMismatchTokenMessage({ expected, actual }) {\n        const expectedMsg = expected.LABEL\n            ? '`' + expected.LABEL + '`'\n            : expected.name.endsWith(':KW')\n                ? `keyword '${expected.name.substring(0, expected.name.length - 3)}'`\n                : `token of type '${expected.name}'`;\n        return `Expecting ${expectedMsg} but found \\`${actual.image}\\`.`;\n    }\n    buildNotAllInputParsedMessage({ firstRedundant }) {\n        return `Expecting end of file but found \\`${firstRedundant.image}\\`.`;\n    }\n}\nexport class LangiumCompletionParser extends AbstractLangiumParser {\n    constructor() {\n        super(...arguments);\n        this.tokens = [];\n        this.elementStack = [];\n        this.lastElementStack = [];\n        this.nextTokenIndex = 0;\n        this.stackSize = 0;\n    }\n    action() {\n        // NOOP\n    }\n    construct() {\n        // NOOP\n        return undefined;\n    }\n    parse(input) {\n        this.resetState();\n        const tokens = this.lexer.tokenize(input, { mode: 'partial' });\n        this.tokens = tokens.tokens;\n        this.wrapper.input = [...this.tokens];\n        this.mainRule.call(this.wrapper, {});\n        this.unorderedGroups.clear();\n        return {\n            tokens: this.tokens,\n            elementStack: [...this.lastElementStack],\n            tokenIndex: this.nextTokenIndex\n        };\n    }\n    rule(rule, impl) {\n        const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(impl).bind(this));\n        this.allRules.set(rule.name, ruleMethod);\n        if (rule.entry) {\n            this.mainRule = ruleMethod;\n        }\n        return ruleMethod;\n    }\n    resetState() {\n        this.elementStack = [];\n        this.lastElementStack = [];\n        this.nextTokenIndex = 0;\n        this.stackSize = 0;\n    }\n    startImplementation(implementation) {\n        return (args) => {\n            const size = this.keepStackSize();\n            try {\n                implementation(args);\n            }\n            finally {\n                this.resetStackSize(size);\n            }\n        };\n    }\n    removeUnexpectedElements() {\n        this.elementStack.splice(this.stackSize);\n    }\n    keepStackSize() {\n        const size = this.elementStack.length;\n        this.stackSize = size;\n        return size;\n    }\n    resetStackSize(size) {\n        this.removeUnexpectedElements();\n        this.stackSize = size;\n    }\n    consume(idx, tokenType, feature) {\n        this.wrapper.wrapConsume(idx, tokenType);\n        if (!this.isRecording()) {\n            this.lastElementStack = [...this.elementStack, feature];\n            this.nextTokenIndex = this.currIdx + 1;\n        }\n    }\n    subrule(idx, rule, fragment, feature, args) {\n        this.before(feature);\n        this.wrapper.wrapSubrule(idx, rule, args);\n        this.after(feature);\n    }\n    before(element) {\n        if (!this.isRecording()) {\n            this.elementStack.push(element);\n        }\n    }\n    after(element) {\n        if (!this.isRecording()) {\n            const index = this.elementStack.lastIndexOf(element);\n            if (index >= 0) {\n                this.elementStack.splice(index);\n            }\n        }\n    }\n    get currIdx() {\n        return this.wrapper.currIdx;\n    }\n}\nconst defaultConfig = {\n    recoveryEnabled: true,\n    nodeLocationTracking: 'full',\n    skipValidations: true,\n    errorMessageProvider: new LangiumParserErrorMessageProvider()\n};\n/**\n * This class wraps the embedded actions parser of chevrotain and exposes protected methods.\n * This way, we can build the `LangiumParser` as a composition.\n */\nclass ChevrotainWrapper extends EmbeddedActionsParser {\n    constructor(tokens, config) {\n        const useDefaultLookahead = config && 'maxLookahead' in config;\n        super(tokens, Object.assign(Object.assign(Object.assign({}, defaultConfig), { lookaheadStrategy: useDefaultLookahead\n                ? new LLkLookaheadStrategy({ maxLookahead: config.maxLookahead })\n                : new LLStarLookaheadStrategy({\n                    // If validations are skipped, don't log the lookahead warnings\n                    logging: config.skipValidations ? () => { } : undefined\n                }) }), config));\n    }\n    get IS_RECORDING() {\n        return this.RECORDING_PHASE;\n    }\n    DEFINE_RULE(name, impl) {\n        return this.RULE(name, impl);\n    }\n    wrapSelfAnalysis() {\n        this.performSelfAnalysis();\n    }\n    wrapConsume(idx, tokenType) {\n        return this.consume(idx, tokenType);\n    }\n    wrapSubrule(idx, rule, args) {\n        return this.subrule(idx, rule, {\n            ARGS: [args]\n        });\n    }\n    wrapOr(idx, choices) {\n        this.or(idx, choices);\n    }\n    wrapOption(idx, callback) {\n        this.option(idx, callback);\n    }\n    wrapMany(idx, callback) {\n        this.many(idx, callback);\n    }\n    wrapAtLeastOne(idx, callback) {\n        this.atLeastOne(idx, callback);\n    }\n}\n//# sourceMappingURL=langium-parser.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { EMPTY_ALT, EOF } from 'chevrotain';\nimport { isAction, isAlternatives, isEndOfFile, isAssignment, isConjunction, isCrossReference, isDisjunction, isGroup, isKeyword, isNegation, isParameterReference, isParserRule, isRuleCall, isTerminalRule, isUnorderedGroup, isBooleanLiteral } from '../languages/generated/ast.js';\nimport { assertUnreachable, ErrorWithLocation } from '../utils/errors.js';\nimport { stream } from '../utils/stream.js';\nimport { findNameAssignment, getAllReachableRules, getTypeName } from '../utils/grammar-utils.js';\nexport function createParser(grammar, parser, tokens) {\n    const parserContext = {\n        parser,\n        tokens,\n        ruleNames: new Map()\n    };\n    buildRules(parserContext, grammar);\n    return parser;\n}\nfunction buildRules(parserContext, grammar) {\n    const reachable = getAllReachableRules(grammar, false);\n    const parserRules = stream(grammar.rules).filter(isParserRule).filter(rule => reachable.has(rule));\n    for (const rule of parserRules) {\n        const ctx = Object.assign(Object.assign({}, parserContext), { consume: 1, optional: 1, subrule: 1, many: 1, or: 1 });\n        parserContext.parser.rule(rule, buildElement(ctx, rule.definition));\n    }\n}\nfunction buildElement(ctx, element, ignoreGuard = false) {\n    let method;\n    if (isKeyword(element)) {\n        method = buildKeyword(ctx, element);\n    }\n    else if (isAction(element)) {\n        method = buildAction(ctx, element);\n    }\n    else if (isAssignment(element)) {\n        method = buildElement(ctx, element.terminal);\n    }\n    else if (isCrossReference(element)) {\n        method = buildCrossReference(ctx, element);\n    }\n    else if (isRuleCall(element)) {\n        method = buildRuleCall(ctx, element);\n    }\n    else if (isAlternatives(element)) {\n        method = buildAlternatives(ctx, element);\n    }\n    else if (isUnorderedGroup(element)) {\n        method = buildUnorderedGroup(ctx, element);\n    }\n    else if (isGroup(element)) {\n        method = buildGroup(ctx, element);\n    }\n    else if (isEndOfFile(element)) {\n        const idx = ctx.consume++;\n        method = () => ctx.parser.consume(idx, EOF, element);\n    }\n    else {\n        throw new ErrorWithLocation(element.$cstNode, `Unexpected element type: ${element.$type}`);\n    }\n    return wrap(ctx, ignoreGuard ? undefined : getGuardCondition(element), method, element.cardinality);\n}\nfunction buildAction(ctx, action) {\n    const actionType = getTypeName(action);\n    return () => ctx.parser.action(actionType, action);\n}\nfunction buildRuleCall(ctx, ruleCall) {\n    const rule = ruleCall.rule.ref;\n    if (isParserRule(rule)) {\n        const idx = ctx.subrule++;\n        const fragment = rule.fragment;\n        const predicate = ruleCall.arguments.length > 0 ? buildRuleCallPredicate(rule, ruleCall.arguments) : () => ({});\n        return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), fragment, ruleCall, predicate(args));\n    }\n    else if (isTerminalRule(rule)) {\n        const idx = ctx.consume++;\n        const method = getToken(ctx, rule.name);\n        return () => ctx.parser.consume(idx, method, ruleCall);\n    }\n    else if (!rule) {\n        throw new ErrorWithLocation(ruleCall.$cstNode, `Undefined rule: ${ruleCall.rule.$refText}`);\n    }\n    else {\n        assertUnreachable(rule);\n    }\n}\nfunction buildRuleCallPredicate(rule, namedArgs) {\n    const predicates = namedArgs.map(e => buildPredicate(e.value));\n    return (args) => {\n        const ruleArgs = {};\n        for (let i = 0; i < predicates.length; i++) {\n            const ruleTarget = rule.parameters[i];\n            const predicate = predicates[i];\n            ruleArgs[ruleTarget.name] = predicate(args);\n        }\n        return ruleArgs;\n    };\n}\nfunction buildPredicate(condition) {\n    if (isDisjunction(condition)) {\n        const left = buildPredicate(condition.left);\n        const right = buildPredicate(condition.right);\n        return (args) => (left(args) || right(args));\n    }\n    else if (isConjunction(condition)) {\n        const left = buildPredicate(condition.left);\n        const right = buildPredicate(condition.right);\n        return (args) => (left(args) && right(args));\n    }\n    else if (isNegation(condition)) {\n        const value = buildPredicate(condition.value);\n        return (args) => !value(args);\n    }\n    else if (isParameterReference(condition)) {\n        const name = condition.parameter.ref.name;\n        return (args) => args !== undefined && args[name] === true;\n    }\n    else if (isBooleanLiteral(condition)) {\n        const value = Boolean(condition.true);\n        return () => value;\n    }\n    assertUnreachable(condition);\n}\nfunction buildAlternatives(ctx, alternatives) {\n    if (alternatives.elements.length === 1) {\n        return buildElement(ctx, alternatives.elements[0]);\n    }\n    else {\n        const methods = [];\n        for (const element of alternatives.elements) {\n            const predicatedMethod = {\n                // Since we handle the guard condition in the alternative already\n                // We can ignore the group guard condition inside\n                ALT: buildElement(ctx, element, true)\n            };\n            const guard = getGuardCondition(element);\n            if (guard) {\n                predicatedMethod.GATE = buildPredicate(guard);\n            }\n            methods.push(predicatedMethod);\n        }\n        const idx = ctx.or++;\n        return (args) => ctx.parser.alternatives(idx, methods.map(method => {\n            const alt = {\n                ALT: () => method.ALT(args)\n            };\n            const gate = method.GATE;\n            if (gate) {\n                alt.GATE = () => gate(args);\n            }\n            return alt;\n        }));\n    }\n}\nfunction buildUnorderedGroup(ctx, group) {\n    if (group.elements.length === 1) {\n        return buildElement(ctx, group.elements[0]);\n    }\n    const methods = [];\n    for (const element of group.elements) {\n        const predicatedMethod = {\n            // Since we handle the guard condition in the alternative already\n            // We can ignore the group guard condition inside\n            ALT: buildElement(ctx, element, true)\n        };\n        const guard = getGuardCondition(element);\n        if (guard) {\n            predicatedMethod.GATE = buildPredicate(guard);\n        }\n        methods.push(predicatedMethod);\n    }\n    const orIdx = ctx.or++;\n    const idFunc = (groupIdx, lParser) => {\n        const stackId = lParser.getRuleStack().join('-');\n        return `uGroup_${groupIdx}_${stackId}`;\n    };\n    const alternatives = (args) => ctx.parser.alternatives(orIdx, methods.map((method, idx) => {\n        const alt = { ALT: () => true };\n        const parser = ctx.parser;\n        alt.ALT = () => {\n            method.ALT(args);\n            if (!parser.isRecording()) {\n                const key = idFunc(orIdx, parser);\n                if (!parser.unorderedGroups.get(key)) {\n                    // init after clear state\n                    parser.unorderedGroups.set(key, []);\n                }\n                const groupState = parser.unorderedGroups.get(key);\n                if (typeof (groupState === null || groupState === void 0 ? void 0 : groupState[idx]) === 'undefined') {\n                    // Not accessed yet\n                    groupState[idx] = true;\n                }\n            }\n        };\n        const gate = method.GATE;\n        if (gate) {\n            alt.GATE = () => gate(args);\n        }\n        else {\n            alt.GATE = () => {\n                const trackedAlternatives = parser.unorderedGroups.get(idFunc(orIdx, parser));\n                const allow = !(trackedAlternatives === null || trackedAlternatives === void 0 ? void 0 : trackedAlternatives[idx]);\n                return allow;\n            };\n        }\n        return alt;\n    }));\n    const wrapped = wrap(ctx, getGuardCondition(group), alternatives, '*');\n    return (args) => {\n        wrapped(args);\n        if (!ctx.parser.isRecording()) {\n            ctx.parser.unorderedGroups.delete(idFunc(orIdx, ctx.parser));\n        }\n    };\n}\nfunction buildGroup(ctx, group) {\n    const methods = group.elements.map(e => buildElement(ctx, e));\n    return (args) => methods.forEach(method => method(args));\n}\nfunction getGuardCondition(element) {\n    if (isGroup(element)) {\n        return element.guardCondition;\n    }\n    return undefined;\n}\nfunction buildCrossReference(ctx, crossRef, terminal = crossRef.terminal) {\n    if (!terminal) {\n        if (!crossRef.type.ref) {\n            throw new Error('Could not resolve reference to type: ' + crossRef.type.$refText);\n        }\n        const assignment = findNameAssignment(crossRef.type.ref);\n        const assignTerminal = assignment === null || assignment === void 0 ? void 0 : assignment.terminal;\n        if (!assignTerminal) {\n            throw new Error('Could not find name assignment for type: ' + getTypeName(crossRef.type.ref));\n        }\n        return buildCrossReference(ctx, crossRef, assignTerminal);\n    }\n    else if (isRuleCall(terminal) && isParserRule(terminal.rule.ref)) {\n        // The terminal is a data type rule here. Everything else will result in a validation error.\n        const rule = terminal.rule.ref;\n        const idx = ctx.subrule++;\n        return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), false, crossRef, args);\n    }\n    else if (isRuleCall(terminal) && isTerminalRule(terminal.rule.ref)) {\n        const idx = ctx.consume++;\n        const terminalRule = getToken(ctx, terminal.rule.ref.name);\n        return () => ctx.parser.consume(idx, terminalRule, crossRef);\n    }\n    else if (isKeyword(terminal)) {\n        const idx = ctx.consume++;\n        const keyword = getToken(ctx, terminal.value);\n        return () => ctx.parser.consume(idx, keyword, crossRef);\n    }\n    else {\n        throw new Error('Could not build cross reference parser');\n    }\n}\nfunction buildKeyword(ctx, keyword) {\n    const idx = ctx.consume++;\n    const token = ctx.tokens[keyword.value];\n    if (!token) {\n        throw new Error('Could not find token for keyword: ' + keyword.value);\n    }\n    return () => ctx.parser.consume(idx, token, keyword);\n}\nfunction wrap(ctx, guard, method, cardinality) {\n    const gate = guard && buildPredicate(guard);\n    if (!cardinality) {\n        if (gate) {\n            const idx = ctx.or++;\n            return (args) => ctx.parser.alternatives(idx, [\n                {\n                    ALT: () => method(args),\n                    GATE: () => gate(args)\n                },\n                {\n                    ALT: EMPTY_ALT(),\n                    GATE: () => !gate(args)\n                }\n            ]);\n        }\n        else {\n            return method;\n        }\n    }\n    if (cardinality === '*') {\n        const idx = ctx.many++;\n        return (args) => ctx.parser.many(idx, {\n            DEF: () => method(args),\n            GATE: gate ? () => gate(args) : undefined\n        });\n    }\n    else if (cardinality === '+') {\n        const idx = ctx.many++;\n        if (gate) {\n            const orIdx = ctx.or++;\n            // In the case of a guard condition for the `+` group\n            // We combine it with an empty alternative\n            // If the condition returns true, it needs to parse at least a single iteration\n            // If its false, it is not allowed to parse anything\n            return (args) => ctx.parser.alternatives(orIdx, [\n                {\n                    ALT: () => ctx.parser.atLeastOne(idx, {\n                        DEF: () => method(args)\n                    }),\n                    GATE: () => gate(args)\n                },\n                {\n                    ALT: EMPTY_ALT(),\n                    GATE: () => !gate(args)\n                }\n            ]);\n        }\n        else {\n            return (args) => ctx.parser.atLeastOne(idx, {\n                DEF: () => method(args),\n            });\n        }\n    }\n    else if (cardinality === '?') {\n        const idx = ctx.optional++;\n        return (args) => ctx.parser.optional(idx, {\n            DEF: () => method(args),\n            GATE: gate ? () => gate(args) : undefined\n        });\n    }\n    else {\n        assertUnreachable(cardinality);\n    }\n}\nfunction getRule(ctx, element) {\n    const name = getRuleName(ctx, element);\n    const rule = ctx.parser.getRule(name);\n    if (!rule)\n        throw new Error(`Rule \"${name}\" not found.\"`);\n    return rule;\n}\nfunction getRuleName(ctx, element) {\n    if (isParserRule(element)) {\n        return element.name;\n    }\n    else if (ctx.ruleNames.has(element)) {\n        return ctx.ruleNames.get(element);\n    }\n    else {\n        let item = element;\n        let parent = item.$container;\n        let ruleName = element.$type;\n        while (!isParserRule(parent)) {\n            if (isGroup(parent) || isAlternatives(parent) || isUnorderedGroup(parent)) {\n                const index = parent.elements.indexOf(item);\n                ruleName = index.toString() + ':' + ruleName;\n            }\n            item = parent;\n            parent = parent.$container;\n        }\n        const rule = parent;\n        ruleName = rule.name + ':' + ruleName;\n        ctx.ruleNames.set(element, ruleName);\n        return ruleName;\n    }\n}\nfunction getToken(ctx, name) {\n    const token = ctx.tokens[name];\n    if (!token)\n        throw new Error(`Token \"${name}\" not found.\"`);\n    return token;\n}\n//# sourceMappingURL=parser-builder-base.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { LangiumCompletionParser } from './langium-parser.js';\nimport { createParser } from './parser-builder-base.js';\nexport function createCompletionParser(services) {\n    const grammar = services.Grammar;\n    const lexer = services.parser.Lexer;\n    const parser = new LangiumCompletionParser(services);\n    createParser(grammar, parser, lexer.definition);\n    parser.finalize();\n    return parser;\n}\n//# sourceMappingURL=completion-parser-builder.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { LangiumParser } from './langium-parser.js';\nimport { createParser } from './parser-builder-base.js';\n/**\n * Create and finalize a Langium parser. The parser rules are derived from the grammar, which is\n * available at `services.Grammar`.\n */\nexport function createLangiumParser(services) {\n    const parser = prepareLangiumParser(services);\n    parser.finalize();\n    return parser;\n}\n/**\n * Create a Langium parser without finalizing it. This is used to extract more detailed error\n * information when the parser is initially validated.\n */\nexport function prepareLangiumParser(services) {\n    const grammar = services.Grammar;\n    const lexer = services.parser.Lexer;\n    const parser = new LangiumParser(services);\n    return createParser(grammar, parser, lexer.definition);\n}\n//# sourceMappingURL=langium-parser-builder.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Lexer } from 'chevrotain';\nimport { isKeyword, isParserRule, isTerminalRule } from '../languages/generated/ast.js';\nimport { streamAllContents } from '../utils/ast-utils.js';\nimport { getAllReachableRules, terminalRegex } from '../utils/grammar-utils.js';\nimport { getCaseInsensitivePattern, isWhitespace, partialMatches } from '../utils/regexp-utils.js';\nimport { stream } from '../utils/stream.js';\nexport class DefaultTokenBuilder {\n    constructor() {\n        /**\n         * The list of diagnostics stored during the lexing process of a single text.\n         */\n        this.diagnostics = [];\n    }\n    buildTokens(grammar, options) {\n        const reachableRules = stream(getAllReachableRules(grammar, false));\n        const terminalTokens = this.buildTerminalTokens(reachableRules);\n        const tokens = this.buildKeywordTokens(reachableRules, terminalTokens, options);\n        terminalTokens.forEach(terminalToken => {\n            const pattern = terminalToken.PATTERN;\n            if (typeof pattern === 'object' && pattern && 'test' in pattern && isWhitespace(pattern)) {\n                tokens.unshift(terminalToken);\n            }\n            else {\n                tokens.push(terminalToken);\n            }\n        });\n        // We don't need to add the EOF token explicitly.\n        // It is automatically available at the end of the token stream.\n        return tokens;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    flushLexingReport(text) {\n        return { diagnostics: this.popDiagnostics() };\n    }\n    popDiagnostics() {\n        const diagnostics = [...this.diagnostics];\n        this.diagnostics = [];\n        return diagnostics;\n    }\n    buildTerminalTokens(rules) {\n        return rules.filter(isTerminalRule).filter(e => !e.fragment)\n            .map(terminal => this.buildTerminalToken(terminal)).toArray();\n    }\n    buildTerminalToken(terminal) {\n        const regex = terminalRegex(terminal);\n        const pattern = this.requiresCustomPattern(regex) ? this.regexPatternFunction(regex) : regex;\n        const tokenType = {\n            name: terminal.name,\n            PATTERN: pattern,\n        };\n        if (typeof pattern === 'function') {\n            tokenType.LINE_BREAKS = true;\n        }\n        if (terminal.hidden) {\n            // Only skip tokens that are able to accept whitespace\n            tokenType.GROUP = isWhitespace(regex) ? Lexer.SKIPPED : 'hidden';\n        }\n        return tokenType;\n    }\n    requiresCustomPattern(regex) {\n        if (regex.flags.includes('u') || regex.flags.includes('s')) {\n            // Unicode and dotall regexes are not supported by Chevrotain.\n            return true;\n        }\n        else if (regex.source.includes('?<=') || regex.source.includes('?<!')) {\n            // Negative and positive lookbehind are not supported by Chevrotain yet.\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    regexPatternFunction(regex) {\n        const stickyRegex = new RegExp(regex, regex.flags + 'y');\n        return (text, offset) => {\n            stickyRegex.lastIndex = offset;\n            const execResult = stickyRegex.exec(text);\n            return execResult;\n        };\n    }\n    buildKeywordTokens(rules, terminalTokens, options) {\n        return rules\n            // We filter by parser rules, since keywords in terminal rules get transformed into regex and are not actual tokens\n            .filter(isParserRule)\n            .flatMap(rule => streamAllContents(rule).filter(isKeyword))\n            .distinct(e => e.value).toArray()\n            // Sort keywords by descending length\n            .sort((a, b) => b.value.length - a.value.length)\n            .map(keyword => this.buildKeywordToken(keyword, terminalTokens, Boolean(options === null || options === void 0 ? void 0 : options.caseInsensitive)));\n    }\n    buildKeywordToken(keyword, terminalTokens, caseInsensitive) {\n        const keywordPattern = this.buildKeywordPattern(keyword, caseInsensitive);\n        const tokenType = {\n            name: keyword.value,\n            PATTERN: keywordPattern,\n            LONGER_ALT: this.findLongerAlt(keyword, terminalTokens)\n        };\n        if (typeof keywordPattern === 'function') {\n            tokenType.LINE_BREAKS = true;\n        }\n        return tokenType;\n    }\n    buildKeywordPattern(keyword, caseInsensitive) {\n        return caseInsensitive ?\n            new RegExp(getCaseInsensitivePattern(keyword.value)) :\n            keyword.value;\n    }\n    findLongerAlt(keyword, terminalTokens) {\n        return terminalTokens.reduce((longerAlts, token) => {\n            const pattern = token === null || token === void 0 ? void 0 : token.PATTERN;\n            if ((pattern === null || pattern === void 0 ? void 0 : pattern.source) && partialMatches('^' + pattern.source + '$', keyword.value)) {\n                longerAlts.push(token);\n            }\n            return longerAlts;\n        }, []);\n    }\n}\n//# sourceMappingURL=token-builder.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { isCrossReference, isRuleCall } from '../languages/generated/ast.js';\nimport { getCrossReferenceTerminal, getRuleType } from '../utils/grammar-utils.js';\nexport class DefaultValueConverter {\n    convert(input, cstNode) {\n        let feature = cstNode.grammarSource;\n        if (isCrossReference(feature)) {\n            feature = getCrossReferenceTerminal(feature);\n        }\n        if (isRuleCall(feature)) {\n            const rule = feature.rule.ref;\n            if (!rule) {\n                throw new Error('This cst node was not parsed by a rule.');\n            }\n            return this.runConverter(rule, input, cstNode);\n        }\n        return input;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    runConverter(rule, input, cstNode) {\n        var _a;\n        switch (rule.name.toUpperCase()) {\n            case 'INT': return ValueConverter.convertInt(input);\n            case 'STRING': return ValueConverter.convertString(input);\n            case 'ID': return ValueConverter.convertID(input);\n        }\n        switch ((_a = getRuleType(rule)) === null || _a === void 0 ? void 0 : _a.toLowerCase()) {\n            case 'number': return ValueConverter.convertNumber(input);\n            case 'boolean': return ValueConverter.convertBoolean(input);\n            case 'bigint': return ValueConverter.convertBigint(input);\n            case 'date': return ValueConverter.convertDate(input);\n            default: return input;\n        }\n    }\n}\nexport var ValueConverter;\n(function (ValueConverter) {\n    function convertString(input) {\n        let result = '';\n        for (let i = 1; i < input.length - 1; i++) {\n            const c = input.charAt(i);\n            if (c === '\\\\') {\n                const c1 = input.charAt(++i);\n                result += convertEscapeCharacter(c1);\n            }\n            else {\n                result += c;\n            }\n        }\n        return result;\n    }\n    ValueConverter.convertString = convertString;\n    function convertEscapeCharacter(char) {\n        switch (char) {\n            case 'b': return '\\b';\n            case 'f': return '\\f';\n            case 'n': return '\\n';\n            case 'r': return '\\r';\n            case 't': return '\\t';\n            case 'v': return '\\v';\n            case '0': return '\\0';\n            default: return char;\n        }\n    }\n    function convertID(input) {\n        if (input.charAt(0) === '^') {\n            return input.substring(1);\n        }\n        else {\n            return input;\n        }\n    }\n    ValueConverter.convertID = convertID;\n    function convertInt(input) {\n        return parseInt(input);\n    }\n    ValueConverter.convertInt = convertInt;\n    function convertBigint(input) {\n        return BigInt(input);\n    }\n    ValueConverter.convertBigint = convertBigint;\n    function convertDate(input) {\n        return new Date(input);\n    }\n    ValueConverter.convertDate = convertDate;\n    function convertNumber(input) {\n        return Number(input);\n    }\n    ValueConverter.convertNumber = convertNumber;\n    function convertBoolean(input) {\n        return input.toLowerCase() === 'true';\n    }\n    ValueConverter.convertBoolean = convertBoolean;\n})(ValueConverter || (ValueConverter = {}));\n//# sourceMappingURL=value-converter.js.map","\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nlet _ral;\nfunction RAL() {\n    if (_ral === undefined) {\n        throw new Error(`No runtime abstraction layer installed`);\n    }\n    return _ral;\n}\n(function (RAL) {\n    function install(ral) {\n        if (ral === undefined) {\n            throw new Error(`No runtime abstraction layer provided`);\n        }\n        _ral = ral;\n    }\n    RAL.install = install;\n})(RAL || (RAL = {}));\nexports.default = RAL;\n","\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;\nfunction boolean(value) {\n    return value === true || value === false;\n}\nexports.boolean = boolean;\nfunction string(value) {\n    return typeof value === 'string' || value instanceof String;\n}\nexports.string = string;\nfunction number(value) {\n    return typeof value === 'number' || value instanceof Number;\n}\nexports.number = number;\nfunction error(value) {\n    return value instanceof Error;\n}\nexports.error = error;\nfunction func(value) {\n    return typeof value === 'function';\n}\nexports.func = func;\nfunction array(value) {\n    return Array.isArray(value);\n}\nexports.array = array;\nfunction stringArray(value) {\n    return array(value) && value.every(elem => string(elem));\n}\nexports.stringArray = stringArray;\n","\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Emitter = exports.Event = void 0;\nconst ral_1 = require(\"./ral\");\nvar Event;\n(function (Event) {\n    const _disposable = { dispose() { } };\n    Event.None = function () { return _disposable; };\n})(Event || (exports.Event = Event = {}));\nclass CallbackList {\n    add(callback, context = null, bucket) {\n        if (!this._callbacks) {\n            this._callbacks = [];\n            this._contexts = [];\n        }\n        this._callbacks.push(callback);\n        this._contexts.push(context);\n        if (Array.isArray(bucket)) {\n            bucket.push({ dispose: () => this.remove(callback, context) });\n        }\n    }\n    remove(callback, context = null) {\n        if (!this._callbacks) {\n            return;\n        }\n        let foundCallbackWithDifferentContext = false;\n        for (let i = 0, len = this._callbacks.length; i < len; i++) {\n            if (this._callbacks[i] === callback) {\n                if (this._contexts[i] === context) {\n                    // callback & context match => remove it\n                    this._callbacks.splice(i, 1);\n                    this._contexts.splice(i, 1);\n                    return;\n                }\n                else {\n                    foundCallbackWithDifferentContext = true;\n                }\n            }\n        }\n        if (foundCallbackWithDifferentContext) {\n            throw new Error('When adding a listener with a context, you should remove it with the same context');\n        }\n    }\n    invoke(...args) {\n        if (!this._callbacks) {\n            return [];\n        }\n        const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);\n        for (let i = 0, len = callbacks.length; i < len; i++) {\n            try {\n                ret.push(callbacks[i].apply(contexts[i], args));\n            }\n            catch (e) {\n                // eslint-disable-next-line no-console\n                (0, ral_1.default)().console.error(e);\n            }\n        }\n        return ret;\n    }\n    isEmpty() {\n        return !this._callbacks || this._callbacks.length === 0;\n    }\n    dispose() {\n        this._callbacks = undefined;\n        this._contexts = undefined;\n    }\n}\nclass Emitter {\n    constructor(_options) {\n        this._options = _options;\n    }\n    /**\n     * For the public to allow to subscribe\n     * to events from this Emitter\n     */\n    get event() {\n        if (!this._event) {\n            this._event = (listener, thisArgs, disposables) => {\n                if (!this._callbacks) {\n                    this._callbacks = new CallbackList();\n                }\n                if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {\n                    this._options.onFirstListenerAdd(this);\n                }\n                this._callbacks.add(listener, thisArgs);\n                const result = {\n                    dispose: () => {\n                        if (!this._callbacks) {\n                            // disposable is disposed after emitter is disposed.\n                            return;\n                        }\n                        this._callbacks.remove(listener, thisArgs);\n                        result.dispose = Emitter._noop;\n                        if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {\n                            this._options.onLastListenerRemove(this);\n                        }\n                    }\n                };\n                if (Array.isArray(disposables)) {\n                    disposables.push(result);\n                }\n                return result;\n            };\n        }\n        return this._event;\n    }\n    /**\n     * To be kept private to fire an event to\n     * subscribers\n     */\n    fire(event) {\n        if (this._callbacks) {\n            this._callbacks.invoke.call(this._callbacks, event);\n        }\n    }\n    dispose() {\n        if (this._callbacks) {\n            this._callbacks.dispose();\n            this._callbacks = undefined;\n        }\n    }\n}\nexports.Emitter = Emitter;\nEmitter._noop = function () { };\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancellationTokenSource = exports.CancellationToken = void 0;\nconst ral_1 = require(\"./ral\");\nconst Is = require(\"./is\");\nconst events_1 = require(\"./events\");\nvar CancellationToken;\n(function (CancellationToken) {\n    CancellationToken.None = Object.freeze({\n        isCancellationRequested: false,\n        onCancellationRequested: events_1.Event.None\n    });\n    CancellationToken.Cancelled = Object.freeze({\n        isCancellationRequested: true,\n        onCancellationRequested: events_1.Event.None\n    });\n    function is(value) {\n        const candidate = value;\n        return candidate && (candidate === CancellationToken.None\n            || candidate === CancellationToken.Cancelled\n            || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));\n    }\n    CancellationToken.is = is;\n})(CancellationToken || (exports.CancellationToken = CancellationToken = {}));\nconst shortcutEvent = Object.freeze(function (callback, context) {\n    const handle = (0, ral_1.default)().timer.setTimeout(callback.bind(context), 0);\n    return { dispose() { handle.dispose(); } };\n});\nclass MutableToken {\n    constructor() {\n        this._isCancelled = false;\n    }\n    cancel() {\n        if (!this._isCancelled) {\n            this._isCancelled = true;\n            if (this._emitter) {\n                this._emitter.fire(undefined);\n                this.dispose();\n            }\n        }\n    }\n    get isCancellationRequested() {\n        return this._isCancelled;\n    }\n    get onCancellationRequested() {\n        if (this._isCancelled) {\n            return shortcutEvent;\n        }\n        if (!this._emitter) {\n            this._emitter = new events_1.Emitter();\n        }\n        return this._emitter.event;\n    }\n    dispose() {\n        if (this._emitter) {\n            this._emitter.dispose();\n            this._emitter = undefined;\n        }\n    }\n}\nclass CancellationTokenSource {\n    get token() {\n        if (!this._token) {\n            // be lazy and create the token only when\n            // actually needed\n            this._token = new MutableToken();\n        }\n        return this._token;\n    }\n    cancel() {\n        if (!this._token) {\n            // save an object by returning the default\n            // cancelled token when cancellation happens\n            // before someone asks for the token\n            this._token = CancellationToken.Cancelled;\n        }\n        else {\n            this._token.cancel();\n        }\n    }\n    dispose() {\n        if (!this._token) {\n            // ensure to initialize with an empty token if we had none\n            this._token = CancellationToken.None;\n        }\n        else if (this._token instanceof MutableToken) {\n            // actually dispose\n            this._token.dispose();\n        }\n    }\n}\nexports.CancellationTokenSource = CancellationTokenSource;\n","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken, CancellationTokenSource } from '../utils/cancellation.js';\n/**\n * Delays the execution of the current code to the next tick of the event loop.\n * Don't call this method directly in a tight loop to prevent too many promises from being created.\n */\nexport function delayNextTick() {\n    return new Promise(resolve => {\n        // In case we are running in a non-node environment, `setImmediate` isn't available.\n        // Using `setTimeout` of the browser API accomplishes the same result.\n        if (typeof setImmediate === 'undefined') {\n            setTimeout(resolve, 0);\n        }\n        else {\n            setImmediate(resolve);\n        }\n    });\n}\nlet lastTick = 0;\nlet globalInterruptionPeriod = 10;\n/**\n * Reset the global interruption period and create a cancellation token source.\n */\nexport function startCancelableOperation() {\n    lastTick = performance.now();\n    return new CancellationTokenSource();\n}\n/**\n * Change the period duration for `interruptAndCheck` to the given number of milliseconds.\n * The default value is 10ms.\n */\nexport function setInterruptionPeriod(period) {\n    globalInterruptionPeriod = period;\n}\n/**\n * This symbol may be thrown in an asynchronous context by any Langium service that receives\n * a `CancellationToken`. This means that the promise returned by such a service is rejected with\n * this symbol as rejection reason.\n */\nexport const OperationCancelled = Symbol('OperationCancelled');\n/**\n * Use this in a `catch` block to check whether the thrown object indicates that the operation\n * has been cancelled.\n */\nexport function isOperationCancelled(err) {\n    return err === OperationCancelled;\n}\n/**\n * This function does two things:\n *  1. Check the elapsed time since the last call to this function or to `startCancelableOperation`. If the predefined\n *     period (configured with `setInterruptionPeriod`) is exceeded, execution is delayed with `delayNextTick`.\n *  2. If the predefined period is not met yet or execution is resumed after an interruption, the given cancellation\n *     token is checked, and if cancellation is requested, `OperationCanceled` is thrown.\n *\n * All services in Langium that receive a `CancellationToken` may potentially call this function, so the\n * `CancellationToken` must be caught (with an `async` try-catch block or a `catch` callback attached to\n * the promise) to avoid that event being exposed as an error.\n */\nexport async function interruptAndCheck(token) {\n    if (token === CancellationToken.None) {\n        // Early exit in case cancellation was disabled by the caller\n        return;\n    }\n    const current = performance.now();\n    if (current - lastTick >= globalInterruptionPeriod) {\n        lastTick = current;\n        await delayNextTick();\n        // prevent calling delayNextTick every iteration of loop\n        // where delayNextTick takes up the majority or all of the\n        // globalInterruptionPeriod itself\n        lastTick = performance.now();\n    }\n    if (token.isCancellationRequested) {\n        throw OperationCancelled;\n    }\n}\n/**\n * Simple implementation of the deferred pattern.\n * An object that exposes a promise and functions to resolve and reject it.\n */\nexport class Deferred {\n    constructor() {\n        this.promise = new Promise((resolve, reject) => {\n            this.resolve = (arg) => {\n                resolve(arg);\n                return this;\n            };\n            this.reject = (err) => {\n                reject(err);\n                return this;\n            };\n        });\n    }\n}\n//# sourceMappingURL=promise-utils.js.map","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nclass FullTextDocument {\n    constructor(uri, languageId, version, content) {\n        this._uri = uri;\n        this._languageId = languageId;\n        this._version = version;\n        this._content = content;\n        this._lineOffsets = undefined;\n    }\n    get uri() {\n        return this._uri;\n    }\n    get languageId() {\n        return this._languageId;\n    }\n    get version() {\n        return this._version;\n    }\n    getText(range) {\n        if (range) {\n            const start = this.offsetAt(range.start);\n            const end = this.offsetAt(range.end);\n            return this._content.substring(start, end);\n        }\n        return this._content;\n    }\n    update(changes, version) {\n        for (const change of changes) {\n            if (FullTextDocument.isIncremental(change)) {\n                // makes sure start is before end\n                const range = getWellformedRange(change.range);\n                // update content\n                const startOffset = this.offsetAt(range.start);\n                const endOffset = this.offsetAt(range.end);\n                this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n                // update the offsets\n                const startLine = Math.max(range.start.line, 0);\n                const endLine = Math.max(range.end.line, 0);\n                let lineOffsets = this._lineOffsets;\n                const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n                if (endLine - startLine === addedLineOffsets.length) {\n                    for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n                        lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n                    }\n                }\n                else {\n                    if (addedLineOffsets.length < 10000) {\n                        lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n                    }\n                    else { // avoid too many arguments for splice\n                        this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n                    }\n                }\n                const diff = change.text.length - (endOffset - startOffset);\n                if (diff !== 0) {\n                    for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n                        lineOffsets[i] = lineOffsets[i] + diff;\n                    }\n                }\n            }\n            else if (FullTextDocument.isFull(change)) {\n                this._content = change.text;\n                this._lineOffsets = undefined;\n            }\n            else {\n                throw new Error('Unknown change event received');\n            }\n        }\n        this._version = version;\n    }\n    getLineOffsets() {\n        if (this._lineOffsets === undefined) {\n            this._lineOffsets = computeLineOffsets(this._content, true);\n        }\n        return this._lineOffsets;\n    }\n    positionAt(offset) {\n        offset = Math.max(Math.min(offset, this._content.length), 0);\n        const lineOffsets = this.getLineOffsets();\n        let low = 0, high = lineOffsets.length;\n        if (high === 0) {\n            return { line: 0, character: offset };\n        }\n        while (low < high) {\n            const mid = Math.floor((low + high) / 2);\n            if (lineOffsets[mid] > offset) {\n                high = mid;\n            }\n            else {\n                low = mid + 1;\n            }\n        }\n        // low is the least x for which the line offset is larger than the current offset\n        // or array.length if no line offset is larger than the current offset\n        const line = low - 1;\n        offset = this.ensureBeforeEOL(offset, lineOffsets[line]);\n        return { line, character: offset - lineOffsets[line] };\n    }\n    offsetAt(position) {\n        const lineOffsets = this.getLineOffsets();\n        if (position.line >= lineOffsets.length) {\n            return this._content.length;\n        }\n        else if (position.line < 0) {\n            return 0;\n        }\n        const lineOffset = lineOffsets[position.line];\n        if (position.character <= 0) {\n            return lineOffset;\n        }\n        const nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n        const offset = Math.min(lineOffset + position.character, nextLineOffset);\n        return this.ensureBeforeEOL(offset, lineOffset);\n    }\n    ensureBeforeEOL(offset, lineOffset) {\n        while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {\n            offset--;\n        }\n        return offset;\n    }\n    get lineCount() {\n        return this.getLineOffsets().length;\n    }\n    static isIncremental(event) {\n        const candidate = event;\n        return candidate !== undefined && candidate !== null &&\n            typeof candidate.text === 'string' && candidate.range !== undefined &&\n            (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n    }\n    static isFull(event) {\n        const candidate = event;\n        return candidate !== undefined && candidate !== null &&\n            typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n    }\n}\nexport var TextDocument;\n(function (TextDocument) {\n    /**\n     * Creates a new text document.\n     *\n     * @param uri The document's uri.\n     * @param languageId  The document's language Id.\n     * @param version The document's initial version number.\n     * @param content The document's content.\n     */\n    function create(uri, languageId, version, content) {\n        return new FullTextDocument(uri, languageId, version, content);\n    }\n    TextDocument.create = create;\n    /**\n     * Updates a TextDocument by modifying its content.\n     *\n     * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n     * @param changes the changes to apply to the document.\n     * @param version the changes version for the document.\n     * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n     *\n     */\n    function update(document, changes, version) {\n        if (document instanceof FullTextDocument) {\n            document.update(changes, version);\n            return document;\n        }\n        else {\n            throw new Error('TextDocument.update: document must be created by TextDocument.create');\n        }\n    }\n    TextDocument.update = update;\n    function applyEdits(document, edits) {\n        const text = document.getText();\n        const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n            const diff = a.range.start.line - b.range.start.line;\n            if (diff === 0) {\n                return a.range.start.character - b.range.start.character;\n            }\n            return diff;\n        });\n        let lastModifiedOffset = 0;\n        const spans = [];\n        for (const e of sortedEdits) {\n            const startOffset = document.offsetAt(e.range.start);\n            if (startOffset < lastModifiedOffset) {\n                throw new Error('Overlapping edit');\n            }\n            else if (startOffset > lastModifiedOffset) {\n                spans.push(text.substring(lastModifiedOffset, startOffset));\n            }\n            if (e.newText.length) {\n                spans.push(e.newText);\n            }\n            lastModifiedOffset = document.offsetAt(e.range.end);\n        }\n        spans.push(text.substr(lastModifiedOffset));\n        return spans.join('');\n    }\n    TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n    if (data.length <= 1) {\n        // sorted\n        return data;\n    }\n    const p = (data.length / 2) | 0;\n    const left = data.slice(0, p);\n    const right = data.slice(p);\n    mergeSort(left, compare);\n    mergeSort(right, compare);\n    let leftIdx = 0;\n    let rightIdx = 0;\n    let i = 0;\n    while (leftIdx < left.length && rightIdx < right.length) {\n        const ret = compare(left[leftIdx], right[rightIdx]);\n        if (ret <= 0) {\n            // smaller_equal -> take left to preserve order\n            data[i++] = left[leftIdx++];\n        }\n        else {\n            // greater -> take right\n            data[i++] = right[rightIdx++];\n        }\n    }\n    while (leftIdx < left.length) {\n        data[i++] = left[leftIdx++];\n    }\n    while (rightIdx < right.length) {\n        data[i++] = right[rightIdx++];\n    }\n    return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n    const result = isAtLineStart ? [textOffset] : [];\n    for (let i = 0; i < text.length; i++) {\n        const ch = text.charCodeAt(i);\n        if (isEOL(ch)) {\n            if (ch === 13 /* CharCode.CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n                i++;\n            }\n            result.push(textOffset + i + 1);\n        }\n    }\n    return result;\n}\nfunction isEOL(char) {\n    return char === 13 /* CharCode.CarriageReturn */ || char === 10 /* CharCode.LineFeed */;\n}\nfunction getWellformedRange(range) {\n    const start = range.start;\n    const end = range.end;\n    if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n        return { start: end, end: start };\n    }\n    return range;\n}\nfunction getWellformedEdit(textEdit) {\n    const range = getWellformedRange(textEdit.range);\n    if (range !== textEdit.range) {\n        return { newText: textEdit.newText, range };\n    }\n    return textEdit;\n}\n","var LIB;(()=>{\"use strict\";var t={470:t=>{function e(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var r,n=\"\",i=0,o=-1,s=0,h=0;h<=t.length;++h){if(h<t.length)r=t.charCodeAt(h);else{if(47===r)break;r=47}if(47===r){if(o===h-1||1===s);else if(o!==h-1&&2===s){if(n.length<2||2!==i||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){var a=n.lastIndexOf(\"/\");if(a!==n.length-1){-1===a?(n=\"\",i=0):i=(n=n.slice(0,a)).length-1-n.lastIndexOf(\"/\"),o=h,s=0;continue}}else if(2===n.length||1===n.length){n=\"\",i=0,o=h,s=0;continue}e&&(n.length>0?n+=\"/..\":n=\"..\",i=2)}else n.length>0?n+=\"/\"+t.slice(o+1,h):n=t.slice(o+1,h),i=h-o-1;o=h,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var t,n=\"\",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var s;o>=0?s=arguments[o]:(void 0===t&&(t=process.cwd()),s=t),e(s),0!==s.length&&(n=s+\"/\"+n,i=47===s.charCodeAt(0))}return n=r(n,!i),i?n.length>0?\"/\"+n:\"/\":n.length>0?n:\".\"},normalize:function(t){if(e(t),0===t.length)return\".\";var n=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t=\".\"),t.length>0&&i&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,r=0;r<arguments.length;++r){var i=arguments[r];e(i),i.length>0&&(void 0===t?t=i:t+=\"/\"+i)}return void 0===t?\".\":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return\"\";if((t=n.resolve(t))===(r=n.resolve(r)))return\"\";for(var i=1;i<t.length&&47===t.charCodeAt(i);++i);for(var o=t.length,s=o-i,h=1;h<r.length&&47===r.charCodeAt(h);++h);for(var a=r.length-h,c=s<a?s:a,f=-1,u=0;u<=c;++u){if(u===c){if(a>c){if(47===r.charCodeAt(h+u))return r.slice(h+u+1);if(0===u)return r.slice(h+u)}else s>c&&(47===t.charCodeAt(i+u)?f=u:0===u&&(f=0));break}var l=t.charCodeAt(i+u);if(l!==r.charCodeAt(h+u))break;47===l&&(f=u)}var g=\"\";for(u=i+f+1;u<=o;++u)u!==o&&47!==t.charCodeAt(u)||(0===g.length?g+=\"..\":g+=\"/..\");return g.length>0?g+r.slice(h+f):(h+=f,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return\".\";for(var r=t.charCodeAt(0),n=47===r,i=-1,o=!0,s=t.length-1;s>=1;--s)if(47===(r=t.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?\"/\":\".\":n&&1===i?\"//\":t.slice(0,i)},basename:function(t,r){if(void 0!==r&&\"string\"!=typeof r)throw new TypeError('\"ext\" argument must be a string');e(t);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return\"\";var h=r.length-1,a=-1;for(n=t.length-1;n>=0;--n){var c=t.charCodeAt(n);if(47===c){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),h>=0&&(c===r.charCodeAt(h)?-1==--h&&(o=n):(h=-1,o=a))}return i===o?o=a:-1===o&&(o=t.length),t.slice(i,o)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?\"\":t.slice(i,o)},extname:function(t){e(t);for(var r=-1,n=0,i=-1,o=!0,s=0,h=t.length-1;h>=0;--h){var a=t.charCodeAt(h);if(47!==a)-1===i&&(o=!1,i=h+1),46===a?-1===r?r=h:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=h+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?\"\":t.slice(r,i)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||\"\")+(e.ext||\"\");return r?r===e.root?r+n:r+\"/\"+n:n}(0,t)},parse:function(t){e(t);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return r;var n,i=t.charCodeAt(0),o=47===i;o?(r.root=\"/\",n=1):n=0;for(var s=-1,h=0,a=-1,c=!0,f=t.length-1,u=0;f>=n;--f)if(47!==(i=t.charCodeAt(f)))-1===a&&(c=!1,a=f+1),46===i?-1===s?s=f:1!==u&&(u=1):-1!==s&&(u=-1);else if(!c){h=f+1;break}return-1===s||-1===a||0===u||1===u&&s===a-1&&s===h+1?-1!==a&&(r.base=r.name=0===h&&o?t.slice(1,a):t.slice(h,a)):(0===h&&o?(r.name=t.slice(1,s),r.base=t.slice(1,a)):(r.name=t.slice(h,s),r.base=t.slice(h,a)),r.ext=t.slice(s,a)),h>0?r.dir=t.slice(0,h-1):o&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};n.posix=n,t.exports=n}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})};var n={};(()=>{let t;if(r.r(n),r.d(n,{URI:()=>f,Utils:()=>P}),\"object\"==typeof process)t=\"win32\"===process.platform;else if(\"object\"==typeof navigator){let e=navigator.userAgent;t=e.indexOf(\"Windows\")>=0}const e=/^\\w[\\w\\d+.-]*$/,i=/^\\//,o=/^\\/\\//;function s(t,r){if(!t.scheme&&r)throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${t.authority}\", path: \"${t.path}\", query: \"${t.query}\", fragment: \"${t.fragment}\"}`);if(t.scheme&&!e.test(t.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(t.path)if(t.authority){if(!i.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(o.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}const h=\"\",a=\"/\",c=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;class f{static isUri(t){return t instanceof f||!!t&&\"string\"==typeof t.authority&&\"string\"==typeof t.fragment&&\"string\"==typeof t.path&&\"string\"==typeof t.query&&\"string\"==typeof t.scheme&&\"string\"==typeof t.fsPath&&\"function\"==typeof t.with&&\"function\"==typeof t.toString}scheme;authority;path;query;fragment;constructor(t,e,r,n,i,o=!1){\"object\"==typeof t?(this.scheme=t.scheme||h,this.authority=t.authority||h,this.path=t.path||h,this.query=t.query||h,this.fragment=t.fragment||h):(this.scheme=function(t,e){return t||e?t:\"file\"}(t,o),this.authority=e||h,this.path=function(t,e){switch(t){case\"https\":case\"http\":case\"file\":e?e[0]!==a&&(e=a+e):e=a}return e}(this.scheme,r||h),this.query=n||h,this.fragment=i||h,s(this,o))}get fsPath(){return m(this,!1)}with(t){if(!t)return this;let{scheme:e,authority:r,path:n,query:i,fragment:o}=t;return void 0===e?e=this.scheme:null===e&&(e=h),void 0===r?r=this.authority:null===r&&(r=h),void 0===n?n=this.path:null===n&&(n=h),void 0===i?i=this.query:null===i&&(i=h),void 0===o?o=this.fragment:null===o&&(o=h),e===this.scheme&&r===this.authority&&n===this.path&&i===this.query&&o===this.fragment?this:new l(e,r,n,i,o)}static parse(t,e=!1){const r=c.exec(t);return r?new l(r[2]||h,C(r[4]||h),C(r[5]||h),C(r[7]||h),C(r[9]||h),e):new l(h,h,h,h,h)}static file(e){let r=h;if(t&&(e=e.replace(/\\\\/g,a)),e[0]===a&&e[1]===a){const t=e.indexOf(a,2);-1===t?(r=e.substring(2),e=a):(r=e.substring(2,t),e=e.substring(t)||a)}return new l(\"file\",r,e,h,h)}static from(t){const e=new l(t.scheme,t.authority,t.path,t.query,t.fragment);return s(e,!0),e}toString(t=!1){return y(this,t)}toJSON(){return this}static revive(t){if(t){if(t instanceof f)return t;{const e=new l(t);return e._formatted=t.external,e._fsPath=t._sep===u?t.fsPath:null,e}}return t}}const u=t?1:void 0;class l extends f{_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=m(this,!1)),this._fsPath}toString(t=!1){return t?y(this,!0):(this._formatted||(this._formatted=y(this,!1)),this._formatted)}toJSON(){const t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=u),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t}}const g={58:\"%3A\",47:\"%2F\",63:\"%3F\",35:\"%23\",91:\"%5B\",93:\"%5D\",64:\"%40\",33:\"%21\",36:\"%24\",38:\"%26\",39:\"%27\",40:\"%28\",41:\"%29\",42:\"%2A\",43:\"%2B\",44:\"%2C\",59:\"%3B\",61:\"%3D\",32:\"%20\"};function d(t,e,r){let n,i=-1;for(let o=0;o<t.length;o++){const s=t.charCodeAt(o);if(s>=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||e&&47===s||r&&91===s||r&&93===s||r&&58===s)-1!==i&&(n+=encodeURIComponent(t.substring(i,o)),i=-1),void 0!==n&&(n+=t.charAt(o));else{void 0===n&&(n=t.substr(0,o));const e=g[s];void 0!==e?(-1!==i&&(n+=encodeURIComponent(t.substring(i,o)),i=-1),n+=e):-1===i&&(i=o)}}return-1!==i&&(n+=encodeURIComponent(t.substring(i))),void 0!==n?n:t}function p(t){let e;for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);35===n||63===n?(void 0===e&&(e=t.substr(0,r)),e+=g[n]):void 0!==e&&(e+=t[r])}return void 0!==e?e:t}function m(e,r){let n;return n=e.authority&&e.path.length>1&&\"file\"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?r?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,t&&(n=n.replace(/\\//g,\"\\\\\")),n}function y(t,e){const r=e?p:d;let n=\"\",{scheme:i,authority:o,path:s,query:h,fragment:c}=t;if(i&&(n+=i,n+=\":\"),(o||\"file\"===i)&&(n+=a,n+=a),o){let t=o.indexOf(\"@\");if(-1!==t){const e=o.substr(0,t);o=o.substr(t+1),t=e.lastIndexOf(\":\"),-1===t?n+=r(e,!1,!1):(n+=r(e.substr(0,t),!1,!1),n+=\":\",n+=r(e.substr(t+1),!1,!0)),n+=\"@\"}o=o.toLowerCase(),t=o.lastIndexOf(\":\"),-1===t?n+=r(o,!1,!0):(n+=r(o.substr(0,t),!1,!0),n+=o.substr(t))}if(s){if(s.length>=3&&47===s.charCodeAt(0)&&58===s.charCodeAt(2)){const t=s.charCodeAt(1);t>=65&&t<=90&&(s=`/${String.fromCharCode(t+32)}:${s.substr(3)}`)}else if(s.length>=2&&58===s.charCodeAt(1)){const t=s.charCodeAt(0);t>=65&&t<=90&&(s=`${String.fromCharCode(t+32)}:${s.substr(2)}`)}n+=r(s,!0,!1)}return h&&(n+=\"?\",n+=r(h,!1,!1)),c&&(n+=\"#\",n+=e?c:d(c,!1,!1)),n}function v(t){try{return decodeURIComponent(t)}catch{return t.length>3?t.substr(0,3)+v(t.substr(3)):t}}const b=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function C(t){return t.match(b)?t.replace(b,(t=>v(t))):t}var A=r(470);const w=A.posix||A,x=\"/\";var P;!function(t){t.joinPath=function(t,...e){return t.with({path:w.join(t.path,...e)})},t.resolvePath=function(t,...e){let r=t.path,n=!1;r[0]!==x&&(r=x+r,n=!0);let i=w.resolve(r,...e);return n&&i[0]===x&&!t.authority&&(i=i.substring(1)),t.with({path:i})},t.dirname=function(t){if(0===t.path.length||t.path===x)return t;let e=w.dirname(t.path);return 1===e.length&&46===e.charCodeAt(0)&&(e=\"\"),t.with({path:e})},t.basename=function(t){return w.basename(t.path)},t.extname=function(t){return w.extname(t.path)}}(P||(P={}))})(),LIB=n})();export const{URI,Utils}=LIB;\n//# sourceMappingURL=index.mjs.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { URI, Utils } from 'vscode-uri';\nexport { URI };\nexport var UriUtils;\n(function (UriUtils) {\n    UriUtils.basename = Utils.basename;\n    UriUtils.dirname = Utils.dirname;\n    UriUtils.extname = Utils.extname;\n    UriUtils.joinPath = Utils.joinPath;\n    UriUtils.resolvePath = Utils.resolvePath;\n    function equals(a, b) {\n        return (a === null || a === void 0 ? void 0 : a.toString()) === (b === null || b === void 0 ? void 0 : b.toString());\n    }\n    UriUtils.equals = equals;\n    function relative(from, to) {\n        const fromPath = typeof from === 'string' ? from : from.path;\n        const toPath = typeof to === 'string' ? to : to.path;\n        const fromParts = fromPath.split('/').filter(e => e.length > 0);\n        const toParts = toPath.split('/').filter(e => e.length > 0);\n        let i = 0;\n        for (; i < fromParts.length; i++) {\n            if (fromParts[i] !== toParts[i]) {\n                break;\n            }\n        }\n        const backPart = '../'.repeat(fromParts.length - i);\n        const toPart = toParts.slice(i).join('/');\n        return backPart + toPart;\n    }\n    UriUtils.relative = relative;\n    function normalize(uri) {\n        return URI.parse(uri.toString()).toString();\n    }\n    UriUtils.normalize = normalize;\n})(UriUtils || (UriUtils = {}));\n//# sourceMappingURL=uri-utils.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\n/**\n * Re-export 'TextDocument' from 'vscode-languageserver-textdocument' for convenience,\n *  including both type _and_ symbol (namespace), as we here and there also refer to the symbol,\n *  the overhead is very small, just a few kilobytes.\n * Everything else of that package (at the time contributing) is also defined\n *  in 'vscode-languageserver-protocol' or 'vscode-languageserver-types'.\n */\nexport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { TextDocument } from './documents.js';\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { stream } from '../utils/stream.js';\nimport { URI } from '../utils/uri-utils.js';\n/**\n * A document is subject to several phases that are run in predefined order. Any state value implies that\n * smaller state values are finished as well.\n */\nexport var DocumentState;\n(function (DocumentState) {\n    /**\n     * The text content has changed and needs to be parsed again. The AST held by this outdated\n     * document instance is no longer valid.\n     */\n    DocumentState[DocumentState[\"Changed\"] = 0] = \"Changed\";\n    /**\n     * An AST has been created from the text content. The document structure can be traversed,\n     * but cross-references cannot be resolved yet. If necessary, the structure can be manipulated\n     * at this stage as a preprocessing step.\n     */\n    DocumentState[DocumentState[\"Parsed\"] = 1] = \"Parsed\";\n    /**\n     * The `IndexManager` service has processed AST nodes of this document. This means the\n     * exported symbols are available in the global scope and can be resolved from other documents.\n     */\n    DocumentState[DocumentState[\"IndexedContent\"] = 2] = \"IndexedContent\";\n    /**\n     * The `ScopeComputation` service has processed this document. This means the local symbols\n     * are stored in a MultiMap so they can be looked up by the `ScopeProvider` service.\n     * Once a document has reached this state, you may follow every reference - it will lazily\n     * resolve its `ref` property and yield either the target AST node or `undefined` in case\n     * the target is not in scope.\n     */\n    DocumentState[DocumentState[\"ComputedScopes\"] = 3] = \"ComputedScopes\";\n    /**\n     * The `Linker` service has processed this document. All outgoing references have been\n     * resolved or marked as erroneous.\n     */\n    DocumentState[DocumentState[\"Linked\"] = 4] = \"Linked\";\n    /**\n     * The `IndexManager` service has processed AST node references of this document. This is\n     * necessary to determine which documents are affected by a change in one of the workspace\n     * documents.\n     */\n    DocumentState[DocumentState[\"IndexedReferences\"] = 5] = \"IndexedReferences\";\n    /**\n     * The `DocumentValidator` service has processed this document. The language server listens\n     * to the results of this phase and sends diagnostics to the client.\n     */\n    DocumentState[DocumentState[\"Validated\"] = 6] = \"Validated\";\n})(DocumentState || (DocumentState = {}));\nexport class DefaultLangiumDocumentFactory {\n    constructor(services) {\n        this.serviceRegistry = services.ServiceRegistry;\n        this.textDocuments = services.workspace.TextDocuments;\n        this.fileSystemProvider = services.workspace.FileSystemProvider;\n    }\n    async fromUri(uri, cancellationToken = CancellationToken.None) {\n        const content = await this.fileSystemProvider.readFile(uri);\n        return this.createAsync(uri, content, cancellationToken);\n    }\n    fromTextDocument(textDocument, uri, token) {\n        uri = uri !== null && uri !== void 0 ? uri : URI.parse(textDocument.uri);\n        if (CancellationToken.is(token)) {\n            return this.createAsync(uri, textDocument, token);\n        }\n        else {\n            return this.create(uri, textDocument, token);\n        }\n    }\n    fromString(text, uri, token) {\n        if (CancellationToken.is(token)) {\n            return this.createAsync(uri, text, token);\n        }\n        else {\n            return this.create(uri, text, token);\n        }\n    }\n    fromModel(model, uri) {\n        return this.create(uri, { $model: model });\n    }\n    create(uri, content, options) {\n        if (typeof content === 'string') {\n            const parseResult = this.parse(uri, content, options);\n            return this.createLangiumDocument(parseResult, uri, undefined, content);\n        }\n        else if ('$model' in content) {\n            const parseResult = { value: content.$model, parserErrors: [], lexerErrors: [] };\n            return this.createLangiumDocument(parseResult, uri);\n        }\n        else {\n            const parseResult = this.parse(uri, content.getText(), options);\n            return this.createLangiumDocument(parseResult, uri, content);\n        }\n    }\n    async createAsync(uri, content, cancelToken) {\n        if (typeof content === 'string') {\n            const parseResult = await this.parseAsync(uri, content, cancelToken);\n            return this.createLangiumDocument(parseResult, uri, undefined, content);\n        }\n        else {\n            const parseResult = await this.parseAsync(uri, content.getText(), cancelToken);\n            return this.createLangiumDocument(parseResult, uri, content);\n        }\n    }\n    /**\n     * Create a LangiumDocument from a given parse result.\n     *\n     * A TextDocument is created on demand if it is not provided as argument here. Usually this\n     * should not be necessary because the main purpose of the TextDocument is to convert between\n     * text ranges and offsets, which is done solely in LSP request handling.\n     *\n     * With the introduction of {@link update} below this method is supposed to be mainly called\n     * during workspace initialization and on addition/recognition of new files, while changes in\n     * existing documents are processed via {@link update}.\n     */\n    createLangiumDocument(parseResult, uri, textDocument, text) {\n        let document;\n        if (textDocument) {\n            document = {\n                parseResult,\n                uri,\n                state: DocumentState.Parsed,\n                references: [],\n                textDocument\n            };\n        }\n        else {\n            const textDocumentGetter = this.createTextDocumentGetter(uri, text);\n            document = {\n                parseResult,\n                uri,\n                state: DocumentState.Parsed,\n                references: [],\n                get textDocument() {\n                    return textDocumentGetter();\n                }\n            };\n        }\n        parseResult.value.$document = document;\n        return document;\n    }\n    async update(document, cancellationToken) {\n        var _a, _b;\n        // The CST full text property contains the original text that was used to create the AST.\n        const oldText = (_a = document.parseResult.value.$cstNode) === null || _a === void 0 ? void 0 : _a.root.fullText;\n        const textDocument = (_b = this.textDocuments) === null || _b === void 0 ? void 0 : _b.get(document.uri.toString());\n        const text = textDocument ? textDocument.getText() : await this.fileSystemProvider.readFile(document.uri);\n        if (textDocument) {\n            Object.defineProperty(document, 'textDocument', {\n                value: textDocument\n            });\n        }\n        else {\n            const textDocumentGetter = this.createTextDocumentGetter(document.uri, text);\n            Object.defineProperty(document, 'textDocument', {\n                get: textDocumentGetter\n            });\n        }\n        // Some of these documents can be pretty large, so parsing them again can be quite expensive.\n        // Therefore, we only parse if the text has actually changed.\n        if (oldText !== text) {\n            document.parseResult = await this.parseAsync(document.uri, text, cancellationToken);\n            document.parseResult.value.$document = document;\n        }\n        document.state = DocumentState.Parsed;\n        return document;\n    }\n    parse(uri, text, options) {\n        const services = this.serviceRegistry.getServices(uri);\n        return services.parser.LangiumParser.parse(text, options);\n    }\n    parseAsync(uri, text, cancellationToken) {\n        const services = this.serviceRegistry.getServices(uri);\n        return services.parser.AsyncParser.parse(text, cancellationToken);\n    }\n    createTextDocumentGetter(uri, text) {\n        const serviceRegistry = this.serviceRegistry;\n        let textDoc = undefined;\n        return () => {\n            return textDoc !== null && textDoc !== void 0 ? textDoc : (textDoc = TextDocument.create(uri.toString(), serviceRegistry.getServices(uri).LanguageMetaData.languageId, 0, text !== null && text !== void 0 ? text : ''));\n        };\n    }\n}\nexport class DefaultLangiumDocuments {\n    constructor(services) {\n        this.documentMap = new Map();\n        this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;\n        this.serviceRegistry = services.ServiceRegistry;\n    }\n    get all() {\n        return stream(this.documentMap.values());\n    }\n    addDocument(document) {\n        const uriString = document.uri.toString();\n        if (this.documentMap.has(uriString)) {\n            throw new Error(`A document with the URI '${uriString}' is already present.`);\n        }\n        this.documentMap.set(uriString, document);\n    }\n    getDocument(uri) {\n        const uriString = uri.toString();\n        return this.documentMap.get(uriString);\n    }\n    async getOrCreateDocument(uri, cancellationToken) {\n        let document = this.getDocument(uri);\n        if (document) {\n            return document;\n        }\n        document = await this.langiumDocumentFactory.fromUri(uri, cancellationToken);\n        this.addDocument(document);\n        return document;\n    }\n    createDocument(uri, text, cancellationToken) {\n        if (cancellationToken) {\n            return this.langiumDocumentFactory.fromString(text, uri, cancellationToken).then(document => {\n                this.addDocument(document);\n                return document;\n            });\n        }\n        else {\n            const document = this.langiumDocumentFactory.fromString(text, uri);\n            this.addDocument(document);\n            return document;\n        }\n    }\n    hasDocument(uri) {\n        return this.documentMap.has(uri.toString());\n    }\n    invalidateDocument(uri) {\n        const uriString = uri.toString();\n        const langiumDoc = this.documentMap.get(uriString);\n        if (langiumDoc) {\n            const linker = this.serviceRegistry.getServices(uri).references.Linker;\n            linker.unlink(langiumDoc);\n            langiumDoc.state = DocumentState.Changed;\n            langiumDoc.precomputedScopes = undefined;\n            langiumDoc.diagnostics = undefined;\n        }\n        return langiumDoc;\n    }\n    deleteDocument(uri) {\n        const uriString = uri.toString();\n        const langiumDoc = this.documentMap.get(uriString);\n        if (langiumDoc) {\n            langiumDoc.state = DocumentState.Changed;\n            this.documentMap.delete(uriString);\n        }\n        return langiumDoc;\n    }\n}\n//# sourceMappingURL=documents.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { isAstNode, isAstNodeDescription, isLinkingError } from '../syntax-tree.js';\nimport { findRootNode, streamAst, streamReferences } from '../utils/ast-utils.js';\nimport { interruptAndCheck } from '../utils/promise-utils.js';\nimport { DocumentState } from '../workspace/documents.js';\nconst ref_resolving = Symbol('ref_resolving');\nexport class DefaultLinker {\n    constructor(services) {\n        this.reflection = services.shared.AstReflection;\n        this.langiumDocuments = () => services.shared.workspace.LangiumDocuments;\n        this.scopeProvider = services.references.ScopeProvider;\n        this.astNodeLocator = services.workspace.AstNodeLocator;\n    }\n    async link(document, cancelToken = CancellationToken.None) {\n        for (const node of streamAst(document.parseResult.value)) {\n            await interruptAndCheck(cancelToken);\n            streamReferences(node).forEach(ref => this.doLink(ref, document));\n        }\n    }\n    doLink(refInfo, document) {\n        var _a;\n        const ref = refInfo.reference;\n        // The reference may already have been resolved lazily by accessing its `ref` property.\n        if (ref._ref === undefined) {\n            ref._ref = ref_resolving;\n            try {\n                const description = this.getCandidate(refInfo);\n                if (isLinkingError(description)) {\n                    ref._ref = description;\n                }\n                else {\n                    ref._nodeDescription = description;\n                    if (this.langiumDocuments().hasDocument(description.documentUri)) {\n                        // The target document is already loaded\n                        const linkedNode = this.loadAstNode(description);\n                        ref._ref = linkedNode !== null && linkedNode !== void 0 ? linkedNode : this.createLinkingError(refInfo, description);\n                    }\n                    else {\n                        // Try to load the target AST node later using the already provided description\n                        ref._ref = undefined;\n                    }\n                }\n            }\n            catch (err) {\n                console.error(`An error occurred while resolving reference to '${ref.$refText}':`, err);\n                const errorMessage = (_a = err.message) !== null && _a !== void 0 ? _a : String(err);\n                ref._ref = Object.assign(Object.assign({}, refInfo), { message: `An error occurred while resolving reference to '${ref.$refText}': ${errorMessage}` });\n            }\n            // Add the reference to the document's array of references\n            // Only add if the reference has been not been resolved earlier\n            // Otherwise we end up with duplicates\n            // See also implementation of `buildReference`\n            document.references.push(ref);\n        }\n    }\n    unlink(document) {\n        for (const ref of document.references) {\n            delete ref._ref;\n            delete ref._nodeDescription;\n        }\n        document.references = [];\n    }\n    getCandidate(refInfo) {\n        const scope = this.scopeProvider.getScope(refInfo);\n        const description = scope.getElement(refInfo.reference.$refText);\n        return description !== null && description !== void 0 ? description : this.createLinkingError(refInfo);\n    }\n    buildReference(node, property, refNode, refText) {\n        // See behavior description in doc of Linker, update that on changes in here.\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const linker = this;\n        const reference = {\n            $refNode: refNode,\n            $refText: refText,\n            get ref() {\n                var _a;\n                if (isAstNode(this._ref)) {\n                    // Most frequent case: the target is already resolved.\n                    return this._ref;\n                }\n                else if (isAstNodeDescription(this._nodeDescription)) {\n                    // A candidate has been found before, but it is not loaded yet.\n                    const linkedNode = linker.loadAstNode(this._nodeDescription);\n                    this._ref = linkedNode !== null && linkedNode !== void 0 ? linkedNode : linker.createLinkingError({ reference, container: node, property }, this._nodeDescription);\n                }\n                else if (this._ref === undefined) {\n                    // The reference has not been linked yet, so do that now.\n                    this._ref = ref_resolving;\n                    const document = findRootNode(node).$document;\n                    const refData = linker.getLinkedNode({ reference, container: node, property });\n                    if (refData.error && document && document.state < DocumentState.ComputedScopes) {\n                        // Document scope is not ready, don't set `this._ref` so linker can retry later.\n                        return this._ref = undefined;\n                    }\n                    this._ref = (_a = refData.node) !== null && _a !== void 0 ? _a : refData.error;\n                    this._nodeDescription = refData.descr;\n                    document === null || document === void 0 ? void 0 : document.references.push(this);\n                }\n                else if (this._ref === ref_resolving) {\n                    throw new Error(`Cyclic reference resolution detected: ${linker.astNodeLocator.getAstNodePath(node)}/${property} (symbol '${refText}')`);\n                }\n                return isAstNode(this._ref) ? this._ref : undefined;\n            },\n            get $nodeDescription() {\n                return this._nodeDescription;\n            },\n            get error() {\n                return isLinkingError(this._ref) ? this._ref : undefined;\n            }\n        };\n        return reference;\n    }\n    getLinkedNode(refInfo) {\n        var _a;\n        try {\n            const description = this.getCandidate(refInfo);\n            if (isLinkingError(description)) {\n                return { error: description };\n            }\n            const linkedNode = this.loadAstNode(description);\n            if (linkedNode) {\n                return { node: linkedNode, descr: description };\n            }\n            else {\n                return {\n                    descr: description,\n                    error: this.createLinkingError(refInfo, description)\n                };\n            }\n        }\n        catch (err) {\n            console.error(`An error occurred while resolving reference to '${refInfo.reference.$refText}':`, err);\n            const errorMessage = (_a = err.message) !== null && _a !== void 0 ? _a : String(err);\n            return {\n                error: Object.assign(Object.assign({}, refInfo), { message: `An error occurred while resolving reference to '${refInfo.reference.$refText}': ${errorMessage}` })\n            };\n        }\n    }\n    loadAstNode(nodeDescription) {\n        if (nodeDescription.node) {\n            return nodeDescription.node;\n        }\n        const doc = this.langiumDocuments().getDocument(nodeDescription.documentUri);\n        if (!doc) {\n            return undefined;\n        }\n        return this.astNodeLocator.getAstNode(doc.parseResult.value, nodeDescription.path);\n    }\n    createLinkingError(refInfo, targetDescription) {\n        // Check whether the document is sufficiently processed by the DocumentBuilder. If not, this is a hint for a bug\n        // in the language implementation.\n        const document = findRootNode(refInfo.container).$document;\n        if (document && document.state < DocumentState.ComputedScopes) {\n            console.warn(`Attempted reference resolution before document reached ComputedScopes state (${document.uri}).`);\n        }\n        const referenceType = this.reflection.getReferenceType(refInfo);\n        return Object.assign(Object.assign({}, refInfo), { message: `Could not resolve reference to ${referenceType} named '${refInfo.reference.$refText}'.`, targetDescription });\n    }\n}\n//# sourceMappingURL=linker.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { findNodeForProperty } from '../utils/grammar-utils.js';\nexport function isNamed(node) {\n    return typeof node.name === 'string';\n}\nexport class DefaultNameProvider {\n    getName(node) {\n        if (isNamed(node)) {\n            return node.name;\n        }\n        return undefined;\n    }\n    getNameNode(node) {\n        return findNodeForProperty(node.$cstNode, 'name');\n    }\n}\n//# sourceMappingURL=name-provider.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { findAssignment } from '../utils/grammar-utils.js';\nimport { isReference } from '../syntax-tree.js';\nimport { getDocument } from '../utils/ast-utils.js';\nimport { isChildNode, toDocumentSegment } from '../utils/cst-utils.js';\nimport { stream } from '../utils/stream.js';\nimport { UriUtils } from '../utils/uri-utils.js';\nexport class DefaultReferences {\n    constructor(services) {\n        this.nameProvider = services.references.NameProvider;\n        this.index = services.shared.workspace.IndexManager;\n        this.nodeLocator = services.workspace.AstNodeLocator;\n    }\n    findDeclaration(sourceCstNode) {\n        if (sourceCstNode) {\n            const assignment = findAssignment(sourceCstNode);\n            const nodeElem = sourceCstNode.astNode;\n            if (assignment && nodeElem) {\n                const reference = nodeElem[assignment.feature];\n                if (isReference(reference)) {\n                    return reference.ref;\n                }\n                else if (Array.isArray(reference)) {\n                    for (const ref of reference) {\n                        if (isReference(ref) && ref.$refNode\n                            && ref.$refNode.offset <= sourceCstNode.offset\n                            && ref.$refNode.end >= sourceCstNode.end) {\n                            return ref.ref;\n                        }\n                    }\n                }\n            }\n            if (nodeElem) {\n                const nameNode = this.nameProvider.getNameNode(nodeElem);\n                // Only return the targeted node in case the targeted cst node is the name node or part of it\n                if (nameNode && (nameNode === sourceCstNode || isChildNode(sourceCstNode, nameNode))) {\n                    return nodeElem;\n                }\n            }\n        }\n        return undefined;\n    }\n    findDeclarationNode(sourceCstNode) {\n        const astNode = this.findDeclaration(sourceCstNode);\n        if (astNode === null || astNode === void 0 ? void 0 : astNode.$cstNode) {\n            const targetNode = this.nameProvider.getNameNode(astNode);\n            return targetNode !== null && targetNode !== void 0 ? targetNode : astNode.$cstNode;\n        }\n        return undefined;\n    }\n    findReferences(targetNode, options) {\n        const refs = [];\n        if (options.includeDeclaration) {\n            const ref = this.getReferenceToSelf(targetNode);\n            if (ref) {\n                refs.push(ref);\n            }\n        }\n        let indexReferences = this.index.findAllReferences(targetNode, this.nodeLocator.getAstNodePath(targetNode));\n        if (options.documentUri) {\n            indexReferences = indexReferences.filter(ref => UriUtils.equals(ref.sourceUri, options.documentUri));\n        }\n        refs.push(...indexReferences);\n        return stream(refs);\n    }\n    getReferenceToSelf(targetNode) {\n        const nameNode = this.nameProvider.getNameNode(targetNode);\n        if (nameNode) {\n            const doc = getDocument(targetNode);\n            const path = this.nodeLocator.getAstNodePath(targetNode);\n            return {\n                sourceUri: doc.uri,\n                sourcePath: path,\n                targetUri: doc.uri,\n                targetPath: path,\n                segment: toDocumentSegment(nameNode),\n                local: true\n            };\n        }\n        return undefined;\n    }\n}\n//# sourceMappingURL=references.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Reduction, stream } from './stream.js';\n/**\n * A multimap is a variation of a Map that has potentially multiple values for every key.\n */\nexport class MultiMap {\n    constructor(elements) {\n        this.map = new Map();\n        if (elements) {\n            for (const [key, value] of elements) {\n                this.add(key, value);\n            }\n        }\n    }\n    /**\n     * The total number of values in the multimap.\n     */\n    get size() {\n        return Reduction.sum(stream(this.map.values()).map(a => a.length));\n    }\n    /**\n     * Clear all entries in the multimap.\n     */\n    clear() {\n        this.map.clear();\n    }\n    /**\n     * Operates differently depending on whether a `value` is given:\n     *  * With a value, this method deletes the specific key / value pair from the multimap.\n     *  * Without a value, all values associated with the given key are deleted.\n     *\n     * @returns `true` if a value existed and has been removed, or `false` if the specified\n     *     key / value does not exist.\n     */\n    delete(key, value) {\n        if (value === undefined) {\n            return this.map.delete(key);\n        }\n        else {\n            const values = this.map.get(key);\n            if (values) {\n                const index = values.indexOf(value);\n                if (index >= 0) {\n                    if (values.length === 1) {\n                        this.map.delete(key);\n                    }\n                    else {\n                        values.splice(index, 1);\n                    }\n                    return true;\n                }\n            }\n            return false;\n        }\n    }\n    /**\n     * Returns an array of all values associated with the given key. If no value exists,\n     * an empty array is returned.\n     *\n     * _Note:_ The returned array is assumed not to be modified. Use the `set` method to add a\n     * value and `delete` to remove a value from the multimap.\n     */\n    get(key) {\n        var _a;\n        return (_a = this.map.get(key)) !== null && _a !== void 0 ? _a : [];\n    }\n    /**\n     * Operates differently depending on whether a `value` is given:\n     *  * With a value, this method returns `true` if the specific key / value pair is present in the multimap.\n     *  * Without a value, this method returns `true` if the given key is present in the multimap.\n     */\n    has(key, value) {\n        if (value === undefined) {\n            return this.map.has(key);\n        }\n        else {\n            const values = this.map.get(key);\n            if (values) {\n                return values.indexOf(value) >= 0;\n            }\n            return false;\n        }\n    }\n    /**\n     * Add the given key / value pair to the multimap.\n     */\n    add(key, value) {\n        if (this.map.has(key)) {\n            this.map.get(key).push(value);\n        }\n        else {\n            this.map.set(key, [value]);\n        }\n        return this;\n    }\n    /**\n     * Add the given set of key / value pairs to the multimap.\n     */\n    addAll(key, values) {\n        if (this.map.has(key)) {\n            this.map.get(key).push(...values);\n        }\n        else {\n            this.map.set(key, Array.from(values));\n        }\n        return this;\n    }\n    /**\n     * Invokes the given callback function for every key / value pair in the multimap.\n     */\n    forEach(callbackfn) {\n        this.map.forEach((array, key) => array.forEach(value => callbackfn(value, key, this)));\n    }\n    /**\n     * Returns an iterator of key, value pairs for every entry in the map.\n     */\n    [Symbol.iterator]() {\n        return this.entries().iterator();\n    }\n    /**\n     * Returns a stream of key, value pairs for every entry in the map.\n     */\n    entries() {\n        return stream(this.map.entries())\n            .flatMap(([key, array]) => array.map(value => [key, value]));\n    }\n    /**\n     * Returns a stream of keys in the map.\n     */\n    keys() {\n        return stream(this.map.keys());\n    }\n    /**\n     * Returns a stream of values in the map.\n     */\n    values() {\n        return stream(this.map.values()).flat();\n    }\n    /**\n     * Returns a stream of key, value set pairs for every key in the map.\n     */\n    entriesGroupedByKey() {\n        return stream(this.map.entries());\n    }\n}\nexport class BiMap {\n    get size() {\n        return this.map.size;\n    }\n    constructor(elements) {\n        this.map = new Map();\n        this.inverse = new Map();\n        if (elements) {\n            for (const [key, value] of elements) {\n                this.set(key, value);\n            }\n        }\n    }\n    clear() {\n        this.map.clear();\n        this.inverse.clear();\n    }\n    set(key, value) {\n        this.map.set(key, value);\n        this.inverse.set(value, key);\n        return this;\n    }\n    get(key) {\n        return this.map.get(key);\n    }\n    getKey(value) {\n        return this.inverse.get(value);\n    }\n    delete(key) {\n        const value = this.map.get(key);\n        if (value !== undefined) {\n            this.map.delete(key);\n            this.inverse.delete(value);\n            return true;\n        }\n        return false;\n    }\n}\n//# sourceMappingURL=collections.js.map","/******************************************************************************\n * Copyright 2021-2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { streamAllContents, streamContents } from '../utils/ast-utils.js';\nimport { MultiMap } from '../utils/collections.js';\nimport { interruptAndCheck } from '../utils/promise-utils.js';\n/**\n * The default scope computation creates and collectes descriptions of the AST nodes to be exported into the\n * _global_ scope from the given document. By default those are the document's root AST node and its directly\n * contained child nodes.\n *\n * Besides, it gathers all AST nodes that have a name (according to the `NameProvider` service) and includes them\n * in the local scope of their particular container nodes. As a result, for every cross-reference in the AST,\n * target elements from the same level (siblings) and further up towards the root (parents and siblings of parents)\n * are visible. Elements being nested inside lower levels (children, children of siblings and parents' siblings)\n * are _invisible_ by default, but that can be changed by customizing this service.\n */\nexport class DefaultScopeComputation {\n    constructor(services) {\n        this.nameProvider = services.references.NameProvider;\n        this.descriptions = services.workspace.AstNodeDescriptionProvider;\n    }\n    async computeExports(document, cancelToken = CancellationToken.None) {\n        return this.computeExportsForNode(document.parseResult.value, document, undefined, cancelToken);\n    }\n    /**\n     * Creates {@link AstNodeDescription AstNodeDescriptions} for the given {@link AstNode parentNode} and its children.\n     * The list of children to be considered is determined by the function parameter {@link children}.\n     * By default only the direct children of {@link parentNode} are visited, nested nodes are not exported.\n     *\n     * @param parentNode AST node to be exported, i.e., of which an {@link AstNodeDescription} shall be added to the returned list.\n     * @param document The document containing the AST node to be exported.\n     * @param children A function called with {@link parentNode} as single argument and returning an {@link Iterable} supplying the children to be visited, which must be directly or transitively contained in {@link parentNode}.\n     * @param cancelToken Indicates when to cancel the current operation.\n     * @throws `OperationCancelled` if a user action occurs during execution.\n     * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index.\n     */\n    async computeExportsForNode(parentNode, document, children = streamContents, cancelToken = CancellationToken.None) {\n        const exports = [];\n        this.exportNode(parentNode, exports, document);\n        for (const node of children(parentNode)) {\n            await interruptAndCheck(cancelToken);\n            this.exportNode(node, exports, document);\n        }\n        return exports;\n    }\n    /**\n     * Add a single node to the list of exports if it has a name. Override this method to change how\n     * symbols are exported, e.g. by modifying their exported name.\n     */\n    exportNode(node, exports, document) {\n        const name = this.nameProvider.getName(node);\n        if (name) {\n            exports.push(this.descriptions.createDescription(node, name, document));\n        }\n    }\n    async computeLocalScopes(document, cancelToken = CancellationToken.None) {\n        const rootNode = document.parseResult.value;\n        const scopes = new MultiMap();\n        // Here we navigate the full AST - local scopes shall be available in the whole document\n        for (const node of streamAllContents(rootNode)) {\n            await interruptAndCheck(cancelToken);\n            this.processNode(node, document, scopes);\n        }\n        return scopes;\n    }\n    /**\n     * Process a single node during scopes computation. The default implementation makes the node visible\n     * in the subtree of its container (if the node has a name). Override this method to change this,\n     * e.g. by increasing the visibility to a higher level in the AST.\n     */\n    processNode(node, document, scopes) {\n        const container = node.$container;\n        if (container) {\n            const name = this.nameProvider.getName(node);\n            if (name) {\n                scopes.add(container, this.descriptions.createDescription(node, name, document));\n            }\n        }\n    }\n}\n//# sourceMappingURL=scope-computation.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { EMPTY_STREAM, stream } from '../utils/stream.js';\n/**\n * The default scope implementation is based on a `Stream`. It has an optional _outer scope_ describing\n * the next level of elements, which are queried when a target element is not found in the stream provided\n * to this scope.\n */\nexport class StreamScope {\n    constructor(elements, outerScope, options) {\n        var _a;\n        this.elements = elements;\n        this.outerScope = outerScope;\n        this.caseInsensitive = (_a = options === null || options === void 0 ? void 0 : options.caseInsensitive) !== null && _a !== void 0 ? _a : false;\n    }\n    getAllElements() {\n        if (this.outerScope) {\n            return this.elements.concat(this.outerScope.getAllElements());\n        }\n        else {\n            return this.elements;\n        }\n    }\n    getElement(name) {\n        const local = this.caseInsensitive\n            ? this.elements.find(e => e.name.toLowerCase() === name.toLowerCase())\n            : this.elements.find(e => e.name === name);\n        if (local) {\n            return local;\n        }\n        if (this.outerScope) {\n            return this.outerScope.getElement(name);\n        }\n        return undefined;\n    }\n}\nexport class MapScope {\n    constructor(elements, outerScope, options) {\n        var _a;\n        this.elements = new Map();\n        this.caseInsensitive = (_a = options === null || options === void 0 ? void 0 : options.caseInsensitive) !== null && _a !== void 0 ? _a : false;\n        for (const element of elements) {\n            const name = this.caseInsensitive\n                ? element.name.toLowerCase()\n                : element.name;\n            this.elements.set(name, element);\n        }\n        this.outerScope = outerScope;\n    }\n    getElement(name) {\n        const localName = this.caseInsensitive ? name.toLowerCase() : name;\n        const local = this.elements.get(localName);\n        if (local) {\n            return local;\n        }\n        if (this.outerScope) {\n            return this.outerScope.getElement(name);\n        }\n        return undefined;\n    }\n    getAllElements() {\n        let elementStream = stream(this.elements.values());\n        if (this.outerScope) {\n            elementStream = elementStream.concat(this.outerScope.getAllElements());\n        }\n        return elementStream;\n    }\n}\nexport const EMPTY_SCOPE = {\n    getElement() {\n        return undefined;\n    },\n    getAllElements() {\n        return EMPTY_STREAM;\n    }\n};\n//# sourceMappingURL=scope.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport class DisposableCache {\n    constructor() {\n        this.toDispose = [];\n        this.isDisposed = false;\n    }\n    onDispose(disposable) {\n        this.toDispose.push(disposable);\n    }\n    dispose() {\n        this.throwIfDisposed();\n        this.clear();\n        this.isDisposed = true;\n        this.toDispose.forEach(disposable => disposable.dispose());\n    }\n    throwIfDisposed() {\n        if (this.isDisposed) {\n            throw new Error('This cache has already been disposed');\n        }\n    }\n}\nexport class SimpleCache extends DisposableCache {\n    constructor() {\n        super(...arguments);\n        this.cache = new Map();\n    }\n    has(key) {\n        this.throwIfDisposed();\n        return this.cache.has(key);\n    }\n    set(key, value) {\n        this.throwIfDisposed();\n        this.cache.set(key, value);\n    }\n    get(key, provider) {\n        this.throwIfDisposed();\n        if (this.cache.has(key)) {\n            return this.cache.get(key);\n        }\n        else if (provider) {\n            const value = provider();\n            this.cache.set(key, value);\n            return value;\n        }\n        else {\n            return undefined;\n        }\n    }\n    delete(key) {\n        this.throwIfDisposed();\n        return this.cache.delete(key);\n    }\n    clear() {\n        this.throwIfDisposed();\n        this.cache.clear();\n    }\n}\nexport class ContextCache extends DisposableCache {\n    constructor(converter) {\n        super();\n        this.cache = new Map();\n        this.converter = converter !== null && converter !== void 0 ? converter : (value => value);\n    }\n    has(contextKey, key) {\n        this.throwIfDisposed();\n        return this.cacheForContext(contextKey).has(key);\n    }\n    set(contextKey, key, value) {\n        this.throwIfDisposed();\n        this.cacheForContext(contextKey).set(key, value);\n    }\n    get(contextKey, key, provider) {\n        this.throwIfDisposed();\n        const contextCache = this.cacheForContext(contextKey);\n        if (contextCache.has(key)) {\n            return contextCache.get(key);\n        }\n        else if (provider) {\n            const value = provider();\n            contextCache.set(key, value);\n            return value;\n        }\n        else {\n            return undefined;\n        }\n    }\n    delete(contextKey, key) {\n        this.throwIfDisposed();\n        return this.cacheForContext(contextKey).delete(key);\n    }\n    clear(contextKey) {\n        this.throwIfDisposed();\n        if (contextKey) {\n            const mapKey = this.converter(contextKey);\n            this.cache.delete(mapKey);\n        }\n        else {\n            this.cache.clear();\n        }\n    }\n    cacheForContext(contextKey) {\n        const mapKey = this.converter(contextKey);\n        let documentCache = this.cache.get(mapKey);\n        if (!documentCache) {\n            documentCache = new Map();\n            this.cache.set(mapKey, documentCache);\n        }\n        return documentCache;\n    }\n}\n/**\n * Every key/value pair in this cache is scoped to a document.\n * If this document is changed or deleted, all associated key/value pairs are deleted.\n */\nexport class DocumentCache extends ContextCache {\n    /**\n     * Creates a new document cache.\n     *\n     * @param sharedServices Service container instance to hook into document lifecycle events.\n     * @param state Optional document state on which the cache should evict.\n     * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.\n     * *Deleted* documents are considered in both cases.\n     *\n     * Providing a state here will use `DocumentBuilder#onDocumentPhase` instead,\n     * which triggers on all documents that have been affected by this change, assuming that the\n     * state is `DocumentState.Linked` or a later state.\n     */\n    constructor(sharedServices, state) {\n        super(uri => uri.toString());\n        if (state) {\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onDocumentPhase(state, document => {\n                this.clear(document.uri.toString());\n            }));\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {\n                for (const uri of deleted) { // react only on deleted documents\n                    this.clear(uri);\n                }\n            }));\n        }\n        else {\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((changed, deleted) => {\n                const allUris = changed.concat(deleted); // react on both changed and deleted documents\n                for (const uri of allUris) {\n                    this.clear(uri);\n                }\n            }));\n        }\n    }\n}\n/**\n * Every key/value pair in this cache is scoped to the whole workspace.\n * If any document in the workspace is added, changed or deleted, the whole cache is evicted.\n */\nexport class WorkspaceCache extends SimpleCache {\n    /**\n     * Creates a new workspace cache.\n     *\n     * @param sharedServices Service container instance to hook into document lifecycle events.\n     * @param state Optional document state on which the cache should evict.\n     * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.\n     * *Deleted* documents are considered in both cases.\n     */\n    constructor(sharedServices, state) {\n        super();\n        if (state) {\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onBuildPhase(state, () => {\n                this.clear();\n            }));\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {\n                if (deleted.length > 0) { // react only on deleted documents\n                    this.clear();\n                }\n            }));\n        }\n        else {\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate(() => {\n                this.clear();\n            }));\n        }\n    }\n}\n//# sourceMappingURL=caching.js.map","/******************************************************************************\n * Copyright 2021-2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { MapScope, StreamScope } from './scope.js';\nimport { getDocument } from '../utils/ast-utils.js';\nimport { stream } from '../utils/stream.js';\nimport { WorkspaceCache } from '../utils/caching.js';\nexport class DefaultScopeProvider {\n    constructor(services) {\n        this.reflection = services.shared.AstReflection;\n        this.nameProvider = services.references.NameProvider;\n        this.descriptions = services.workspace.AstNodeDescriptionProvider;\n        this.indexManager = services.shared.workspace.IndexManager;\n        this.globalScopeCache = new WorkspaceCache(services.shared);\n    }\n    getScope(context) {\n        const scopes = [];\n        const referenceType = this.reflection.getReferenceType(context);\n        const precomputed = getDocument(context.container).precomputedScopes;\n        if (precomputed) {\n            let currentNode = context.container;\n            do {\n                const allDescriptions = precomputed.get(currentNode);\n                if (allDescriptions.length > 0) {\n                    scopes.push(stream(allDescriptions).filter(desc => this.reflection.isSubtype(desc.type, referenceType)));\n                }\n                currentNode = currentNode.$container;\n            } while (currentNode);\n        }\n        let result = this.getGlobalScope(referenceType, context);\n        for (let i = scopes.length - 1; i >= 0; i--) {\n            result = this.createScope(scopes[i], result);\n        }\n        return result;\n    }\n    /**\n     * Create a scope for the given collection of AST node descriptions.\n     */\n    createScope(elements, outerScope, options) {\n        return new StreamScope(stream(elements), outerScope, options);\n    }\n    /**\n     * Create a scope for the given collection of AST nodes, which need to be transformed into respective\n     * descriptions first. This is done using the `NameProvider` and `AstNodeDescriptionProvider` services.\n     */\n    createScopeForNodes(elements, outerScope, options) {\n        const s = stream(elements).map(e => {\n            const name = this.nameProvider.getName(e);\n            if (name) {\n                return this.descriptions.createDescription(e, name);\n            }\n            return undefined;\n        }).nonNullable();\n        return new StreamScope(s, outerScope, options);\n    }\n    /**\n     * Create a global scope filtered for the given reference type.\n     */\n    getGlobalScope(referenceType, _context) {\n        return this.globalScopeCache.get(referenceType, () => new MapScope(this.indexManager.allElements(referenceType)));\n    }\n}\n//# sourceMappingURL=scope-provider.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { URI } from 'vscode-uri';\nimport { isAstNode, isReference } from '../syntax-tree.js';\nimport { getDocument } from '../utils/ast-utils.js';\nimport { findNodesForProperty } from '../utils/grammar-utils.js';\nexport function isAstNodeWithComment(node) {\n    return typeof node.$comment === 'string';\n}\nfunction isIntermediateReference(obj) {\n    return typeof obj === 'object' && !!obj && ('$ref' in obj || '$error' in obj);\n}\nexport class DefaultJsonSerializer {\n    constructor(services) {\n        /** The set of AstNode properties to be ignored by the serializer. */\n        this.ignoreProperties = new Set(['$container', '$containerProperty', '$containerIndex', '$document', '$cstNode']);\n        this.langiumDocuments = services.shared.workspace.LangiumDocuments;\n        this.astNodeLocator = services.workspace.AstNodeLocator;\n        this.nameProvider = services.references.NameProvider;\n        this.commentProvider = services.documentation.CommentProvider;\n    }\n    serialize(node, options) {\n        const serializeOptions = options !== null && options !== void 0 ? options : {};\n        const specificReplacer = options === null || options === void 0 ? void 0 : options.replacer;\n        const defaultReplacer = (key, value) => this.replacer(key, value, serializeOptions);\n        const replacer = specificReplacer ? (key, value) => specificReplacer(key, value, defaultReplacer) : defaultReplacer;\n        try {\n            this.currentDocument = getDocument(node);\n            return JSON.stringify(node, replacer, options === null || options === void 0 ? void 0 : options.space);\n        }\n        finally {\n            this.currentDocument = undefined;\n        }\n    }\n    deserialize(content, options) {\n        const deserializeOptions = options !== null && options !== void 0 ? options : {};\n        const root = JSON.parse(content);\n        this.linkNode(root, root, deserializeOptions);\n        return root;\n    }\n    replacer(key, value, { refText, sourceText, textRegions, comments, uriConverter }) {\n        var _a, _b, _c, _d;\n        if (this.ignoreProperties.has(key)) {\n            return undefined;\n        }\n        else if (isReference(value)) {\n            const refValue = value.ref;\n            const $refText = refText ? value.$refText : undefined;\n            if (refValue) {\n                const targetDocument = getDocument(refValue);\n                let targetUri = '';\n                if (this.currentDocument && this.currentDocument !== targetDocument) {\n                    if (uriConverter) {\n                        targetUri = uriConverter(targetDocument.uri, value);\n                    }\n                    else {\n                        targetUri = targetDocument.uri.toString();\n                    }\n                }\n                const targetPath = this.astNodeLocator.getAstNodePath(refValue);\n                return {\n                    $ref: `${targetUri}#${targetPath}`,\n                    $refText\n                };\n            }\n            else {\n                return {\n                    $error: (_b = (_a = value.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Could not resolve reference',\n                    $refText\n                };\n            }\n        }\n        else if (isAstNode(value)) {\n            let astNode = undefined;\n            if (textRegions) {\n                astNode = this.addAstNodeRegionWithAssignmentsTo(Object.assign({}, value));\n                if ((!key || value.$document) && (astNode === null || astNode === void 0 ? void 0 : astNode.$textRegion)) {\n                    // The document URI is added to the root node of the resulting JSON tree\n                    astNode.$textRegion.documentURI = (_c = this.currentDocument) === null || _c === void 0 ? void 0 : _c.uri.toString();\n                }\n            }\n            if (sourceText && !key) {\n                astNode !== null && astNode !== void 0 ? astNode : (astNode = Object.assign({}, value));\n                astNode.$sourceText = (_d = value.$cstNode) === null || _d === void 0 ? void 0 : _d.text;\n            }\n            if (comments) {\n                astNode !== null && astNode !== void 0 ? astNode : (astNode = Object.assign({}, value));\n                const comment = this.commentProvider.getComment(value);\n                if (comment) {\n                    astNode.$comment = comment.replace(/\\r/g, '');\n                }\n            }\n            return astNode !== null && astNode !== void 0 ? astNode : value;\n        }\n        else {\n            return value;\n        }\n    }\n    addAstNodeRegionWithAssignmentsTo(node) {\n        const createDocumentSegment = cstNode => ({\n            offset: cstNode.offset,\n            end: cstNode.end,\n            length: cstNode.length,\n            range: cstNode.range,\n        });\n        if (node.$cstNode) {\n            const textRegion = node.$textRegion = createDocumentSegment(node.$cstNode);\n            const assignments = textRegion.assignments = {};\n            Object.keys(node).filter(key => !key.startsWith('$')).forEach(key => {\n                const propertyAssignments = findNodesForProperty(node.$cstNode, key).map(createDocumentSegment);\n                if (propertyAssignments.length !== 0) {\n                    assignments[key] = propertyAssignments;\n                }\n            });\n            return node;\n        }\n        return undefined;\n    }\n    linkNode(node, root, options, container, containerProperty, containerIndex) {\n        for (const [propertyName, item] of Object.entries(node)) {\n            if (Array.isArray(item)) {\n                for (let index = 0; index < item.length; index++) {\n                    const element = item[index];\n                    if (isIntermediateReference(element)) {\n                        item[index] = this.reviveReference(node, propertyName, root, element, options);\n                    }\n                    else if (isAstNode(element)) {\n                        this.linkNode(element, root, options, node, propertyName, index);\n                    }\n                }\n            }\n            else if (isIntermediateReference(item)) {\n                node[propertyName] = this.reviveReference(node, propertyName, root, item, options);\n            }\n            else if (isAstNode(item)) {\n                this.linkNode(item, root, options, node, propertyName);\n            }\n        }\n        const mutable = node;\n        mutable.$container = container;\n        mutable.$containerProperty = containerProperty;\n        mutable.$containerIndex = containerIndex;\n    }\n    reviveReference(container, property, root, reference, options) {\n        let refText = reference.$refText;\n        let error = reference.$error;\n        if (reference.$ref) {\n            const ref = this.getRefNode(root, reference.$ref, options.uriConverter);\n            if (isAstNode(ref)) {\n                if (!refText) {\n                    refText = this.nameProvider.getName(ref);\n                }\n                return {\n                    $refText: refText !== null && refText !== void 0 ? refText : '',\n                    ref\n                };\n            }\n            else {\n                error = ref;\n            }\n        }\n        if (error) {\n            const ref = {\n                $refText: refText !== null && refText !== void 0 ? refText : ''\n            };\n            ref.error = {\n                container,\n                property,\n                message: error,\n                reference: ref\n            };\n            return ref;\n        }\n        else {\n            return undefined;\n        }\n    }\n    getRefNode(root, uri, uriConverter) {\n        try {\n            const fragmentIndex = uri.indexOf('#');\n            if (fragmentIndex === 0) {\n                const node = this.astNodeLocator.getAstNode(root, uri.substring(1));\n                if (!node) {\n                    return 'Could not resolve path: ' + uri;\n                }\n                return node;\n            }\n            if (fragmentIndex < 0) {\n                const documentUri = uriConverter ? uriConverter(uri) : URI.parse(uri);\n                const document = this.langiumDocuments.getDocument(documentUri);\n                if (!document) {\n                    return 'Could not find document for URI: ' + uri;\n                }\n                return document.parseResult.value;\n            }\n            const documentUri = uriConverter ? uriConverter(uri.substring(0, fragmentIndex)) : URI.parse(uri.substring(0, fragmentIndex));\n            const document = this.langiumDocuments.getDocument(documentUri);\n            if (!document) {\n                return 'Could not find document for URI: ' + uri;\n            }\n            if (fragmentIndex === uri.length - 1) {\n                return document.parseResult.value;\n            }\n            const node = this.astNodeLocator.getAstNode(document.parseResult.value, uri.substring(fragmentIndex + 1));\n            if (!node) {\n                return 'Could not resolve URI: ' + uri;\n            }\n            return node;\n        }\n        catch (err) {\n            return String(err);\n        }\n    }\n}\n//# sourceMappingURL=json-serializer.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { UriUtils } from './utils/uri-utils.js';\n/**\n * Generic registry for Langium services, but capable of being used with extending service sets as well (such as the lsp-complete LangiumCoreServices set)\n */\nexport class DefaultServiceRegistry {\n    /**\n     * @deprecated Use the new `fileExtensionMap` (or `languageIdMap`) property instead.\n     */\n    get map() {\n        return this.fileExtensionMap;\n    }\n    constructor(services) {\n        this.languageIdMap = new Map();\n        this.fileExtensionMap = new Map();\n        this.textDocuments = services === null || services === void 0 ? void 0 : services.workspace.TextDocuments;\n    }\n    register(language) {\n        const data = language.LanguageMetaData;\n        for (const ext of data.fileExtensions) {\n            if (this.fileExtensionMap.has(ext)) {\n                console.warn(`The file extension ${ext} is used by multiple languages. It is now assigned to '${data.languageId}'.`);\n            }\n            this.fileExtensionMap.set(ext, language);\n        }\n        this.languageIdMap.set(data.languageId, language);\n        if (this.languageIdMap.size === 1) {\n            this.singleton = language;\n        }\n        else {\n            this.singleton = undefined;\n        }\n    }\n    getServices(uri) {\n        var _a, _b;\n        if (this.singleton !== undefined) {\n            return this.singleton;\n        }\n        if (this.languageIdMap.size === 0) {\n            throw new Error('The service registry is empty. Use `register` to register the services of a language.');\n        }\n        const languageId = (_b = (_a = this.textDocuments) === null || _a === void 0 ? void 0 : _a.get(uri)) === null || _b === void 0 ? void 0 : _b.languageId;\n        if (languageId !== undefined) {\n            const services = this.languageIdMap.get(languageId);\n            if (services) {\n                return services;\n            }\n        }\n        const ext = UriUtils.extname(uri);\n        const services = this.fileExtensionMap.get(ext);\n        if (!services) {\n            if (languageId) {\n                throw new Error(`The service registry contains no services for the extension '${ext}' for language '${languageId}'.`);\n            }\n            else {\n                throw new Error(`The service registry contains no services for the extension '${ext}'.`);\n            }\n        }\n        return services;\n    }\n    hasServices(uri) {\n        try {\n            this.getServices(uri);\n            return true;\n        }\n        catch (_a) {\n            return false;\n        }\n    }\n    get all() {\n        return Array.from(this.languageIdMap.values());\n    }\n}\n//# sourceMappingURL=service-registry.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { assertUnreachable } from '../index.js';\nimport { MultiMap } from '../utils/collections.js';\nimport { isOperationCancelled } from '../utils/promise-utils.js';\nimport { stream } from '../utils/stream.js';\n/**\n * Create DiagnosticData for a given diagnostic code. The result can be put into the `data` field of a DiagnosticInfo.\n */\nexport function diagnosticData(code) {\n    return { code };\n}\nexport var ValidationCategory;\n(function (ValidationCategory) {\n    ValidationCategory.all = ['fast', 'slow', 'built-in'];\n})(ValidationCategory || (ValidationCategory = {}));\n/**\n * Manages a set of `ValidationCheck`s to be applied when documents are validated.\n */\nexport class ValidationRegistry {\n    constructor(services) {\n        this.entries = new MultiMap();\n        this.entriesBefore = [];\n        this.entriesAfter = [];\n        this.reflection = services.shared.AstReflection;\n    }\n    /**\n     * Register a set of validation checks. Each value in the record can be either a single validation check (i.e. a function)\n     * or an array of validation checks.\n     *\n     * @param checksRecord Set of validation checks to register.\n     * @param category Optional category for the validation checks (defaults to `'fast'`).\n     * @param thisObj Optional object to be used as `this` when calling the validation check functions.\n     */\n    register(checksRecord, thisObj = this, category = 'fast') {\n        if (category === 'built-in') {\n            throw new Error(\"The 'built-in' category is reserved for lexer, parser, and linker errors.\");\n        }\n        for (const [type, ch] of Object.entries(checksRecord)) {\n            const callbacks = ch;\n            if (Array.isArray(callbacks)) {\n                for (const check of callbacks) {\n                    const entry = {\n                        check: this.wrapValidationException(check, thisObj),\n                        category\n                    };\n                    this.addEntry(type, entry);\n                }\n            }\n            else if (typeof callbacks === 'function') {\n                const entry = {\n                    check: this.wrapValidationException(callbacks, thisObj),\n                    category\n                };\n                this.addEntry(type, entry);\n            }\n            else {\n                assertUnreachable(callbacks);\n            }\n        }\n    }\n    wrapValidationException(check, thisObj) {\n        return async (node, accept, cancelToken) => {\n            await this.handleException(() => check.call(thisObj, node, accept, cancelToken), 'An error occurred during validation', accept, node);\n        };\n    }\n    async handleException(functionality, messageContext, accept, node) {\n        try {\n            await functionality();\n        }\n        catch (err) {\n            if (isOperationCancelled(err)) {\n                throw err;\n            }\n            console.error(`${messageContext}:`, err);\n            if (err instanceof Error && err.stack) {\n                console.error(err.stack);\n            }\n            const messageDetails = err instanceof Error ? err.message : String(err);\n            accept('error', `${messageContext}: ${messageDetails}`, { node });\n        }\n    }\n    addEntry(type, entry) {\n        if (type === 'AstNode') {\n            this.entries.add('AstNode', entry);\n            return;\n        }\n        for (const subtype of this.reflection.getAllSubTypes(type)) {\n            this.entries.add(subtype, entry);\n        }\n    }\n    getChecks(type, categories) {\n        let checks = stream(this.entries.get(type))\n            .concat(this.entries.get('AstNode'));\n        if (categories) {\n            checks = checks.filter(entry => categories.includes(entry.category));\n        }\n        return checks.map(entry => entry.check);\n    }\n    /**\n     * Register logic which will be executed once before validating all the nodes of an AST/Langium document.\n     * This helps to prepare or initialize some information which are required or reusable for the following checks on the AstNodes.\n     *\n     * As an example, for validating unique fully-qualified names of nodes in the AST,\n     * here the map for mapping names to nodes could be established.\n     * During the usual checks on the nodes, they are put into this map with their name.\n     *\n     * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.\n     * Therefore it is recommended to clear stored information\n     * _before_ validating an AST to validate each AST unaffected from other ASTs\n     * AND _after_ validating the AST to free memory by information which are no longer used.\n     *\n     * @param checkBefore a set-up function which will be called once before actually validating an AST\n     * @param thisObj Optional object to be used as `this` when calling the validation check functions.\n     */\n    registerBeforeDocument(checkBefore, thisObj = this) {\n        this.entriesBefore.push(this.wrapPreparationException(checkBefore, 'An error occurred during set-up of the validation', thisObj));\n    }\n    /**\n     * Register logic which will be executed once after validating all the nodes of an AST/Langium document.\n     * This helps to finally evaluate information which are collected during the checks on the AstNodes.\n     *\n     * As an example, for validating unique fully-qualified names of nodes in the AST,\n     * here the map with all the collected nodes and their names is checked\n     * and validation hints are created for all nodes with the same name.\n     *\n     * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.\n     * Therefore it is recommended to clear stored information\n     * _before_ validating an AST to validate each AST unaffected from other ASTs\n     * AND _after_ validating the AST to free memory by information which are no longer used.\n     *\n     * @param checkBefore a set-up function which will be called once before actually validating an AST\n     * @param thisObj Optional object to be used as `this` when calling the validation check functions.\n     */\n    registerAfterDocument(checkAfter, thisObj = this) {\n        this.entriesAfter.push(this.wrapPreparationException(checkAfter, 'An error occurred during tear-down of the validation', thisObj));\n    }\n    wrapPreparationException(check, messageContext, thisObj) {\n        return async (rootNode, accept, categories, cancelToken) => {\n            await this.handleException(() => check.call(thisObj, rootNode, accept, categories, cancelToken), messageContext, accept, rootNode);\n        };\n    }\n    get checksBefore() {\n        return this.entriesBefore;\n    }\n    get checksAfter() {\n        return this.entriesAfter;\n    }\n}\n//# sourceMappingURL=validation-registry.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { findNodeForKeyword, findNodeForProperty } from '../utils/grammar-utils.js';\nimport { streamAst } from '../utils/ast-utils.js';\nimport { tokenToRange } from '../utils/cst-utils.js';\nimport { interruptAndCheck, isOperationCancelled } from '../utils/promise-utils.js';\nimport { diagnosticData } from './validation-registry.js';\nexport class DefaultDocumentValidator {\n    constructor(services) {\n        this.validationRegistry = services.validation.ValidationRegistry;\n        this.metadata = services.LanguageMetaData;\n    }\n    async validateDocument(document, options = {}, cancelToken = CancellationToken.None) {\n        const parseResult = document.parseResult;\n        const diagnostics = [];\n        await interruptAndCheck(cancelToken);\n        if (!options.categories || options.categories.includes('built-in')) {\n            this.processLexingErrors(parseResult, diagnostics, options);\n            if (options.stopAfterLexingErrors && diagnostics.some(d => { var _a; return ((_a = d.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.LexingError; })) {\n                return diagnostics;\n            }\n            this.processParsingErrors(parseResult, diagnostics, options);\n            if (options.stopAfterParsingErrors && diagnostics.some(d => { var _a; return ((_a = d.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.ParsingError; })) {\n                return diagnostics;\n            }\n            this.processLinkingErrors(document, diagnostics, options);\n            if (options.stopAfterLinkingErrors && diagnostics.some(d => { var _a; return ((_a = d.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.LinkingError; })) {\n                return diagnostics;\n            }\n        }\n        // Process custom validations\n        try {\n            diagnostics.push(...await this.validateAst(parseResult.value, options, cancelToken));\n        }\n        catch (err) {\n            if (isOperationCancelled(err)) {\n                throw err;\n            }\n            console.error('An error occurred during validation:', err);\n        }\n        await interruptAndCheck(cancelToken);\n        return diagnostics;\n    }\n    processLexingErrors(parseResult, diagnostics, _options) {\n        var _a, _b, _c;\n        const lexerDiagnostics = [...parseResult.lexerErrors, ...(_b = (_a = parseResult.lexerReport) === null || _a === void 0 ? void 0 : _a.diagnostics) !== null && _b !== void 0 ? _b : []];\n        for (const lexerDiagnostic of lexerDiagnostics) {\n            const severity = (_c = lexerDiagnostic.severity) !== null && _c !== void 0 ? _c : 'error';\n            const diagnostic = {\n                severity: toDiagnosticSeverity(severity),\n                range: {\n                    start: {\n                        line: lexerDiagnostic.line - 1,\n                        character: lexerDiagnostic.column - 1\n                    },\n                    end: {\n                        line: lexerDiagnostic.line - 1,\n                        character: lexerDiagnostic.column + lexerDiagnostic.length - 1\n                    }\n                },\n                message: lexerDiagnostic.message,\n                data: toDiagnosticData(severity),\n                source: this.getSource()\n            };\n            diagnostics.push(diagnostic);\n        }\n    }\n    processParsingErrors(parseResult, diagnostics, _options) {\n        for (const parserError of parseResult.parserErrors) {\n            let range = undefined;\n            // We can run into the chevrotain error recovery here\n            // The token contained in the parser error might be automatically inserted\n            // In this case every position value will be `NaN`\n            if (isNaN(parserError.token.startOffset)) {\n                // Some special parser error types contain a `previousToken`\n                // We can simply append our diagnostic to that token\n                if ('previousToken' in parserError) {\n                    const token = parserError.previousToken;\n                    if (!isNaN(token.startOffset)) {\n                        const position = { line: token.endLine - 1, character: token.endColumn };\n                        range = { start: position, end: position };\n                    }\n                    else {\n                        // No valid prev token. Might be empty document or containing only hidden tokens.\n                        // Point to document start\n                        const position = { line: 0, character: 0 };\n                        range = { start: position, end: position };\n                    }\n                }\n            }\n            else {\n                range = tokenToRange(parserError.token);\n            }\n            if (range) {\n                const diagnostic = {\n                    severity: toDiagnosticSeverity('error'),\n                    range,\n                    message: parserError.message,\n                    data: diagnosticData(DocumentValidator.ParsingError),\n                    source: this.getSource()\n                };\n                diagnostics.push(diagnostic);\n            }\n        }\n    }\n    processLinkingErrors(document, diagnostics, _options) {\n        for (const reference of document.references) {\n            const linkingError = reference.error;\n            if (linkingError) {\n                const info = {\n                    node: linkingError.container,\n                    property: linkingError.property,\n                    index: linkingError.index,\n                    data: {\n                        code: DocumentValidator.LinkingError,\n                        containerType: linkingError.container.$type,\n                        property: linkingError.property,\n                        refText: linkingError.reference.$refText\n                    }\n                };\n                diagnostics.push(this.toDiagnostic('error', linkingError.message, info));\n            }\n        }\n    }\n    async validateAst(rootNode, options, cancelToken = CancellationToken.None) {\n        const validationItems = [];\n        const acceptor = (severity, message, info) => {\n            validationItems.push(this.toDiagnostic(severity, message, info));\n        };\n        await this.validateAstBefore(rootNode, options, acceptor, cancelToken);\n        await this.validateAstNodes(rootNode, options, acceptor, cancelToken);\n        await this.validateAstAfter(rootNode, options, acceptor, cancelToken);\n        return validationItems;\n    }\n    async validateAstBefore(rootNode, options, acceptor, cancelToken = CancellationToken.None) {\n        var _a;\n        const checksBefore = this.validationRegistry.checksBefore;\n        for (const checkBefore of checksBefore) {\n            await interruptAndCheck(cancelToken);\n            await checkBefore(rootNode, acceptor, (_a = options.categories) !== null && _a !== void 0 ? _a : [], cancelToken);\n        }\n    }\n    async validateAstNodes(rootNode, options, acceptor, cancelToken = CancellationToken.None) {\n        await Promise.all(streamAst(rootNode).map(async (node) => {\n            await interruptAndCheck(cancelToken);\n            const checks = this.validationRegistry.getChecks(node.$type, options.categories);\n            for (const check of checks) {\n                await check(node, acceptor, cancelToken);\n            }\n        }));\n    }\n    async validateAstAfter(rootNode, options, acceptor, cancelToken = CancellationToken.None) {\n        var _a;\n        const checksAfter = this.validationRegistry.checksAfter;\n        for (const checkAfter of checksAfter) {\n            await interruptAndCheck(cancelToken);\n            await checkAfter(rootNode, acceptor, (_a = options.categories) !== null && _a !== void 0 ? _a : [], cancelToken);\n        }\n    }\n    toDiagnostic(severity, message, info) {\n        return {\n            message,\n            range: getDiagnosticRange(info),\n            severity: toDiagnosticSeverity(severity),\n            code: info.code,\n            codeDescription: info.codeDescription,\n            tags: info.tags,\n            relatedInformation: info.relatedInformation,\n            data: info.data,\n            source: this.getSource()\n        };\n    }\n    getSource() {\n        return this.metadata.languageId;\n    }\n}\nexport function getDiagnosticRange(info) {\n    if (info.range) {\n        return info.range;\n    }\n    let cstNode;\n    if (typeof info.property === 'string') {\n        cstNode = findNodeForProperty(info.node.$cstNode, info.property, info.index);\n    }\n    else if (typeof info.keyword === 'string') {\n        cstNode = findNodeForKeyword(info.node.$cstNode, info.keyword, info.index);\n    }\n    cstNode !== null && cstNode !== void 0 ? cstNode : (cstNode = info.node.$cstNode);\n    if (!cstNode) {\n        return {\n            start: { line: 0, character: 0 },\n            end: { line: 0, character: 0 }\n        };\n    }\n    return cstNode.range;\n}\n/**\n * Transforms the diagnostic severity from the {@link LexingDiagnosticSeverity} format to LSP's `DiagnosticSeverity` format.\n *\n * @param severity The lexing diagnostic severity\n * @returns Diagnostic severity according to `vscode-languageserver-types/lib/esm/main.js#DiagnosticSeverity`\n */\nexport function toDiagnosticSeverity(severity) {\n    switch (severity) {\n        case 'error':\n            return 1;\n        case 'warning':\n            return 2;\n        case 'info':\n            return 3;\n        case 'hint':\n            return 4;\n        default:\n            throw new Error('Invalid diagnostic severity: ' + severity);\n    }\n}\nexport function toDiagnosticData(severity) {\n    switch (severity) {\n        case 'error':\n            return diagnosticData(DocumentValidator.LexingError);\n        case 'warning':\n            return diagnosticData(DocumentValidator.LexingWarning);\n        case 'info':\n            return diagnosticData(DocumentValidator.LexingInfo);\n        case 'hint':\n            return diagnosticData(DocumentValidator.LexingHint);\n        default:\n            throw new Error('Invalid diagnostic severity: ' + severity);\n    }\n}\nexport var DocumentValidator;\n(function (DocumentValidator) {\n    DocumentValidator.LexingError = 'lexing-error';\n    DocumentValidator.LexingWarning = 'lexing-warning';\n    DocumentValidator.LexingInfo = 'lexing-info';\n    DocumentValidator.LexingHint = 'lexing-hint';\n    DocumentValidator.ParsingError = 'parsing-error';\n    DocumentValidator.LinkingError = 'linking-error';\n})(DocumentValidator || (DocumentValidator = {}));\n//# sourceMappingURL=document-validator.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { isLinkingError } from '../syntax-tree.js';\nimport { getDocument, streamAst, streamReferences } from '../utils/ast-utils.js';\nimport { toDocumentSegment } from '../utils/cst-utils.js';\nimport { interruptAndCheck } from '../utils/promise-utils.js';\nimport { UriUtils } from '../utils/uri-utils.js';\nexport class DefaultAstNodeDescriptionProvider {\n    constructor(services) {\n        this.astNodeLocator = services.workspace.AstNodeLocator;\n        this.nameProvider = services.references.NameProvider;\n    }\n    createDescription(node, name, document) {\n        const doc = document !== null && document !== void 0 ? document : getDocument(node);\n        name !== null && name !== void 0 ? name : (name = this.nameProvider.getName(node));\n        const path = this.astNodeLocator.getAstNodePath(node);\n        if (!name) {\n            throw new Error(`Node at path ${path} has no name.`);\n        }\n        let nameNodeSegment;\n        const nameSegmentGetter = () => { var _a; return nameNodeSegment !== null && nameNodeSegment !== void 0 ? nameNodeSegment : (nameNodeSegment = toDocumentSegment((_a = this.nameProvider.getNameNode(node)) !== null && _a !== void 0 ? _a : node.$cstNode)); };\n        return {\n            node,\n            name,\n            get nameSegment() {\n                return nameSegmentGetter();\n            },\n            selectionSegment: toDocumentSegment(node.$cstNode),\n            type: node.$type,\n            documentUri: doc.uri,\n            path\n        };\n    }\n}\nexport class DefaultReferenceDescriptionProvider {\n    constructor(services) {\n        this.nodeLocator = services.workspace.AstNodeLocator;\n    }\n    async createDescriptions(document, cancelToken = CancellationToken.None) {\n        const descr = [];\n        const rootNode = document.parseResult.value;\n        for (const astNode of streamAst(rootNode)) {\n            await interruptAndCheck(cancelToken);\n            streamReferences(astNode).filter(refInfo => !isLinkingError(refInfo)).forEach(refInfo => {\n                // TODO: Consider logging a warning or throw an exception when DocumentState is < than Linked\n                const description = this.createDescription(refInfo);\n                if (description) {\n                    descr.push(description);\n                }\n            });\n        }\n        return descr;\n    }\n    createDescription(refInfo) {\n        const targetNodeDescr = refInfo.reference.$nodeDescription;\n        const refCstNode = refInfo.reference.$refNode;\n        if (!targetNodeDescr || !refCstNode) {\n            return undefined;\n        }\n        const docUri = getDocument(refInfo.container).uri;\n        return {\n            sourceUri: docUri,\n            sourcePath: this.nodeLocator.getAstNodePath(refInfo.container),\n            targetUri: targetNodeDescr.documentUri,\n            targetPath: targetNodeDescr.path,\n            segment: toDocumentSegment(refCstNode),\n            local: UriUtils.equals(targetNodeDescr.documentUri, docUri)\n        };\n    }\n}\n//# sourceMappingURL=ast-descriptions.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport class DefaultAstNodeLocator {\n    constructor() {\n        this.segmentSeparator = '/';\n        this.indexSeparator = '@';\n    }\n    getAstNodePath(node) {\n        if (node.$container) {\n            const containerPath = this.getAstNodePath(node.$container);\n            const newSegment = this.getPathSegment(node);\n            const nodePath = containerPath + this.segmentSeparator + newSegment;\n            return nodePath;\n        }\n        return '';\n    }\n    getPathSegment({ $containerProperty, $containerIndex }) {\n        if (!$containerProperty) {\n            throw new Error(\"Missing '$containerProperty' in AST node.\");\n        }\n        if ($containerIndex !== undefined) {\n            return $containerProperty + this.indexSeparator + $containerIndex;\n        }\n        return $containerProperty;\n    }\n    getAstNode(node, path) {\n        const segments = path.split(this.segmentSeparator);\n        return segments.reduce((previousValue, currentValue) => {\n            if (!previousValue || currentValue.length === 0) {\n                return previousValue;\n            }\n            const propertyIndex = currentValue.indexOf(this.indexSeparator);\n            if (propertyIndex > 0) {\n                const property = currentValue.substring(0, propertyIndex);\n                const arrayIndex = parseInt(currentValue.substring(propertyIndex + 1));\n                const array = previousValue[property];\n                return array === null || array === void 0 ? void 0 : array[arrayIndex];\n            }\n            return previousValue[currentValue];\n        }, node);\n    }\n}\n//# sourceMappingURL=ast-node-locator.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Emitter } from '../utils/event.js';\nimport { Deferred } from '../utils/promise-utils.js';\n/**\n * Base configuration provider for building up other configuration providers\n */\nexport class DefaultConfigurationProvider {\n    constructor(services) {\n        this._ready = new Deferred();\n        this.settings = {};\n        this.workspaceConfig = false;\n        this.onConfigurationSectionUpdateEmitter = new Emitter();\n        this.serviceRegistry = services.ServiceRegistry;\n    }\n    get ready() {\n        return this._ready.promise;\n    }\n    initialize(params) {\n        var _a, _b;\n        this.workspaceConfig = (_b = (_a = params.capabilities.workspace) === null || _a === void 0 ? void 0 : _a.configuration) !== null && _b !== void 0 ? _b : false;\n    }\n    async initialized(params) {\n        if (this.workspaceConfig) {\n            if (params.register) {\n                // params.register(...) is a function to be provided by the calling language server for the sake of\n                //  decoupling this implementation from the concrete LSP implementations, specifically the LSP Connection\n                const languages = this.serviceRegistry.all;\n                params.register({\n                    // Listen to configuration changes for all languages\n                    section: languages.map(lang => this.toSectionName(lang.LanguageMetaData.languageId))\n                });\n            }\n            if (params.fetchConfiguration) {\n                // params.fetchConfiguration(...) is a function to be provided by the calling language server for the sake of\n                //  decoupling this implementation from the concrete LSP implementations, specifically the LSP Connection\n                const configToUpdate = this.serviceRegistry.all.map(lang => ({\n                    // Fetch the configuration changes for all languages\n                    section: this.toSectionName(lang.LanguageMetaData.languageId)\n                }));\n                // get workspace configurations (default scope URI)\n                const configs = await params.fetchConfiguration(configToUpdate);\n                configToUpdate.forEach((conf, idx) => {\n                    this.updateSectionConfiguration(conf.section, configs[idx]);\n                });\n            }\n        }\n        this._ready.resolve();\n    }\n    /**\n     *  Updates the cached configurations using the `change` notification parameters.\n     *\n     * @param change The parameters of a change configuration notification.\n     * `settings` property of the change object could be expressed as `Record<string, Record<string, any>>`\n     */\n    updateConfiguration(change) {\n        if (!change.settings) {\n            return;\n        }\n        Object.keys(change.settings).forEach(section => {\n            const configuration = change.settings[section];\n            this.updateSectionConfiguration(section, configuration);\n            this.onConfigurationSectionUpdateEmitter.fire({ section, configuration });\n        });\n    }\n    updateSectionConfiguration(section, configuration) {\n        this.settings[section] = configuration;\n    }\n    /**\n    * Returns a configuration value stored for the given language.\n    *\n    * @param language The language id\n    * @param configuration Configuration name\n    */\n    async getConfiguration(language, configuration) {\n        await this.ready;\n        const sectionName = this.toSectionName(language);\n        if (this.settings[sectionName]) {\n            return this.settings[sectionName][configuration];\n        }\n    }\n    toSectionName(languageId) {\n        return `${languageId}`;\n    }\n    get onConfigurationSectionUpdate() {\n        return this.onConfigurationSectionUpdateEmitter.event;\n    }\n}\n//# sourceMappingURL=configuration.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport var Disposable;\n(function (Disposable) {\n    function create(callback) {\n        return {\n            dispose: async () => await callback()\n        };\n    }\n    Disposable.create = create;\n})(Disposable || (Disposable = {}));\n//# sourceMappingURL=disposable.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { Disposable } from '../utils/disposable.js';\nimport { MultiMap } from '../utils/collections.js';\nimport { OperationCancelled, interruptAndCheck, isOperationCancelled } from '../utils/promise-utils.js';\nimport { stream } from '../utils/stream.js';\nimport { ValidationCategory } from '../validation/validation-registry.js';\nimport { DocumentState } from './documents.js';\nexport class DefaultDocumentBuilder {\n    constructor(services) {\n        this.updateBuildOptions = {\n            // Default: run only the built-in validation checks and those in the _fast_ category (includes those without category)\n            validation: {\n                categories: ['built-in', 'fast']\n            }\n        };\n        this.updateListeners = [];\n        this.buildPhaseListeners = new MultiMap();\n        this.documentPhaseListeners = new MultiMap();\n        this.buildState = new Map();\n        this.documentBuildWaiters = new Map();\n        this.currentState = DocumentState.Changed;\n        this.langiumDocuments = services.workspace.LangiumDocuments;\n        this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;\n        this.textDocuments = services.workspace.TextDocuments;\n        this.indexManager = services.workspace.IndexManager;\n        this.serviceRegistry = services.ServiceRegistry;\n    }\n    async build(documents, options = {}, cancelToken = CancellationToken.None) {\n        var _a, _b;\n        for (const document of documents) {\n            const key = document.uri.toString();\n            if (document.state === DocumentState.Validated) {\n                if (typeof options.validation === 'boolean' && options.validation) {\n                    // Force re-running all validation checks\n                    document.state = DocumentState.IndexedReferences;\n                    document.diagnostics = undefined;\n                    this.buildState.delete(key);\n                }\n                else if (typeof options.validation === 'object') {\n                    const buildState = this.buildState.get(key);\n                    const previousCategories = (_a = buildState === null || buildState === void 0 ? void 0 : buildState.result) === null || _a === void 0 ? void 0 : _a.validationChecks;\n                    if (previousCategories) {\n                        // Validation with explicit options was requested for a document that has already been partly validated.\n                        // In this case, we need to merge the previous validation categories with the new ones.\n                        const newCategories = (_b = options.validation.categories) !== null && _b !== void 0 ? _b : ValidationCategory.all;\n                        const categories = newCategories.filter(c => !previousCategories.includes(c));\n                        if (categories.length > 0) {\n                            this.buildState.set(key, {\n                                completed: false,\n                                options: {\n                                    validation: Object.assign(Object.assign({}, options.validation), { categories })\n                                },\n                                result: buildState.result\n                            });\n                            document.state = DocumentState.IndexedReferences;\n                        }\n                    }\n                }\n            }\n            else {\n                // Default: forget any previous build options\n                this.buildState.delete(key);\n            }\n        }\n        this.currentState = DocumentState.Changed;\n        await this.emitUpdate(documents.map(e => e.uri), []);\n        await this.buildDocuments(documents, options, cancelToken);\n    }\n    async update(changed, deleted, cancelToken = CancellationToken.None) {\n        this.currentState = DocumentState.Changed;\n        // Remove all metadata of documents that are reported as deleted\n        for (const deletedUri of deleted) {\n            this.langiumDocuments.deleteDocument(deletedUri);\n            this.buildState.delete(deletedUri.toString());\n            this.indexManager.remove(deletedUri);\n        }\n        // Set the state of all changed documents to `Changed` so they are completely rebuilt\n        for (const changedUri of changed) {\n            const invalidated = this.langiumDocuments.invalidateDocument(changedUri);\n            if (!invalidated) {\n                // We create an unparsed, invalid document.\n                // This will be parsed as soon as we reach the first document builder phase.\n                // This allows to cancel the parsing process later in case we need it.\n                const newDocument = this.langiumDocumentFactory.fromModel({ $type: 'INVALID' }, changedUri);\n                newDocument.state = DocumentState.Changed;\n                this.langiumDocuments.addDocument(newDocument);\n            }\n            this.buildState.delete(changedUri.toString());\n        }\n        // Set the state of all documents that should be relinked to `ComputedScopes` (if not already lower)\n        const allChangedUris = stream(changed).concat(deleted).map(uri => uri.toString()).toSet();\n        this.langiumDocuments.all\n            .filter(doc => !allChangedUris.has(doc.uri.toString()) && this.shouldRelink(doc, allChangedUris))\n            .forEach(doc => {\n            const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;\n            linker.unlink(doc);\n            doc.state = Math.min(doc.state, DocumentState.ComputedScopes);\n            doc.diagnostics = undefined;\n        });\n        // Notify listeners of the update\n        await this.emitUpdate(changed, deleted);\n        // Only allow interrupting the execution after all state changes are done\n        await interruptAndCheck(cancelToken);\n        // Collect and sort all documents that we should rebuild\n        const rebuildDocuments = this.sortDocuments(this.langiumDocuments.all\n            .filter(doc => {\n            var _a;\n            // This includes those that were reported as changed and those that we selected for relinking\n            return doc.state < DocumentState.Linked\n                // This includes those for which a previous build has been cancelled\n                || !((_a = this.buildState.get(doc.uri.toString())) === null || _a === void 0 ? void 0 : _a.completed);\n        })\n            .toArray());\n        await this.buildDocuments(rebuildDocuments, this.updateBuildOptions, cancelToken);\n    }\n    async emitUpdate(changed, deleted) {\n        await Promise.all(this.updateListeners.map(listener => listener(changed, deleted)));\n    }\n    /**\n     * Sort the given documents by priority. By default, documents with an open text document are prioritized.\n     * This is useful to ensure that visible documents show their diagnostics before all other documents.\n     *\n     * This improves the responsiveness in large workspaces as users usually don't care about diagnostics\n     * in files that are currently not opened in the editor.\n     */\n    sortDocuments(documents) {\n        let left = 0;\n        let right = documents.length - 1;\n        while (left < right) {\n            while (left < documents.length && this.hasTextDocument(documents[left])) {\n                left++;\n            }\n            while (right >= 0 && !this.hasTextDocument(documents[right])) {\n                right--;\n            }\n            if (left < right) {\n                [documents[left], documents[right]] = [documents[right], documents[left]];\n            }\n        }\n        return documents;\n    }\n    hasTextDocument(doc) {\n        var _a;\n        return Boolean((_a = this.textDocuments) === null || _a === void 0 ? void 0 : _a.get(doc.uri));\n    }\n    /**\n     * Check whether the given document should be relinked after changes were found in the given URIs.\n     */\n    shouldRelink(document, changedUris) {\n        // Relink documents with linking errors -- maybe those references can be resolved now\n        if (document.references.some(ref => ref.error !== undefined)) {\n            return true;\n        }\n        // Check whether the document is affected by any of the changed URIs\n        return this.indexManager.isAffected(document, changedUris);\n    }\n    onUpdate(callback) {\n        this.updateListeners.push(callback);\n        return Disposable.create(() => {\n            const index = this.updateListeners.indexOf(callback);\n            if (index >= 0) {\n                this.updateListeners.splice(index, 1);\n            }\n        });\n    }\n    /**\n     * Build the given documents by stepping through all build phases. If a document's state indicates\n     * that a certain build phase is already done, the phase is skipped for that document.\n     *\n     * @param documents The documents to build.\n     * @param options the {@link BuildOptions} to use.\n     * @param cancelToken A cancellation token that can be used to cancel the build.\n     * @returns A promise that resolves when the build is done.\n     */\n    async buildDocuments(documents, options, cancelToken) {\n        this.prepareBuild(documents, options);\n        // 0. Parse content\n        await this.runCancelable(documents, DocumentState.Parsed, cancelToken, doc => this.langiumDocumentFactory.update(doc, cancelToken));\n        // 1. Index content\n        await this.runCancelable(documents, DocumentState.IndexedContent, cancelToken, doc => this.indexManager.updateContent(doc, cancelToken));\n        // 2. Compute scopes\n        await this.runCancelable(documents, DocumentState.ComputedScopes, cancelToken, async (doc) => {\n            const scopeComputation = this.serviceRegistry.getServices(doc.uri).references.ScopeComputation;\n            doc.precomputedScopes = await scopeComputation.computeLocalScopes(doc, cancelToken);\n        });\n        // 3. Linking\n        await this.runCancelable(documents, DocumentState.Linked, cancelToken, doc => {\n            const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;\n            return linker.link(doc, cancelToken);\n        });\n        // 4. Index references\n        await this.runCancelable(documents, DocumentState.IndexedReferences, cancelToken, doc => this.indexManager.updateReferences(doc, cancelToken));\n        // 5. Validation\n        const toBeValidated = documents.filter(doc => this.shouldValidate(doc));\n        await this.runCancelable(toBeValidated, DocumentState.Validated, cancelToken, doc => this.validate(doc, cancelToken));\n        // If we've made it to this point without being cancelled, we can mark the build state as completed.\n        for (const doc of documents) {\n            const state = this.buildState.get(doc.uri.toString());\n            if (state) {\n                state.completed = true;\n            }\n        }\n    }\n    /**\n     * Runs prior to beginning the build process to update the {@link DocumentBuildState} for each document\n     *\n     * @param documents collection of documents to be built\n     * @param options the {@link BuildOptions} to use\n     */\n    prepareBuild(documents, options) {\n        for (const doc of documents) {\n            const key = doc.uri.toString();\n            const state = this.buildState.get(key);\n            // If the document has no previous build state, we set it. If it has one, but it's already marked\n            // as completed, we overwrite it. If the previous build was not completed, we keep its state\n            // and continue where it was cancelled.\n            if (!state || state.completed) {\n                this.buildState.set(key, {\n                    completed: false,\n                    options,\n                    result: state === null || state === void 0 ? void 0 : state.result\n                });\n            }\n        }\n    }\n    /**\n     * Runs a cancelable operation on a set of documents to bring them to a specified {@link DocumentState}.\n     *\n     * @param documents The array of documents to process.\n     * @param targetState The target {@link DocumentState} to bring the documents to.\n     * @param cancelToken A token that can be used to cancel the operation.\n     * @param callback A function to be called for each document.\n     * @returns A promise that resolves when all documents have been processed or the operation is canceled.\n     * @throws Will throw `OperationCancelled` if the operation is canceled via a `CancellationToken`.\n     */\n    async runCancelable(documents, targetState, cancelToken, callback) {\n        const filtered = documents.filter(doc => doc.state < targetState);\n        for (const document of filtered) {\n            await interruptAndCheck(cancelToken);\n            await callback(document);\n            document.state = targetState;\n            await this.notifyDocumentPhase(document, targetState, cancelToken);\n        }\n        // Do not use `filtered` here, as that will miss documents that have previously reached the current target state\n        // For example, this happens in case the cancellation triggers between the processing of two documents\n        // Or files that were picked up during the workspace initialization\n        const targetStateDocs = documents.filter(doc => doc.state === targetState);\n        await this.notifyBuildPhase(targetStateDocs, targetState, cancelToken);\n        this.currentState = targetState;\n    }\n    onBuildPhase(targetState, callback) {\n        this.buildPhaseListeners.add(targetState, callback);\n        return Disposable.create(() => {\n            this.buildPhaseListeners.delete(targetState, callback);\n        });\n    }\n    onDocumentPhase(targetState, callback) {\n        this.documentPhaseListeners.add(targetState, callback);\n        return Disposable.create(() => {\n            this.documentPhaseListeners.delete(targetState, callback);\n        });\n    }\n    waitUntil(state, uriOrToken, cancelToken) {\n        let uri = undefined;\n        if (uriOrToken && 'path' in uriOrToken) {\n            uri = uriOrToken;\n        }\n        else {\n            cancelToken = uriOrToken;\n        }\n        cancelToken !== null && cancelToken !== void 0 ? cancelToken : (cancelToken = CancellationToken.None);\n        if (uri) {\n            const document = this.langiumDocuments.getDocument(uri);\n            if (document && document.state > state) {\n                return Promise.resolve(uri);\n            }\n        }\n        if (this.currentState >= state) {\n            return Promise.resolve(undefined);\n        }\n        else if (cancelToken.isCancellationRequested) {\n            return Promise.reject(OperationCancelled);\n        }\n        return new Promise((resolve, reject) => {\n            const buildDisposable = this.onBuildPhase(state, () => {\n                buildDisposable.dispose();\n                cancelDisposable.dispose();\n                if (uri) {\n                    const document = this.langiumDocuments.getDocument(uri);\n                    resolve(document === null || document === void 0 ? void 0 : document.uri);\n                }\n                else {\n                    resolve(undefined);\n                }\n            });\n            const cancelDisposable = cancelToken.onCancellationRequested(() => {\n                buildDisposable.dispose();\n                cancelDisposable.dispose();\n                reject(OperationCancelled);\n            });\n        });\n    }\n    async notifyDocumentPhase(document, state, cancelToken) {\n        const listeners = this.documentPhaseListeners.get(state);\n        const listenersCopy = listeners.slice();\n        for (const listener of listenersCopy) {\n            try {\n                await listener(document, cancelToken);\n            }\n            catch (err) {\n                // Ignore cancellation errors\n                // We want to finish the listeners before throwing\n                if (!isOperationCancelled(err)) {\n                    throw err;\n                }\n            }\n        }\n    }\n    async notifyBuildPhase(documents, state, cancelToken) {\n        if (documents.length === 0) {\n            // Don't notify when no document has been processed\n            return;\n        }\n        const listeners = this.buildPhaseListeners.get(state);\n        const listenersCopy = listeners.slice();\n        for (const listener of listenersCopy) {\n            await interruptAndCheck(cancelToken);\n            await listener(documents, cancelToken);\n        }\n    }\n    /**\n     * Determine whether the given document should be validated during a build. The default\n     * implementation checks the `validation` property of the build options. If it's set to `true`\n     * or a `ValidationOptions` object, the document is included in the validation phase.\n     */\n    shouldValidate(document) {\n        return Boolean(this.getBuildOptions(document).validation);\n    }\n    /**\n     * Run validation checks on the given document and store the resulting diagnostics in the document.\n     * If the document already contains diagnostics, the new ones are added to the list.\n     */\n    async validate(document, cancelToken) {\n        var _a, _b;\n        const validator = this.serviceRegistry.getServices(document.uri).validation.DocumentValidator;\n        const validationSetting = this.getBuildOptions(document).validation;\n        const options = typeof validationSetting === 'object' ? validationSetting : undefined;\n        const diagnostics = await validator.validateDocument(document, options, cancelToken);\n        if (document.diagnostics) {\n            document.diagnostics.push(...diagnostics);\n        }\n        else {\n            document.diagnostics = diagnostics;\n        }\n        // Store information about the executed validation in the build state\n        const state = this.buildState.get(document.uri.toString());\n        if (state) {\n            (_a = state.result) !== null && _a !== void 0 ? _a : (state.result = {});\n            const newCategories = (_b = options === null || options === void 0 ? void 0 : options.categories) !== null && _b !== void 0 ? _b : ValidationCategory.all;\n            if (state.result.validationChecks) {\n                state.result.validationChecks.push(...newCategories);\n            }\n            else {\n                state.result.validationChecks = [...newCategories];\n            }\n        }\n    }\n    getBuildOptions(document) {\n        var _a, _b;\n        return (_b = (_a = this.buildState.get(document.uri.toString())) === null || _a === void 0 ? void 0 : _a.options) !== null && _b !== void 0 ? _b : {};\n    }\n}\n//# sourceMappingURL=document-builder.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { getDocument } from '../utils/ast-utils.js';\nimport { ContextCache } from '../utils/caching.js';\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { stream } from '../utils/stream.js';\nimport { UriUtils } from '../utils/uri-utils.js';\nexport class DefaultIndexManager {\n    constructor(services) {\n        /**\n         * The symbol index stores all `AstNodeDescription` items exported by a document.\n         * The key used in this map is the string representation of the specific document URI.\n         */\n        this.symbolIndex = new Map();\n        /**\n         * This is a cache for the `allElements()` method.\n         * It caches the descriptions from `symbolIndex` grouped by types.\n         */\n        this.symbolByTypeIndex = new ContextCache();\n        /**\n         * This index keeps track of all `ReferenceDescription` items exported by a document.\n         * This is used to compute which elements are affected by a document change\n         * and for finding references to an AST node.\n         */\n        this.referenceIndex = new Map();\n        this.documents = services.workspace.LangiumDocuments;\n        this.serviceRegistry = services.ServiceRegistry;\n        this.astReflection = services.AstReflection;\n    }\n    findAllReferences(targetNode, astNodePath) {\n        const targetDocUri = getDocument(targetNode).uri;\n        const result = [];\n        this.referenceIndex.forEach(docRefs => {\n            docRefs.forEach(refDescr => {\n                if (UriUtils.equals(refDescr.targetUri, targetDocUri) && refDescr.targetPath === astNodePath) {\n                    result.push(refDescr);\n                }\n            });\n        });\n        return stream(result);\n    }\n    allElements(nodeType, uris) {\n        let documentUris = stream(this.symbolIndex.keys());\n        if (uris) {\n            documentUris = documentUris.filter(uri => !uris || uris.has(uri));\n        }\n        return documentUris\n            .map(uri => this.getFileDescriptions(uri, nodeType))\n            .flat();\n    }\n    getFileDescriptions(uri, nodeType) {\n        var _a;\n        if (!nodeType) {\n            return (_a = this.symbolIndex.get(uri)) !== null && _a !== void 0 ? _a : [];\n        }\n        const descriptions = this.symbolByTypeIndex.get(uri, nodeType, () => {\n            var _a;\n            const allFileDescriptions = (_a = this.symbolIndex.get(uri)) !== null && _a !== void 0 ? _a : [];\n            return allFileDescriptions.filter(e => this.astReflection.isSubtype(e.type, nodeType));\n        });\n        return descriptions;\n    }\n    remove(uri) {\n        const uriString = uri.toString();\n        this.symbolIndex.delete(uriString);\n        this.symbolByTypeIndex.clear(uriString);\n        this.referenceIndex.delete(uriString);\n    }\n    async updateContent(document, cancelToken = CancellationToken.None) {\n        const services = this.serviceRegistry.getServices(document.uri);\n        const exports = await services.references.ScopeComputation.computeExports(document, cancelToken);\n        const uri = document.uri.toString();\n        this.symbolIndex.set(uri, exports);\n        this.symbolByTypeIndex.clear(uri);\n    }\n    async updateReferences(document, cancelToken = CancellationToken.None) {\n        const services = this.serviceRegistry.getServices(document.uri);\n        const indexData = await services.workspace.ReferenceDescriptionProvider.createDescriptions(document, cancelToken);\n        this.referenceIndex.set(document.uri.toString(), indexData);\n    }\n    isAffected(document, changedUris) {\n        const references = this.referenceIndex.get(document.uri.toString());\n        if (!references) {\n            return false;\n        }\n        return references.some(ref => !ref.local && changedUris.has(ref.targetUri.toString()));\n    }\n}\n//# sourceMappingURL=index-manager.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken } from '../utils/cancellation.js';\nimport { Deferred, interruptAndCheck } from '../utils/promise-utils.js';\nimport { URI, UriUtils } from '../utils/uri-utils.js';\nexport class DefaultWorkspaceManager {\n    constructor(services) {\n        this.initialBuildOptions = {};\n        this._ready = new Deferred();\n        this.serviceRegistry = services.ServiceRegistry;\n        this.langiumDocuments = services.workspace.LangiumDocuments;\n        this.documentBuilder = services.workspace.DocumentBuilder;\n        this.fileSystemProvider = services.workspace.FileSystemProvider;\n        this.mutex = services.workspace.WorkspaceLock;\n    }\n    get ready() {\n        return this._ready.promise;\n    }\n    get workspaceFolders() {\n        return this.folders;\n    }\n    initialize(params) {\n        var _a;\n        this.folders = (_a = params.workspaceFolders) !== null && _a !== void 0 ? _a : undefined;\n    }\n    initialized(_params) {\n        // Initialize the workspace even if there are no workspace folders\n        // We still want to load additional documents (language library or similar) during initialization\n        return this.mutex.write(token => { var _a; return this.initializeWorkspace((_a = this.folders) !== null && _a !== void 0 ? _a : [], token); });\n    }\n    async initializeWorkspace(folders, cancelToken = CancellationToken.None) {\n        const documents = await this.performStartup(folders);\n        // Only after creating all documents do we check whether we need to cancel the initialization\n        // The document builder will later pick up on all unprocessed documents\n        await interruptAndCheck(cancelToken);\n        await this.documentBuilder.build(documents, this.initialBuildOptions, cancelToken);\n    }\n    /**\n     * Performs the uninterruptable startup sequence of the workspace manager.\n     * This methods loads all documents in the workspace and other documents and returns them.\n     */\n    async performStartup(folders) {\n        const fileExtensions = this.serviceRegistry.all.flatMap(e => e.LanguageMetaData.fileExtensions);\n        const documents = [];\n        const collector = (document) => {\n            documents.push(document);\n            if (!this.langiumDocuments.hasDocument(document.uri)) {\n                this.langiumDocuments.addDocument(document);\n            }\n        };\n        // Even though we don't await the initialization of the workspace manager,\n        // we can still assume that all library documents and file documents are loaded by the time we start building documents.\n        // The mutex prevents anything from performing a workspace build until we check the cancellation token\n        await this.loadAdditionalDocuments(folders, collector);\n        await Promise.all(folders.map(wf => [wf, this.getRootFolder(wf)])\n            .map(async (entry) => this.traverseFolder(...entry, fileExtensions, collector)));\n        this._ready.resolve();\n        return documents;\n    }\n    /**\n     * Load all additional documents that shall be visible in the context of the given workspace\n     * folders and add them to the collector. This can be used to include built-in libraries of\n     * your language, which can be either loaded from provided files or constructed in memory.\n     */\n    loadAdditionalDocuments(_folders, _collector) {\n        return Promise.resolve();\n    }\n    /**\n     * Determine the root folder of the source documents in the given workspace folder.\n     * The default implementation returns the URI of the workspace folder, but you can override\n     * this to return a subfolder like `src` instead.\n     */\n    getRootFolder(workspaceFolder) {\n        return URI.parse(workspaceFolder.uri);\n    }\n    /**\n     * Traverse the file system folder identified by the given URI and its subfolders. All\n     * contained files that match the file extensions are added to the collector.\n     */\n    async traverseFolder(workspaceFolder, folderPath, fileExtensions, collector) {\n        const content = await this.fileSystemProvider.readDirectory(folderPath);\n        await Promise.all(content.map(async (entry) => {\n            if (this.includeEntry(workspaceFolder, entry, fileExtensions)) {\n                if (entry.isDirectory) {\n                    await this.traverseFolder(workspaceFolder, entry.uri, fileExtensions, collector);\n                }\n                else if (entry.isFile) {\n                    const document = await this.langiumDocuments.getOrCreateDocument(entry.uri);\n                    collector(document);\n                }\n            }\n        }));\n    }\n    /**\n     * Determine whether the given folder entry shall be included while indexing the workspace.\n     */\n    includeEntry(_workspaceFolder, entry, fileExtensions) {\n        const name = UriUtils.basename(entry.uri);\n        if (name.startsWith('.')) {\n            return false;\n        }\n        if (entry.isDirectory) {\n            return name !== 'node_modules' && name !== 'out';\n        }\n        else if (entry.isFile) {\n            const extname = UriUtils.extname(entry.uri);\n            return fileExtensions.includes(extname);\n        }\n        return false;\n    }\n}\n//# sourceMappingURL=workspace-manager.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Lexer as ChevrotainLexer, defaultLexerErrorProvider } from 'chevrotain';\nexport class DefaultLexerErrorMessageProvider {\n    buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column) {\n        return defaultLexerErrorProvider.buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column);\n    }\n    buildUnableToPopLexerModeMessage(token) {\n        return defaultLexerErrorProvider.buildUnableToPopLexerModeMessage(token);\n    }\n}\nexport const DEFAULT_TOKENIZE_OPTIONS = { mode: 'full' };\nexport class DefaultLexer {\n    constructor(services) {\n        this.errorMessageProvider = services.parser.LexerErrorMessageProvider;\n        this.tokenBuilder = services.parser.TokenBuilder;\n        const tokens = this.tokenBuilder.buildTokens(services.Grammar, {\n            caseInsensitive: services.LanguageMetaData.caseInsensitive\n        });\n        this.tokenTypes = this.toTokenTypeDictionary(tokens);\n        const lexerTokens = isTokenTypeDictionary(tokens) ? Object.values(tokens) : tokens;\n        const production = services.LanguageMetaData.mode === 'production';\n        this.chevrotainLexer = new ChevrotainLexer(lexerTokens, {\n            positionTracking: 'full',\n            skipValidations: production,\n            errorMessageProvider: this.errorMessageProvider\n        });\n    }\n    get definition() {\n        return this.tokenTypes;\n    }\n    tokenize(text, _options = DEFAULT_TOKENIZE_OPTIONS) {\n        var _a, _b, _c;\n        const chevrotainResult = this.chevrotainLexer.tokenize(text);\n        return {\n            tokens: chevrotainResult.tokens,\n            errors: chevrotainResult.errors,\n            hidden: (_a = chevrotainResult.groups.hidden) !== null && _a !== void 0 ? _a : [],\n            report: (_c = (_b = this.tokenBuilder).flushLexingReport) === null || _c === void 0 ? void 0 : _c.call(_b, text)\n        };\n    }\n    toTokenTypeDictionary(buildTokens) {\n        if (isTokenTypeDictionary(buildTokens))\n            return buildTokens;\n        const tokens = isIMultiModeLexerDefinition(buildTokens) ? Object.values(buildTokens.modes).flat() : buildTokens;\n        const res = {};\n        tokens.forEach(token => res[token.name] = token);\n        return res;\n    }\n}\n/**\n * Returns a check whether the given TokenVocabulary is TokenType array\n */\nexport function isTokenTypeArray(tokenVocabulary) {\n    return Array.isArray(tokenVocabulary) && (tokenVocabulary.length === 0 || 'name' in tokenVocabulary[0]);\n}\n/**\n * Returns a check whether the given TokenVocabulary is IMultiModeLexerDefinition\n */\nexport function isIMultiModeLexerDefinition(tokenVocabulary) {\n    return tokenVocabulary && 'modes' in tokenVocabulary && 'defaultMode' in tokenVocabulary;\n}\n/**\n * Returns a check whether the given TokenVocabulary is TokenTypeDictionary\n */\nexport function isTokenTypeDictionary(tokenVocabulary) {\n    return !isTokenTypeArray(tokenVocabulary) && !isIMultiModeLexerDefinition(tokenVocabulary);\n}\n//# sourceMappingURL=lexer.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Position, Range } from 'vscode-languageserver-types';\nimport { NEWLINE_REGEXP, escapeRegExp } from '../utils/regexp-utils.js';\nimport { URI } from '../utils/uri-utils.js';\nexport function parseJSDoc(node, start, options) {\n    let opts;\n    let position;\n    if (typeof node === 'string') {\n        position = start;\n        opts = options;\n    }\n    else {\n        position = node.range.start;\n        opts = start;\n    }\n    if (!position) {\n        position = Position.create(0, 0);\n    }\n    const lines = getLines(node);\n    const normalizedOptions = normalizeOptions(opts);\n    const tokens = tokenize({\n        lines,\n        position,\n        options: normalizedOptions\n    });\n    return parseJSDocComment({\n        index: 0,\n        tokens,\n        position\n    });\n}\nexport function isJSDoc(node, options) {\n    const normalizedOptions = normalizeOptions(options);\n    const lines = getLines(node);\n    if (lines.length === 0) {\n        return false;\n    }\n    const first = lines[0];\n    const last = lines[lines.length - 1];\n    const firstRegex = normalizedOptions.start;\n    const lastRegex = normalizedOptions.end;\n    return Boolean(firstRegex === null || firstRegex === void 0 ? void 0 : firstRegex.exec(first)) && Boolean(lastRegex === null || lastRegex === void 0 ? void 0 : lastRegex.exec(last));\n}\nfunction getLines(node) {\n    let content = '';\n    if (typeof node === 'string') {\n        content = node;\n    }\n    else {\n        content = node.text;\n    }\n    const lines = content.split(NEWLINE_REGEXP);\n    return lines;\n}\nconst tagRegex = /\\s*(@([\\p{L}][\\p{L}\\p{N}]*)?)/uy;\nconst inlineTagRegex = /\\{(@[\\p{L}][\\p{L}\\p{N}]*)(\\s*)([^\\r\\n}]+)?\\}/gu;\nfunction tokenize(context) {\n    var _a, _b, _c;\n    const tokens = [];\n    let currentLine = context.position.line;\n    let currentCharacter = context.position.character;\n    for (let i = 0; i < context.lines.length; i++) {\n        const first = i === 0;\n        const last = i === context.lines.length - 1;\n        let line = context.lines[i];\n        let index = 0;\n        if (first && context.options.start) {\n            const match = (_a = context.options.start) === null || _a === void 0 ? void 0 : _a.exec(line);\n            if (match) {\n                index = match.index + match[0].length;\n            }\n        }\n        else {\n            const match = (_b = context.options.line) === null || _b === void 0 ? void 0 : _b.exec(line);\n            if (match) {\n                index = match.index + match[0].length;\n            }\n        }\n        if (last) {\n            const match = (_c = context.options.end) === null || _c === void 0 ? void 0 : _c.exec(line);\n            if (match) {\n                line = line.substring(0, match.index);\n            }\n        }\n        line = line.substring(0, lastCharacter(line));\n        const whitespaceEnd = skipWhitespace(line, index);\n        if (whitespaceEnd >= line.length) {\n            // Only create a break token when we already have previous tokens\n            if (tokens.length > 0) {\n                const position = Position.create(currentLine, currentCharacter);\n                tokens.push({\n                    type: 'break',\n                    content: '',\n                    range: Range.create(position, position)\n                });\n            }\n        }\n        else {\n            tagRegex.lastIndex = index;\n            const tagMatch = tagRegex.exec(line);\n            if (tagMatch) {\n                const fullMatch = tagMatch[0];\n                const value = tagMatch[1];\n                const start = Position.create(currentLine, currentCharacter + index);\n                const end = Position.create(currentLine, currentCharacter + index + fullMatch.length);\n                tokens.push({\n                    type: 'tag',\n                    content: value,\n                    range: Range.create(start, end)\n                });\n                index += fullMatch.length;\n                index = skipWhitespace(line, index);\n            }\n            if (index < line.length) {\n                const rest = line.substring(index);\n                const inlineTagMatches = Array.from(rest.matchAll(inlineTagRegex));\n                tokens.push(...buildInlineTokens(inlineTagMatches, rest, currentLine, currentCharacter + index));\n            }\n        }\n        currentLine++;\n        currentCharacter = 0;\n    }\n    // Remove last break token if there is one\n    if (tokens.length > 0 && tokens[tokens.length - 1].type === 'break') {\n        return tokens.slice(0, -1);\n    }\n    return tokens;\n}\nfunction buildInlineTokens(tags, line, lineIndex, characterIndex) {\n    const tokens = [];\n    if (tags.length === 0) {\n        const start = Position.create(lineIndex, characterIndex);\n        const end = Position.create(lineIndex, characterIndex + line.length);\n        tokens.push({\n            type: 'text',\n            content: line,\n            range: Range.create(start, end)\n        });\n    }\n    else {\n        let lastIndex = 0;\n        for (const match of tags) {\n            const matchIndex = match.index;\n            const startContent = line.substring(lastIndex, matchIndex);\n            if (startContent.length > 0) {\n                tokens.push({\n                    type: 'text',\n                    content: line.substring(lastIndex, matchIndex),\n                    range: Range.create(Position.create(lineIndex, lastIndex + characterIndex), Position.create(lineIndex, matchIndex + characterIndex))\n                });\n            }\n            let offset = startContent.length + 1;\n            const tagName = match[1];\n            tokens.push({\n                type: 'inline-tag',\n                content: tagName,\n                range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + tagName.length + characterIndex))\n            });\n            offset += tagName.length;\n            if (match.length === 4) {\n                offset += match[2].length;\n                const value = match[3];\n                tokens.push({\n                    type: 'text',\n                    content: value,\n                    range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + value.length + characterIndex))\n                });\n            }\n            else {\n                tokens.push({\n                    type: 'text',\n                    content: '',\n                    range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + characterIndex))\n                });\n            }\n            lastIndex = matchIndex + match[0].length;\n        }\n        const endContent = line.substring(lastIndex);\n        if (endContent.length > 0) {\n            tokens.push({\n                type: 'text',\n                content: endContent,\n                range: Range.create(Position.create(lineIndex, lastIndex + characterIndex), Position.create(lineIndex, lastIndex + characterIndex + endContent.length))\n            });\n        }\n    }\n    return tokens;\n}\nconst nonWhitespaceRegex = /\\S/;\nconst whitespaceEndRegex = /\\s*$/;\nfunction skipWhitespace(line, index) {\n    const match = line.substring(index).match(nonWhitespaceRegex);\n    if (match) {\n        return index + match.index;\n    }\n    else {\n        return line.length;\n    }\n}\nfunction lastCharacter(line) {\n    const match = line.match(whitespaceEndRegex);\n    if (match && typeof match.index === 'number') {\n        return match.index;\n    }\n    return undefined;\n}\n// Parsing\nfunction parseJSDocComment(context) {\n    var _a, _b, _c, _d;\n    const startPosition = Position.create(context.position.line, context.position.character);\n    if (context.tokens.length === 0) {\n        return new JSDocCommentImpl([], Range.create(startPosition, startPosition));\n    }\n    const elements = [];\n    while (context.index < context.tokens.length) {\n        const element = parseJSDocElement(context, elements[elements.length - 1]);\n        if (element) {\n            elements.push(element);\n        }\n    }\n    const start = (_b = (_a = elements[0]) === null || _a === void 0 ? void 0 : _a.range.start) !== null && _b !== void 0 ? _b : startPosition;\n    const end = (_d = (_c = elements[elements.length - 1]) === null || _c === void 0 ? void 0 : _c.range.end) !== null && _d !== void 0 ? _d : startPosition;\n    return new JSDocCommentImpl(elements, Range.create(start, end));\n}\nfunction parseJSDocElement(context, last) {\n    const next = context.tokens[context.index];\n    if (next.type === 'tag') {\n        return parseJSDocTag(context, false);\n    }\n    else if (next.type === 'text' || next.type === 'inline-tag') {\n        return parseJSDocText(context);\n    }\n    else {\n        appendEmptyLine(next, last);\n        context.index++;\n        return undefined;\n    }\n}\nfunction appendEmptyLine(token, element) {\n    if (element) {\n        const line = new JSDocLineImpl('', token.range);\n        if ('inlines' in element) {\n            element.inlines.push(line);\n        }\n        else {\n            element.content.inlines.push(line);\n        }\n    }\n}\nfunction parseJSDocText(context) {\n    let token = context.tokens[context.index];\n    const firstToken = token;\n    let lastToken = token;\n    const lines = [];\n    while (token && token.type !== 'break' && token.type !== 'tag') {\n        lines.push(parseJSDocInline(context));\n        lastToken = token;\n        token = context.tokens[context.index];\n    }\n    return new JSDocTextImpl(lines, Range.create(firstToken.range.start, lastToken.range.end));\n}\nfunction parseJSDocInline(context) {\n    const token = context.tokens[context.index];\n    if (token.type === 'inline-tag') {\n        return parseJSDocTag(context, true);\n    }\n    else {\n        return parseJSDocLine(context);\n    }\n}\nfunction parseJSDocTag(context, inline) {\n    const tagToken = context.tokens[context.index++];\n    const name = tagToken.content.substring(1);\n    const nextToken = context.tokens[context.index];\n    if ((nextToken === null || nextToken === void 0 ? void 0 : nextToken.type) === 'text') {\n        if (inline) {\n            const docLine = parseJSDocLine(context);\n            return new JSDocTagImpl(name, new JSDocTextImpl([docLine], docLine.range), inline, Range.create(tagToken.range.start, docLine.range.end));\n        }\n        else {\n            const textDoc = parseJSDocText(context);\n            return new JSDocTagImpl(name, textDoc, inline, Range.create(tagToken.range.start, textDoc.range.end));\n        }\n    }\n    else {\n        const range = tagToken.range;\n        return new JSDocTagImpl(name, new JSDocTextImpl([], range), inline, range);\n    }\n}\nfunction parseJSDocLine(context) {\n    const token = context.tokens[context.index++];\n    return new JSDocLineImpl(token.content, token.range);\n}\nfunction normalizeOptions(options) {\n    if (!options) {\n        return normalizeOptions({\n            start: '/**',\n            end: '*/',\n            line: '*'\n        });\n    }\n    const { start, end, line } = options;\n    return {\n        start: normalizeOption(start, true),\n        end: normalizeOption(end, false),\n        line: normalizeOption(line, true)\n    };\n}\nfunction normalizeOption(option, start) {\n    if (typeof option === 'string' || typeof option === 'object') {\n        const escaped = typeof option === 'string' ? escapeRegExp(option) : option.source;\n        if (start) {\n            return new RegExp(`^\\\\s*${escaped}`);\n        }\n        else {\n            return new RegExp(`\\\\s*${escaped}\\\\s*$`);\n        }\n    }\n    else {\n        return option;\n    }\n}\nclass JSDocCommentImpl {\n    constructor(elements, range) {\n        this.elements = elements;\n        this.range = range;\n    }\n    getTag(name) {\n        return this.getAllTags().find(e => e.name === name);\n    }\n    getTags(name) {\n        return this.getAllTags().filter(e => e.name === name);\n    }\n    getAllTags() {\n        return this.elements.filter((e) => 'name' in e);\n    }\n    toString() {\n        let value = '';\n        for (const element of this.elements) {\n            if (value.length === 0) {\n                value = element.toString();\n            }\n            else {\n                const text = element.toString();\n                value += fillNewlines(value) + text;\n            }\n        }\n        return value.trim();\n    }\n    toMarkdown(options) {\n        let value = '';\n        for (const element of this.elements) {\n            if (value.length === 0) {\n                value = element.toMarkdown(options);\n            }\n            else {\n                const text = element.toMarkdown(options);\n                value += fillNewlines(value) + text;\n            }\n        }\n        return value.trim();\n    }\n}\nclass JSDocTagImpl {\n    constructor(name, content, inline, range) {\n        this.name = name;\n        this.content = content;\n        this.inline = inline;\n        this.range = range;\n    }\n    toString() {\n        let text = `@${this.name}`;\n        const content = this.content.toString();\n        if (this.content.inlines.length === 1) {\n            text = `${text} ${content}`;\n        }\n        else if (this.content.inlines.length > 1) {\n            text = `${text}\\n${content}`;\n        }\n        if (this.inline) {\n            // Inline tags are surrounded by curly braces\n            return `{${text}}`;\n        }\n        else {\n            return text;\n        }\n    }\n    toMarkdown(options) {\n        var _a, _b;\n        return (_b = (_a = options === null || options === void 0 ? void 0 : options.renderTag) === null || _a === void 0 ? void 0 : _a.call(options, this)) !== null && _b !== void 0 ? _b : this.toMarkdownDefault(options);\n    }\n    toMarkdownDefault(options) {\n        const content = this.content.toMarkdown(options);\n        if (this.inline) {\n            const rendered = renderInlineTag(this.name, content, options !== null && options !== void 0 ? options : {});\n            if (typeof rendered === 'string') {\n                return rendered;\n            }\n        }\n        let marker = '';\n        if ((options === null || options === void 0 ? void 0 : options.tag) === 'italic' || (options === null || options === void 0 ? void 0 : options.tag) === undefined) {\n            marker = '*';\n        }\n        else if ((options === null || options === void 0 ? void 0 : options.tag) === 'bold') {\n            marker = '**';\n        }\n        else if ((options === null || options === void 0 ? void 0 : options.tag) === 'bold-italic') {\n            marker = '***';\n        }\n        let text = `${marker}@${this.name}${marker}`;\n        if (this.content.inlines.length === 1) {\n            text = `${text} — ${content}`;\n        }\n        else if (this.content.inlines.length > 1) {\n            text = `${text}\\n${content}`;\n        }\n        if (this.inline) {\n            // Inline tags are surrounded by curly braces\n            return `{${text}}`;\n        }\n        else {\n            return text;\n        }\n    }\n}\nfunction renderInlineTag(tag, content, options) {\n    var _a, _b;\n    if (tag === 'linkplain' || tag === 'linkcode' || tag === 'link') {\n        const index = content.indexOf(' ');\n        let display = content;\n        if (index > 0) {\n            const displayStart = skipWhitespace(content, index);\n            display = content.substring(displayStart);\n            content = content.substring(0, index);\n        }\n        if (tag === 'linkcode' || (tag === 'link' && options.link === 'code')) {\n            // Surround the display value in a markdown inline code block\n            display = `\\`${display}\\``;\n        }\n        const renderedLink = (_b = (_a = options.renderLink) === null || _a === void 0 ? void 0 : _a.call(options, content, display)) !== null && _b !== void 0 ? _b : renderLinkDefault(content, display);\n        return renderedLink;\n    }\n    return undefined;\n}\nfunction renderLinkDefault(content, display) {\n    try {\n        URI.parse(content, true);\n        return `[${display}](${content})`;\n    }\n    catch (_a) {\n        return content;\n    }\n}\nclass JSDocTextImpl {\n    constructor(lines, range) {\n        this.inlines = lines;\n        this.range = range;\n    }\n    toString() {\n        let text = '';\n        for (let i = 0; i < this.inlines.length; i++) {\n            const inline = this.inlines[i];\n            const next = this.inlines[i + 1];\n            text += inline.toString();\n            if (next && next.range.start.line > inline.range.start.line) {\n                text += '\\n';\n            }\n        }\n        return text;\n    }\n    toMarkdown(options) {\n        let text = '';\n        for (let i = 0; i < this.inlines.length; i++) {\n            const inline = this.inlines[i];\n            const next = this.inlines[i + 1];\n            text += inline.toMarkdown(options);\n            if (next && next.range.start.line > inline.range.start.line) {\n                text += '\\n';\n            }\n        }\n        return text;\n    }\n}\nclass JSDocLineImpl {\n    constructor(text, range) {\n        this.text = text;\n        this.range = range;\n    }\n    toString() {\n        return this.text;\n    }\n    toMarkdown() {\n        return this.text;\n    }\n}\nfunction fillNewlines(text) {\n    if (text.endsWith('\\n')) {\n        return '\\n';\n    }\n    else {\n        return '\\n\\n';\n    }\n}\n//# sourceMappingURL=jsdoc.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { getDocument } from '../utils/ast-utils.js';\nimport { isJSDoc, parseJSDoc } from './jsdoc.js';\nexport class JSDocDocumentationProvider {\n    constructor(services) {\n        this.indexManager = services.shared.workspace.IndexManager;\n        this.commentProvider = services.documentation.CommentProvider;\n    }\n    getDocumentation(node) {\n        const comment = this.commentProvider.getComment(node);\n        if (comment && isJSDoc(comment)) {\n            const parsedJSDoc = parseJSDoc(comment);\n            return parsedJSDoc.toMarkdown({\n                renderLink: (link, display) => {\n                    return this.documentationLinkRenderer(node, link, display);\n                },\n                renderTag: (tag) => {\n                    return this.documentationTagRenderer(node, tag);\n                }\n            });\n        }\n        return undefined;\n    }\n    documentationLinkRenderer(node, name, display) {\n        var _a;\n        const description = (_a = this.findNameInPrecomputedScopes(node, name)) !== null && _a !== void 0 ? _a : this.findNameInGlobalScope(node, name);\n        if (description && description.nameSegment) {\n            const line = description.nameSegment.range.start.line + 1;\n            const character = description.nameSegment.range.start.character + 1;\n            const uri = description.documentUri.with({ fragment: `L${line},${character}` });\n            return `[${display}](${uri.toString()})`;\n        }\n        else {\n            return undefined;\n        }\n    }\n    documentationTagRenderer(_node, _tag) {\n        // Fall back to the default tag rendering\n        return undefined;\n    }\n    findNameInPrecomputedScopes(node, name) {\n        const document = getDocument(node);\n        const precomputed = document.precomputedScopes;\n        if (!precomputed) {\n            return undefined;\n        }\n        let currentNode = node;\n        do {\n            const allDescriptions = precomputed.get(currentNode);\n            const description = allDescriptions.find(e => e.name === name);\n            if (description) {\n                return description;\n            }\n            currentNode = currentNode.$container;\n        } while (currentNode);\n        return undefined;\n    }\n    findNameInGlobalScope(node, name) {\n        const description = this.indexManager.allElements().find(e => e.name === name);\n        return description;\n    }\n}\n//# sourceMappingURL=documentation-provider.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { isAstNodeWithComment } from '../serializer/json-serializer.js';\nimport { findCommentNode } from '../utils/cst-utils.js';\nexport class DefaultCommentProvider {\n    constructor(services) {\n        this.grammarConfig = () => services.parser.GrammarConfig;\n    }\n    getComment(node) {\n        var _a;\n        if (isAstNodeWithComment(node)) {\n            return node.$comment;\n        }\n        return (_a = findCommentNode(node.$cstNode, this.grammarConfig().multilineCommentRules)) === null || _a === void 0 ? void 0 : _a.text;\n    }\n}\n//# sourceMappingURL=comment-provider.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { Deferred, OperationCancelled } from '../utils/promise-utils.js';\nimport { Emitter } from '../utils/event.js';\n/**\n * Default implementation of the async parser which simply wraps the sync parser in a promise.\n *\n * @remarks\n * A real implementation would create worker threads or web workers to offload the parsing work.\n */\nexport class DefaultAsyncParser {\n    constructor(services) {\n        this.syncParser = services.parser.LangiumParser;\n    }\n    parse(text, _cancelToken) {\n        return Promise.resolve(this.syncParser.parse(text));\n    }\n}\nexport class AbstractThreadedAsyncParser {\n    constructor(services) {\n        /**\n         * The thread count determines how many threads are used to parse files in parallel.\n         * The default value is 8. Decreasing this value increases startup performance, but decreases parallel parsing performance.\n         */\n        this.threadCount = 8;\n        /**\n         * The termination delay determines how long the parser waits for a thread to finish after a cancellation request.\n         * The default value is 200(ms).\n         */\n        this.terminationDelay = 200;\n        this.workerPool = [];\n        this.queue = [];\n        this.hydrator = services.serializer.Hydrator;\n    }\n    initializeWorkers() {\n        while (this.workerPool.length < this.threadCount) {\n            const worker = this.createWorker();\n            worker.onReady(() => {\n                if (this.queue.length > 0) {\n                    const deferred = this.queue.shift();\n                    if (deferred) {\n                        worker.lock();\n                        deferred.resolve(worker);\n                    }\n                }\n            });\n            this.workerPool.push(worker);\n        }\n    }\n    async parse(text, cancelToken) {\n        const worker = await this.acquireParserWorker(cancelToken);\n        const deferred = new Deferred();\n        let timeout;\n        // If the cancellation token is requested, we wait for a certain time before terminating the worker.\n        // Since the cancellation token lives longer than the parsing process, we need to dispose the event listener.\n        // Otherwise, we might accidentally terminate the worker after the parsing process has finished.\n        const cancellation = cancelToken.onCancellationRequested(() => {\n            timeout = setTimeout(() => {\n                this.terminateWorker(worker);\n            }, this.terminationDelay);\n        });\n        worker.parse(text).then(result => {\n            const hydrated = this.hydrator.hydrate(result);\n            deferred.resolve(hydrated);\n        }).catch(err => {\n            deferred.reject(err);\n        }).finally(() => {\n            cancellation.dispose();\n            clearTimeout(timeout);\n        });\n        return deferred.promise;\n    }\n    terminateWorker(worker) {\n        worker.terminate();\n        const index = this.workerPool.indexOf(worker);\n        if (index >= 0) {\n            this.workerPool.splice(index, 1);\n        }\n    }\n    async acquireParserWorker(cancelToken) {\n        this.initializeWorkers();\n        for (const worker of this.workerPool) {\n            if (worker.ready) {\n                worker.lock();\n                return worker;\n            }\n        }\n        const deferred = new Deferred();\n        cancelToken.onCancellationRequested(() => {\n            const index = this.queue.indexOf(deferred);\n            if (index >= 0) {\n                this.queue.splice(index, 1);\n            }\n            deferred.reject(OperationCancelled);\n        });\n        this.queue.push(deferred);\n        return deferred.promise;\n    }\n}\nexport class ParserWorker {\n    get ready() {\n        return this._ready;\n    }\n    get onReady() {\n        return this.onReadyEmitter.event;\n    }\n    constructor(sendMessage, onMessage, onError, terminate) {\n        this.onReadyEmitter = new Emitter();\n        this.deferred = new Deferred();\n        this._ready = true;\n        this._parsing = false;\n        this.sendMessage = sendMessage;\n        this._terminate = terminate;\n        onMessage(result => {\n            const parseResult = result;\n            this.deferred.resolve(parseResult);\n            this.unlock();\n        });\n        onError(error => {\n            this.deferred.reject(error);\n            this.unlock();\n        });\n    }\n    terminate() {\n        this.deferred.reject(OperationCancelled);\n        this._terminate();\n    }\n    lock() {\n        this._ready = false;\n    }\n    unlock() {\n        this._parsing = false;\n        this._ready = true;\n        this.onReadyEmitter.fire();\n    }\n    parse(text) {\n        if (this._parsing) {\n            throw new Error('Parser worker is busy');\n        }\n        this._parsing = true;\n        this.deferred = new Deferred();\n        this.sendMessage(text);\n        return this.deferred.promise;\n    }\n}\n//# sourceMappingURL=async-parser.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CancellationToken, CancellationTokenSource } from '../utils/cancellation.js';\nimport { Deferred, isOperationCancelled, startCancelableOperation } from '../utils/promise-utils.js';\nexport class DefaultWorkspaceLock {\n    constructor() {\n        this.previousTokenSource = new CancellationTokenSource();\n        this.writeQueue = [];\n        this.readQueue = [];\n        this.done = true;\n    }\n    write(action) {\n        this.cancelWrite();\n        const tokenSource = startCancelableOperation();\n        this.previousTokenSource = tokenSource;\n        return this.enqueue(this.writeQueue, action, tokenSource.token);\n    }\n    read(action) {\n        return this.enqueue(this.readQueue, action);\n    }\n    enqueue(queue, action, cancellationToken = CancellationToken.None) {\n        const deferred = new Deferred();\n        const entry = {\n            action,\n            deferred,\n            cancellationToken\n        };\n        queue.push(entry);\n        this.performNextOperation();\n        return deferred.promise;\n    }\n    async performNextOperation() {\n        if (!this.done) {\n            return;\n        }\n        const entries = [];\n        if (this.writeQueue.length > 0) {\n            // Just perform the next write action\n            entries.push(this.writeQueue.shift());\n        }\n        else if (this.readQueue.length > 0) {\n            // Empty the read queue and perform all actions in parallel\n            entries.push(...this.readQueue.splice(0, this.readQueue.length));\n        }\n        else {\n            return;\n        }\n        this.done = false;\n        await Promise.all(entries.map(async ({ action, deferred, cancellationToken }) => {\n            try {\n                // Move the execution of the action to the next event loop tick via `Promise.resolve()`\n                const result = await Promise.resolve().then(() => action(cancellationToken));\n                deferred.resolve(result);\n            }\n            catch (err) {\n                if (isOperationCancelled(err)) {\n                    // If the operation was cancelled, we don't want to reject the promise\n                    deferred.resolve(undefined);\n                }\n                else {\n                    deferred.reject(err);\n                }\n            }\n        }));\n        this.done = true;\n        this.performNextOperation();\n    }\n    cancelWrite() {\n        this.previousTokenSource.cancel();\n    }\n}\n//# sourceMappingURL=workspace-lock.js.map","/******************************************************************************\n * Copyright 2024 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { CompositeCstNodeImpl, LeafCstNodeImpl, RootCstNodeImpl } from '../parser/cst-node-builder.js';\nimport { isAbstractElement } from '../languages/generated/ast.js';\nimport { isRootCstNode, isCompositeCstNode, isLeafCstNode, isAstNode, isReference } from '../syntax-tree.js';\nimport { streamAst } from '../utils/ast-utils.js';\nimport { BiMap } from '../utils/collections.js';\nimport { streamCst } from '../utils/cst-utils.js';\nexport class DefaultHydrator {\n    constructor(services) {\n        this.grammarElementIdMap = new BiMap();\n        this.tokenTypeIdMap = new BiMap();\n        this.grammar = services.Grammar;\n        this.lexer = services.parser.Lexer;\n        this.linker = services.references.Linker;\n    }\n    dehydrate(result) {\n        return {\n            lexerErrors: result.lexerErrors,\n            lexerReport: result.lexerReport ? this.dehydrateLexerReport(result.lexerReport) : undefined,\n            // We need to create shallow copies of the errors\n            // The original errors inherit from the `Error` class, which is not transferable across worker threads\n            parserErrors: result.parserErrors.map(e => (Object.assign(Object.assign({}, e), { message: e.message }))),\n            value: this.dehydrateAstNode(result.value, this.createDehyrationContext(result.value))\n        };\n    }\n    dehydrateLexerReport(lexerReport) {\n        // By default, lexer reports are serializable\n        return lexerReport;\n    }\n    createDehyrationContext(node) {\n        const astNodes = new Map();\n        const cstNodes = new Map();\n        for (const astNode of streamAst(node)) {\n            astNodes.set(astNode, {});\n        }\n        if (node.$cstNode) {\n            for (const cstNode of streamCst(node.$cstNode)) {\n                cstNodes.set(cstNode, {});\n            }\n        }\n        return {\n            astNodes,\n            cstNodes\n        };\n    }\n    dehydrateAstNode(node, context) {\n        const obj = context.astNodes.get(node);\n        obj.$type = node.$type;\n        obj.$containerIndex = node.$containerIndex;\n        obj.$containerProperty = node.$containerProperty;\n        if (node.$cstNode !== undefined) {\n            obj.$cstNode = this.dehydrateCstNode(node.$cstNode, context);\n        }\n        for (const [name, value] of Object.entries(node)) {\n            if (name.startsWith('$')) {\n                continue;\n            }\n            if (Array.isArray(value)) {\n                const arr = [];\n                obj[name] = arr;\n                for (const item of value) {\n                    if (isAstNode(item)) {\n                        arr.push(this.dehydrateAstNode(item, context));\n                    }\n                    else if (isReference(item)) {\n                        arr.push(this.dehydrateReference(item, context));\n                    }\n                    else {\n                        arr.push(item);\n                    }\n                }\n            }\n            else if (isAstNode(value)) {\n                obj[name] = this.dehydrateAstNode(value, context);\n            }\n            else if (isReference(value)) {\n                obj[name] = this.dehydrateReference(value, context);\n            }\n            else if (value !== undefined) {\n                obj[name] = value;\n            }\n        }\n        return obj;\n    }\n    dehydrateReference(reference, context) {\n        const obj = {};\n        obj.$refText = reference.$refText;\n        if (reference.$refNode) {\n            obj.$refNode = context.cstNodes.get(reference.$refNode);\n        }\n        return obj;\n    }\n    dehydrateCstNode(node, context) {\n        const cstNode = context.cstNodes.get(node);\n        if (isRootCstNode(node)) {\n            cstNode.fullText = node.fullText;\n        }\n        else {\n            // Note: This returns undefined for hidden nodes (i.e. comments)\n            cstNode.grammarSource = this.getGrammarElementId(node.grammarSource);\n        }\n        cstNode.hidden = node.hidden;\n        cstNode.astNode = context.astNodes.get(node.astNode);\n        if (isCompositeCstNode(node)) {\n            cstNode.content = node.content.map(child => this.dehydrateCstNode(child, context));\n        }\n        else if (isLeafCstNode(node)) {\n            cstNode.tokenType = node.tokenType.name;\n            cstNode.offset = node.offset;\n            cstNode.length = node.length;\n            cstNode.startLine = node.range.start.line;\n            cstNode.startColumn = node.range.start.character;\n            cstNode.endLine = node.range.end.line;\n            cstNode.endColumn = node.range.end.character;\n        }\n        return cstNode;\n    }\n    hydrate(result) {\n        const node = result.value;\n        const context = this.createHydrationContext(node);\n        if ('$cstNode' in node) {\n            this.hydrateCstNode(node.$cstNode, context);\n        }\n        return {\n            lexerErrors: result.lexerErrors,\n            lexerReport: result.lexerReport,\n            parserErrors: result.parserErrors,\n            value: this.hydrateAstNode(node, context)\n        };\n    }\n    createHydrationContext(node) {\n        const astNodes = new Map();\n        const cstNodes = new Map();\n        for (const astNode of streamAst(node)) {\n            astNodes.set(astNode, {});\n        }\n        let root;\n        if (node.$cstNode) {\n            for (const cstNode of streamCst(node.$cstNode)) {\n                let cst;\n                if ('fullText' in cstNode) {\n                    cst = new RootCstNodeImpl(cstNode.fullText);\n                    root = cst;\n                }\n                else if ('content' in cstNode) {\n                    cst = new CompositeCstNodeImpl();\n                }\n                else if ('tokenType' in cstNode) {\n                    cst = this.hydrateCstLeafNode(cstNode);\n                }\n                if (cst) {\n                    cstNodes.set(cstNode, cst);\n                    cst.root = root;\n                }\n            }\n        }\n        return {\n            astNodes,\n            cstNodes\n        };\n    }\n    hydrateAstNode(node, context) {\n        const astNode = context.astNodes.get(node);\n        astNode.$type = node.$type;\n        astNode.$containerIndex = node.$containerIndex;\n        astNode.$containerProperty = node.$containerProperty;\n        if (node.$cstNode) {\n            astNode.$cstNode = context.cstNodes.get(node.$cstNode);\n        }\n        for (const [name, value] of Object.entries(node)) {\n            if (name.startsWith('$')) {\n                continue;\n            }\n            if (Array.isArray(value)) {\n                const arr = [];\n                astNode[name] = arr;\n                for (const item of value) {\n                    if (isAstNode(item)) {\n                        arr.push(this.setParent(this.hydrateAstNode(item, context), astNode));\n                    }\n                    else if (isReference(item)) {\n                        arr.push(this.hydrateReference(item, astNode, name, context));\n                    }\n                    else {\n                        arr.push(item);\n                    }\n                }\n            }\n            else if (isAstNode(value)) {\n                astNode[name] = this.setParent(this.hydrateAstNode(value, context), astNode);\n            }\n            else if (isReference(value)) {\n                astNode[name] = this.hydrateReference(value, astNode, name, context);\n            }\n            else if (value !== undefined) {\n                astNode[name] = value;\n            }\n        }\n        return astNode;\n    }\n    setParent(node, parent) {\n        node.$container = parent;\n        return node;\n    }\n    hydrateReference(reference, node, name, context) {\n        return this.linker.buildReference(node, name, context.cstNodes.get(reference.$refNode), reference.$refText);\n    }\n    hydrateCstNode(cstNode, context, num = 0) {\n        const cstNodeObj = context.cstNodes.get(cstNode);\n        if (typeof cstNode.grammarSource === 'number') {\n            cstNodeObj.grammarSource = this.getGrammarElement(cstNode.grammarSource);\n        }\n        cstNodeObj.astNode = context.astNodes.get(cstNode.astNode);\n        if (isCompositeCstNode(cstNodeObj)) {\n            for (const child of cstNode.content) {\n                const hydrated = this.hydrateCstNode(child, context, num++);\n                cstNodeObj.content.push(hydrated);\n            }\n        }\n        return cstNodeObj;\n    }\n    hydrateCstLeafNode(cstNode) {\n        const tokenType = this.getTokenType(cstNode.tokenType);\n        const offset = cstNode.offset;\n        const length = cstNode.length;\n        const startLine = cstNode.startLine;\n        const startColumn = cstNode.startColumn;\n        const endLine = cstNode.endLine;\n        const endColumn = cstNode.endColumn;\n        const hidden = cstNode.hidden;\n        const node = new LeafCstNodeImpl(offset, length, {\n            start: {\n                line: startLine,\n                character: startColumn\n            },\n            end: {\n                line: endLine,\n                character: endColumn\n            }\n        }, tokenType, hidden);\n        return node;\n    }\n    getTokenType(name) {\n        return this.lexer.definition[name];\n    }\n    getGrammarElementId(node) {\n        if (!node) {\n            return undefined;\n        }\n        if (this.grammarElementIdMap.size === 0) {\n            this.createGrammarElementIdMap();\n        }\n        return this.grammarElementIdMap.get(node);\n    }\n    getGrammarElement(id) {\n        if (this.grammarElementIdMap.size === 0) {\n            this.createGrammarElementIdMap();\n        }\n        const element = this.grammarElementIdMap.getKey(id);\n        return element;\n    }\n    createGrammarElementIdMap() {\n        let id = 0;\n        for (const element of streamAst(this.grammar)) {\n            if (isAbstractElement(element)) {\n                this.grammarElementIdMap.set(element, id++);\n            }\n        }\n    }\n}\n//# sourceMappingURL=hydrator.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n******************************************************************************/\nimport { createGrammarConfig } from './languages/grammar-config.js';\nimport { createCompletionParser } from './parser/completion-parser-builder.js';\nimport { createLangiumParser } from './parser/langium-parser-builder.js';\nimport { DefaultTokenBuilder } from './parser/token-builder.js';\nimport { DefaultValueConverter } from './parser/value-converter.js';\nimport { DefaultLinker } from './references/linker.js';\nimport { DefaultNameProvider } from './references/name-provider.js';\nimport { DefaultReferences } from './references/references.js';\nimport { DefaultScopeComputation } from './references/scope-computation.js';\nimport { DefaultScopeProvider } from './references/scope-provider.js';\nimport { DefaultJsonSerializer } from './serializer/json-serializer.js';\nimport { DefaultServiceRegistry } from './service-registry.js';\nimport { DefaultDocumentValidator } from './validation/document-validator.js';\nimport { ValidationRegistry } from './validation/validation-registry.js';\nimport { DefaultAstNodeDescriptionProvider, DefaultReferenceDescriptionProvider } from './workspace/ast-descriptions.js';\nimport { DefaultAstNodeLocator } from './workspace/ast-node-locator.js';\nimport { DefaultConfigurationProvider } from './workspace/configuration.js';\nimport { DefaultDocumentBuilder } from './workspace/document-builder.js';\nimport { DefaultLangiumDocumentFactory, DefaultLangiumDocuments } from './workspace/documents.js';\nimport { DefaultIndexManager } from './workspace/index-manager.js';\nimport { DefaultWorkspaceManager } from './workspace/workspace-manager.js';\nimport { DefaultLexer, DefaultLexerErrorMessageProvider } from './parser/lexer.js';\nimport { JSDocDocumentationProvider } from './documentation/documentation-provider.js';\nimport { DefaultCommentProvider } from './documentation/comment-provider.js';\nimport { LangiumParserErrorMessageProvider } from './parser/langium-parser.js';\nimport { DefaultAsyncParser } from './parser/async-parser.js';\nimport { DefaultWorkspaceLock } from './workspace/workspace-lock.js';\nimport { DefaultHydrator } from './serializer/hydrator.js';\n/**\n * Creates a dependency injection module configuring the default core services.\n * This is a set of services that are dedicated to a specific language.\n */\nexport function createDefaultCoreModule(context) {\n    return {\n        documentation: {\n            CommentProvider: (services) => new DefaultCommentProvider(services),\n            DocumentationProvider: (services) => new JSDocDocumentationProvider(services)\n        },\n        parser: {\n            AsyncParser: (services) => new DefaultAsyncParser(services),\n            GrammarConfig: (services) => createGrammarConfig(services),\n            LangiumParser: (services) => createLangiumParser(services),\n            CompletionParser: (services) => createCompletionParser(services),\n            ValueConverter: () => new DefaultValueConverter(),\n            TokenBuilder: () => new DefaultTokenBuilder(),\n            Lexer: (services) => new DefaultLexer(services),\n            ParserErrorMessageProvider: () => new LangiumParserErrorMessageProvider(),\n            LexerErrorMessageProvider: () => new DefaultLexerErrorMessageProvider()\n        },\n        workspace: {\n            AstNodeLocator: () => new DefaultAstNodeLocator(),\n            AstNodeDescriptionProvider: (services) => new DefaultAstNodeDescriptionProvider(services),\n            ReferenceDescriptionProvider: (services) => new DefaultReferenceDescriptionProvider(services)\n        },\n        references: {\n            Linker: (services) => new DefaultLinker(services),\n            NameProvider: () => new DefaultNameProvider(),\n            ScopeProvider: (services) => new DefaultScopeProvider(services),\n            ScopeComputation: (services) => new DefaultScopeComputation(services),\n            References: (services) => new DefaultReferences(services)\n        },\n        serializer: {\n            Hydrator: (services) => new DefaultHydrator(services),\n            JsonSerializer: (services) => new DefaultJsonSerializer(services)\n        },\n        validation: {\n            DocumentValidator: (services) => new DefaultDocumentValidator(services),\n            ValidationRegistry: (services) => new ValidationRegistry(services)\n        },\n        shared: () => context.shared\n    };\n}\n/**\n * Creates a dependency injection module configuring the default shared core services.\n * This is the set of services that are shared between multiple languages.\n */\nexport function createDefaultSharedCoreModule(context) {\n    return {\n        ServiceRegistry: (services) => new DefaultServiceRegistry(services),\n        workspace: {\n            LangiumDocuments: (services) => new DefaultLangiumDocuments(services),\n            LangiumDocumentFactory: (services) => new DefaultLangiumDocumentFactory(services),\n            DocumentBuilder: (services) => new DefaultDocumentBuilder(services),\n            IndexManager: (services) => new DefaultIndexManager(services),\n            WorkspaceManager: (services) => new DefaultWorkspaceManager(services),\n            FileSystemProvider: (services) => context.fileSystemProvider(services),\n            WorkspaceLock: () => new DefaultWorkspaceLock(),\n            ConfigurationProvider: (services) => new DefaultConfigurationProvider(services)\n        }\n    };\n}\n//# sourceMappingURL=default-module.js.map","/******************************************************************************\n * Copyright 2021 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport var Module;\n(function (Module) {\n    Module.merge = (m1, m2) => _merge(_merge({}, m1), m2);\n})(Module || (Module = {}));\n/**\n * Given a set of modules, the inject function returns a lazily evaluated injector\n * that injects dependencies into the requested service when it is requested the\n * first time. Subsequent requests will return the same service.\n *\n * In the case of cyclic dependencies, an Error will be thrown. This can be fixed\n * by injecting a provider `() => T` instead of a `T`.\n *\n * Please note that the arguments may be objects or arrays. However, the result will\n * be an object. Using it with for..of will have no effect.\n *\n * @param module1 first Module\n * @param module2 (optional) second Module\n * @param module3 (optional) third Module\n * @param module4 (optional) fourth Module\n * @param module5 (optional) fifth Module\n * @param module6 (optional) sixth Module\n * @param module7 (optional) seventh Module\n * @param module8 (optional) eighth Module\n * @param module9 (optional) ninth Module\n * @returns a new object of type I\n */\nexport function inject(module1, module2, module3, module4, module5, module6, module7, module8, module9) {\n    const module = [module1, module2, module3, module4, module5, module6, module7, module8, module9].reduce(_merge, {});\n    return _inject(module);\n}\nconst isProxy = Symbol('isProxy');\n/**\n * Eagerly load all services in the given dependency injection container. This is sometimes\n * necessary because services can register event listeners in their constructors.\n */\nexport function eagerLoad(item) {\n    if (item && item[isProxy]) {\n        for (const value of Object.values(item)) {\n            eagerLoad(value);\n        }\n    }\n    return item;\n}\n/**\n * Helper function that returns an injector by creating a proxy.\n * Invariant: injector is of type I. If injector is undefined, then T = I.\n */\nfunction _inject(module, injector) {\n    const proxy = new Proxy({}, {\n        deleteProperty: () => false,\n        set: () => {\n            throw new Error('Cannot set property on injected service container');\n        },\n        get: (obj, prop) => {\n            if (prop === isProxy) {\n                return true;\n            }\n            else {\n                return _resolve(obj, prop, module, injector || proxy);\n            }\n        },\n        getOwnPropertyDescriptor: (obj, prop) => (_resolve(obj, prop, module, injector || proxy), Object.getOwnPropertyDescriptor(obj, prop)), // used by for..in\n        has: (_, prop) => prop in module, // used by ..in..\n        ownKeys: () => [...Object.getOwnPropertyNames(module)] // used by for..in\n    });\n    return proxy;\n}\n/**\n * Internally used to tag a requested dependency, directly before calling the factory.\n * This allows us to find cycles during instance creation.\n */\nconst __requested__ = Symbol();\n/**\n * Returns the value `obj[prop]`. If the value does not exist, yet, it is resolved from\n * the module description. The result of service factories is cached. Groups are\n * recursively proxied.\n *\n * @param obj an object holding all group proxies and services\n * @param prop the key of a value within obj\n * @param module an object containing groups and service factories\n * @param injector the first level proxy that provides access to all values\n * @returns the requested value `obj[prop]`\n * @throws Error if a dependency cycle is detected\n */\nfunction _resolve(obj, prop, module, injector) {\n    if (prop in obj) {\n        if (obj[prop] instanceof Error) {\n            throw new Error('Construction failure. Please make sure that your dependencies are constructable.', { cause: obj[prop] });\n        }\n        if (obj[prop] === __requested__) {\n            throw new Error('Cycle detected. Please make \"' + String(prop) + '\" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');\n        }\n        return obj[prop];\n    }\n    else if (prop in module) {\n        const value = module[prop];\n        obj[prop] = __requested__;\n        try {\n            obj[prop] = (typeof value === 'function') ? value(injector) : _inject(value, injector);\n        }\n        catch (error) {\n            obj[prop] = error instanceof Error ? error : undefined;\n            throw error;\n        }\n        return obj[prop];\n    }\n    else {\n        return undefined;\n    }\n}\n/**\n * Performs a deep-merge of two modules by writing source entries into the target module.\n *\n * @param target the module which is written\n * @param source the module which is read\n * @returns the target module\n */\nfunction _merge(target, source) {\n    if (source) {\n        for (const [key, value2] of Object.entries(source)) {\n            if (value2 !== undefined) {\n                const value1 = target[key];\n                if (value1 !== null && value2 !== null && typeof value1 === 'object' && typeof value2 === 'object') {\n                    target[key] = _merge(value1, value2);\n                }\n                else {\n                    target[key] = value2;\n                }\n            }\n        }\n    }\n    return target;\n}\n//# sourceMappingURL=dependency-injection.js.map","/******************************************************************************\n * Copyright 2022 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nexport class EmptyFileSystemProvider {\n    readFile() {\n        throw new Error('No file system is available.');\n    }\n    async readDirectory() {\n        return [];\n    }\n}\nexport const EmptyFileSystem = {\n    fileSystemProvider: () => new EmptyFileSystemProvider()\n};\n//# sourceMappingURL=file-system-provider.js.map","/******************************************************************************\n * Copyright 2023 TypeFox GmbH\n * This program and the accompanying materials are made available under the\n * terms of the MIT License, which is available in the project root.\n ******************************************************************************/\nimport { createDefaultCoreModule, createDefaultSharedCoreModule } from '../default-module.js';\nimport { inject } from '../dependency-injection.js';\nimport * as ast from '../languages/generated/ast.js';\nimport { EmptyFileSystem } from '../workspace/file-system-provider.js';\nimport { URI } from './uri-utils.js';\nconst minimalGrammarModule = {\n    Grammar: () => undefined,\n    LanguageMetaData: () => ({\n        caseInsensitive: false,\n        fileExtensions: ['.langium'],\n        languageId: 'langium'\n    })\n};\nconst minimalSharedGrammarModule = {\n    AstReflection: () => new ast.LangiumGrammarAstReflection()\n};\nfunction createMinimalGrammarServices() {\n    const shared = inject(createDefaultSharedCoreModule(EmptyFileSystem), minimalSharedGrammarModule);\n    const grammar = inject(createDefaultCoreModule({ shared }), minimalGrammarModule);\n    shared.ServiceRegistry.register(grammar);\n    return grammar;\n}\n/**\n * Load a Langium grammar for your language from a JSON string. This is used by several services,\n * most notably the parser builder which interprets the grammar to create a parser.\n */\nexport function loadGrammarFromJson(json) {\n    var _a;\n    const services = createMinimalGrammarServices();\n    const astNode = services.serializer.JsonSerializer.deserialize(json);\n    services.shared.workspace.LangiumDocumentFactory.fromModel(astNode, URI.parse(`memory://${(_a = astNode.name) !== null && _a !== void 0 ? _a : 'grammar'}.langium`));\n    return astNode;\n}\n//# sourceMappingURL=grammar-loader.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/language/generated/ast.ts\nimport { AbstractAstReflection } from \"langium\";\nvar Statement = \"Statement\";\nvar Architecture = \"Architecture\";\nfunction isArchitecture(item) {\n  return reflection.isInstance(item, Architecture);\n}\n__name(isArchitecture, \"isArchitecture\");\nvar Axis = \"Axis\";\nvar Branch = \"Branch\";\nfunction isBranch(item) {\n  return reflection.isInstance(item, Branch);\n}\n__name(isBranch, \"isBranch\");\nvar Checkout = \"Checkout\";\nvar CherryPicking = \"CherryPicking\";\nvar ClassDefStatement = \"ClassDefStatement\";\nvar Commit = \"Commit\";\nfunction isCommit(item) {\n  return reflection.isInstance(item, Commit);\n}\n__name(isCommit, \"isCommit\");\nvar Curve = \"Curve\";\nvar Edge = \"Edge\";\nvar Entry = \"Entry\";\nvar GitGraph = \"GitGraph\";\nfunction isGitGraph(item) {\n  return reflection.isInstance(item, GitGraph);\n}\n__name(isGitGraph, \"isGitGraph\");\nvar Group = \"Group\";\nvar Info = \"Info\";\nfunction isInfo(item) {\n  return reflection.isInstance(item, Info);\n}\n__name(isInfo, \"isInfo\");\nvar Item = \"Item\";\nvar Junction = \"Junction\";\nvar Merge = \"Merge\";\nfunction isMerge(item) {\n  return reflection.isInstance(item, Merge);\n}\n__name(isMerge, \"isMerge\");\nvar Option = \"Option\";\nvar Packet = \"Packet\";\nfunction isPacket(item) {\n  return reflection.isInstance(item, Packet);\n}\n__name(isPacket, \"isPacket\");\nvar PacketBlock = \"PacketBlock\";\nfunction isPacketBlock(item) {\n  return reflection.isInstance(item, PacketBlock);\n}\n__name(isPacketBlock, \"isPacketBlock\");\nvar Pie = \"Pie\";\nfunction isPie(item) {\n  return reflection.isInstance(item, Pie);\n}\n__name(isPie, \"isPie\");\nvar PieSection = \"PieSection\";\nfunction isPieSection(item) {\n  return reflection.isInstance(item, PieSection);\n}\n__name(isPieSection, \"isPieSection\");\nvar Radar = \"Radar\";\nvar Service = \"Service\";\nvar Treemap = \"Treemap\";\nfunction isTreemap(item) {\n  return reflection.isInstance(item, Treemap);\n}\n__name(isTreemap, \"isTreemap\");\nvar TreemapRow = \"TreemapRow\";\nvar Direction = \"Direction\";\nvar Leaf = \"Leaf\";\nvar Section = \"Section\";\nvar MermaidAstReflection = class extends AbstractAstReflection {\n  static {\n    __name(this, \"MermaidAstReflection\");\n  }\n  getAllTypes() {\n    return [Architecture, Axis, Branch, Checkout, CherryPicking, ClassDefStatement, Commit, Curve, Direction, Edge, Entry, GitGraph, Group, Info, Item, Junction, Leaf, Merge, Option, Packet, PacketBlock, Pie, PieSection, Radar, Section, Service, Statement, Treemap, TreemapRow];\n  }\n  computeIsSubtype(subtype, supertype) {\n    switch (subtype) {\n      case Branch:\n      case Checkout:\n      case CherryPicking:\n      case Commit:\n      case Merge: {\n        return this.isSubtype(Statement, supertype);\n      }\n      case Direction: {\n        return this.isSubtype(GitGraph, supertype);\n      }\n      case Leaf:\n      case Section: {\n        return this.isSubtype(Item, supertype);\n      }\n      default: {\n        return false;\n      }\n    }\n  }\n  getReferenceType(refInfo) {\n    const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\n    switch (referenceId) {\n      case \"Entry:axis\": {\n        return Axis;\n      }\n      default: {\n        throw new Error(`${referenceId} is not a valid reference id.`);\n      }\n    }\n  }\n  getTypeMetaData(type) {\n    switch (type) {\n      case Architecture: {\n        return {\n          name: Architecture,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"edges\", defaultValue: [] },\n            { name: \"groups\", defaultValue: [] },\n            { name: \"junctions\", defaultValue: [] },\n            { name: \"services\", defaultValue: [] },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Axis: {\n        return {\n          name: Axis,\n          properties: [\n            { name: \"label\" },\n            { name: \"name\" }\n          ]\n        };\n      }\n      case Branch: {\n        return {\n          name: Branch,\n          properties: [\n            { name: \"name\" },\n            { name: \"order\" }\n          ]\n        };\n      }\n      case Checkout: {\n        return {\n          name: Checkout,\n          properties: [\n            { name: \"branch\" }\n          ]\n        };\n      }\n      case CherryPicking: {\n        return {\n          name: CherryPicking,\n          properties: [\n            { name: \"id\" },\n            { name: \"parent\" },\n            { name: \"tags\", defaultValue: [] }\n          ]\n        };\n      }\n      case ClassDefStatement: {\n        return {\n          name: ClassDefStatement,\n          properties: [\n            { name: \"className\" },\n            { name: \"styleText\" }\n          ]\n        };\n      }\n      case Commit: {\n        return {\n          name: Commit,\n          properties: [\n            { name: \"id\" },\n            { name: \"message\" },\n            { name: \"tags\", defaultValue: [] },\n            { name: \"type\" }\n          ]\n        };\n      }\n      case Curve: {\n        return {\n          name: Curve,\n          properties: [\n            { name: \"entries\", defaultValue: [] },\n            { name: \"label\" },\n            { name: \"name\" }\n          ]\n        };\n      }\n      case Edge: {\n        return {\n          name: Edge,\n          properties: [\n            { name: \"lhsDir\" },\n            { name: \"lhsGroup\", defaultValue: false },\n            { name: \"lhsId\" },\n            { name: \"lhsInto\", defaultValue: false },\n            { name: \"rhsDir\" },\n            { name: \"rhsGroup\", defaultValue: false },\n            { name: \"rhsId\" },\n            { name: \"rhsInto\", defaultValue: false },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Entry: {\n        return {\n          name: Entry,\n          properties: [\n            { name: \"axis\" },\n            { name: \"value\" }\n          ]\n        };\n      }\n      case GitGraph: {\n        return {\n          name: GitGraph,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"statements\", defaultValue: [] },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Group: {\n        return {\n          name: Group,\n          properties: [\n            { name: \"icon\" },\n            { name: \"id\" },\n            { name: \"in\" },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Info: {\n        return {\n          name: Info,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Item: {\n        return {\n          name: Item,\n          properties: [\n            { name: \"classSelector\" },\n            { name: \"name\" }\n          ]\n        };\n      }\n      case Junction: {\n        return {\n          name: Junction,\n          properties: [\n            { name: \"id\" },\n            { name: \"in\" }\n          ]\n        };\n      }\n      case Merge: {\n        return {\n          name: Merge,\n          properties: [\n            { name: \"branch\" },\n            { name: \"id\" },\n            { name: \"tags\", defaultValue: [] },\n            { name: \"type\" }\n          ]\n        };\n      }\n      case Option: {\n        return {\n          name: Option,\n          properties: [\n            { name: \"name\" },\n            { name: \"value\", defaultValue: false }\n          ]\n        };\n      }\n      case Packet: {\n        return {\n          name: Packet,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"blocks\", defaultValue: [] },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case PacketBlock: {\n        return {\n          name: PacketBlock,\n          properties: [\n            { name: \"bits\" },\n            { name: \"end\" },\n            { name: \"label\" },\n            { name: \"start\" }\n          ]\n        };\n      }\n      case Pie: {\n        return {\n          name: Pie,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"sections\", defaultValue: [] },\n            { name: \"showData\", defaultValue: false },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case PieSection: {\n        return {\n          name: PieSection,\n          properties: [\n            { name: \"label\" },\n            { name: \"value\" }\n          ]\n        };\n      }\n      case Radar: {\n        return {\n          name: Radar,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"axes\", defaultValue: [] },\n            { name: \"curves\", defaultValue: [] },\n            { name: \"options\", defaultValue: [] },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Service: {\n        return {\n          name: Service,\n          properties: [\n            { name: \"icon\" },\n            { name: \"iconText\" },\n            { name: \"id\" },\n            { name: \"in\" },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Treemap: {\n        return {\n          name: Treemap,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"title\" },\n            { name: \"TreemapRows\", defaultValue: [] }\n          ]\n        };\n      }\n      case TreemapRow: {\n        return {\n          name: TreemapRow,\n          properties: [\n            { name: \"indent\" },\n            { name: \"item\" }\n          ]\n        };\n      }\n      case Direction: {\n        return {\n          name: Direction,\n          properties: [\n            { name: \"accDescr\" },\n            { name: \"accTitle\" },\n            { name: \"dir\" },\n            { name: \"statements\", defaultValue: [] },\n            { name: \"title\" }\n          ]\n        };\n      }\n      case Leaf: {\n        return {\n          name: Leaf,\n          properties: [\n            { name: \"classSelector\" },\n            { name: \"name\" },\n            { name: \"value\" }\n          ]\n        };\n      }\n      case Section: {\n        return {\n          name: Section,\n          properties: [\n            { name: \"classSelector\" },\n            { name: \"name\" }\n          ]\n        };\n      }\n      default: {\n        return {\n          name: type,\n          properties: []\n        };\n      }\n    }\n  }\n};\nvar reflection = new MermaidAstReflection();\n\n// src/language/generated/grammar.ts\nimport { loadGrammarFromJson } from \"langium\";\nvar loadedInfoGrammar;\nvar InfoGrammar = /* @__PURE__ */ __name(() => loadedInfoGrammar ?? (loadedInfoGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Info\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Info\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"info\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"showInfo\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"*\"}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"InfoGrammar\");\nvar loadedPacketGrammar;\nvar PacketGrammar = /* @__PURE__ */ __name(() => loadedPacketGrammar ?? (loadedPacketGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Packet\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Packet\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"packet\"},{\"$type\":\"Keyword\",\"value\":\"packet-beta\"}]},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"blocks\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"PacketBlock\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"start\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"-\"},{\"$type\":\"Assignment\",\"feature\":\"end\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"+\"},{\"$type\":\"Assignment\",\"feature\":\"bits\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}}]}]},{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"label\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"PacketGrammar\");\nvar loadedPieGrammar;\nvar PieGrammar = /* @__PURE__ */ __name(() => loadedPieGrammar ?? (loadedPieGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Pie\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Pie\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"pie\"},{\"$type\":\"Assignment\",\"feature\":\"showData\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"showData\"},\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"sections\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"PieSection\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"label\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT_PIE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/-?[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT_PIE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/-?(0|[1-9][0-9]*)(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER_PIE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"PieGrammar\");\nvar loadedArchitectureGrammar;\nvar ArchitectureGrammar = /* @__PURE__ */ __name(() => loadedArchitectureGrammar ?? (loadedArchitectureGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Architecture\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Architecture\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"architecture-beta\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Statement\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"groups\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"services\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"junctions\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"edges\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"LeftPort\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"lhsDir\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"RightPort\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"rhsDir\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\":\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Arrow\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"lhsInto\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"--\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"-\"},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\"-\"}]}]},{\"$type\":\"Assignment\",\"feature\":\"rhsInto\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Group\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"group\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"icon\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@28\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"in\"},{\"$type\":\"Assignment\",\"feature\":\"in\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Service\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"service\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"iconText\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@21\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"icon\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@28\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"in\"},{\"$type\":\"Assignment\",\"feature\":\"in\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Junction\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"junction\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"in\"},{\"$type\":\"Assignment\",\"feature\":\"in\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Edge\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"lhsId\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"lhsGroup\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"rhsId\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"rhsGroup\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARROW_DIRECTION\",\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"L\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"R\"}}]},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"T\"}}]},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"B\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARROW_GROUP\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\{group\\\\\\\\}/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARROW_INTO\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/<|>/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARCH_ICON\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\([\\\\\\\\w-:]+\\\\\\\\)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARCH_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\[[\\\\\\\\w ]+\\\\\\\\]/\"},\"fragment\":false,\"hidden\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"ArchitectureGrammar\");\nvar loadedGitGraphGrammar;\nvar GitGraphGrammar = /* @__PURE__ */ __name(() => loadedGitGraphGrammar ?? (loadedGitGraphGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"GitGraph\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"GitGraph\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"gitGraph\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"gitGraph\"},{\"$type\":\"Keyword\",\"value\":\":\"}]},{\"$type\":\"Keyword\",\"value\":\"gitGraph:\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"gitGraph\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\":\"}]}]},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"statements\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Statement\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Direction\",\"definition\":{\"$type\":\"Assignment\",\"feature\":\"dir\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"LR\"},{\"$type\":\"Keyword\",\"value\":\"TB\"},{\"$type\":\"Keyword\",\"value\":\"BT\"}]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Commit\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"commit\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"id:\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"msg:\",\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"message\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"tag:\"},{\"$type\":\"Assignment\",\"feature\":\"tags\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"type:\"},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"NORMAL\"},{\"$type\":\"Keyword\",\"value\":\"REVERSE\"},{\"$type\":\"Keyword\",\"value\":\"HIGHLIGHT\"}]}}]}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Branch\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"branch\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"order:\"},{\"$type\":\"Assignment\",\"feature\":\"order\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Merge\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"merge\"},{\"$type\":\"Assignment\",\"feature\":\"branch\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]}},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"id:\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"tag:\"},{\"$type\":\"Assignment\",\"feature\":\"tags\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"type:\"},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"NORMAL\"},{\"$type\":\"Keyword\",\"value\":\"REVERSE\"},{\"$type\":\"Keyword\",\"value\":\"HIGHLIGHT\"}]}}]}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Checkout\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"checkout\"},{\"$type\":\"Keyword\",\"value\":\"switch\"}]},{\"$type\":\"Assignment\",\"feature\":\"branch\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"CherryPicking\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"cherry-pick\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"id:\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"tag:\"},{\"$type\":\"Assignment\",\"feature\":\"tags\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"parent:\"},{\"$type\":\"Assignment\",\"feature\":\"parent\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"name\":\"REFERENCE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\w([-\\\\\\\\./\\\\\\\\w]*[-\\\\\\\\w])?/\"},\"fragment\":false,\"hidden\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"GitGraphGrammar\");\nvar loadedRadarGrammar;\nvar RadarGrammar = /* @__PURE__ */ __name(() => loadedRadarGrammar ?? (loadedRadarGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Radar\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Radar\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"radar-beta\"},{\"$type\":\"Keyword\",\"value\":\"radar-beta:\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"radar-beta\"},{\"$type\":\"Keyword\",\"value\":\":\"}]}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"axis\"},{\"$type\":\"Assignment\",\"feature\":\"axes\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"Assignment\",\"feature\":\"axes\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"curve\"},{\"$type\":\"Assignment\",\"feature\":\"curves\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"Assignment\",\"feature\":\"curves\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"options\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"Assignment\",\"feature\":\"options\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Label\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"[\"},{\"$type\":\"Assignment\",\"feature\":\"label\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\"]\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Axis\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Curve\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"Keyword\",\"value\":\"{\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"}\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Entries\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"}]}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"DetailedEntry\",\"returnType\":{\"$ref\":\"#/interfaces@0\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"axis\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/rules@2\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"Keyword\",\"value\":\":\",\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"NumberEntry\",\"returnType\":{\"$ref\":\"#/interfaces@0\"},\"definition\":{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Option\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"showLegend\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"ticks\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"max\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"min\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"graticule\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}}]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"GRATICULE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"circle\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"polygon\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"interfaces\":[{\"$type\":\"Interface\",\"name\":\"Entry\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"axis\",\"isOptional\":true,\"type\":{\"$type\":\"ReferenceType\",\"referenceType\":{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@2\"}}}},{\"$type\":\"TypeAttribute\",\"name\":\"value\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"number\"},\"isOptional\":false}],\"superTypes\":[]}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"types\":[],\"usedGrammars\":[]}`)), \"RadarGrammar\");\nvar loadedTreemapGrammar;\nvar TreemapGrammar = /* @__PURE__ */ __name(() => loadedTreemapGrammar ?? (loadedTreemapGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Treemap\",\"rules\":[{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Treemap\",\"returnType\":{\"$ref\":\"#/interfaces@4\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@0\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"TreemapRows\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"TREEMAP_KEYWORD\",\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"treemap-beta\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"treemap\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"CLASS_DEF\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/classDef\\\\\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\\\\\s+([^;\\\\\\\\r\\\\\\\\n]*))?(?:;)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STYLE_SEPARATOR\",\"definition\":{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\":::\"}},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"SEPARATOR\",\"definition\":{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\":\"}},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"COMMA\",\"definition\":{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\",\"}},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WS\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[ \\\\\\\\t]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"ML_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\%\\\\\\\\%[^\\\\\\\\n]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"NL\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false},{\"$type\":\"ParserRule\",\"name\":\"TreemapRow\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"indent\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"item\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]}]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ClassDef\",\"dataType\":\"string\",\"definition\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Item\",\"returnType\":{\"$ref\":\"#/interfaces@0\"},\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Section\",\"returnType\":{\"$ref\":\"#/interfaces@1\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"classSelector\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Leaf\",\"returnType\":{\"$ref\":\"#/interfaces@2\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"classSelector\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"INDENTATION\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[ \\\\\\\\t]{1,}/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID2\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[a-zA-Z_][a-zA-Z0-9_]*/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER2\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9_\\\\\\\\.\\\\\\\\,]+/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"name\":\"MyNumber\",\"dataType\":\"number\",\"definition\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@21\"},\"arguments\":[]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING2\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"[^\\\\\"]*\\\\\"|'[^']*'/\"},\"fragment\":false,\"hidden\":false}],\"interfaces\":[{\"$type\":\"Interface\",\"name\":\"Item\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"name\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"},\"isOptional\":false},{\"$type\":\"TypeAttribute\",\"name\":\"classSelector\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}}],\"superTypes\":[]},{\"$type\":\"Interface\",\"name\":\"Section\",\"superTypes\":[{\"$ref\":\"#/interfaces@0\"}],\"attributes\":[]},{\"$type\":\"Interface\",\"name\":\"Leaf\",\"superTypes\":[{\"$ref\":\"#/interfaces@0\"}],\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"value\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"number\"},\"isOptional\":false}]},{\"$type\":\"Interface\",\"name\":\"ClassDefStatement\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"className\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"},\"isOptional\":false},{\"$type\":\"TypeAttribute\",\"name\":\"styleText\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"},\"isOptional\":false}],\"superTypes\":[]},{\"$type\":\"Interface\",\"name\":\"Treemap\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"TreemapRows\",\"type\":{\"$type\":\"ArrayType\",\"elementType\":{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@14\"}}},\"isOptional\":false},{\"$type\":\"TypeAttribute\",\"name\":\"title\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}},{\"$type\":\"TypeAttribute\",\"name\":\"accTitle\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}},{\"$type\":\"TypeAttribute\",\"name\":\"accDescr\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}}],\"superTypes\":[]}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"imports\":[],\"types\":[],\"usedGrammars\":[],\"$comment\":\"/**\\\\n * Treemap grammar for Langium\\\\n * Converted from mindmap grammar\\\\n *\\\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\\\n * before the treemap keyword, allowing for empty lines and comments before the\\\\n * treemap declaration.\\\\n */\"}`)), \"TreemapGrammar\");\n\n// src/language/generated/module.ts\nvar InfoLanguageMetaData = {\n  languageId: \"info\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar PacketLanguageMetaData = {\n  languageId: \"packet\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar PieLanguageMetaData = {\n  languageId: \"pie\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar ArchitectureLanguageMetaData = {\n  languageId: \"architecture\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar GitGraphLanguageMetaData = {\n  languageId: \"gitGraph\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar RadarLanguageMetaData = {\n  languageId: \"radar\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar TreemapLanguageMetaData = {\n  languageId: \"treemap\",\n  fileExtensions: [\".mmd\", \".mermaid\"],\n  caseInsensitive: false,\n  mode: \"production\"\n};\nvar MermaidGeneratedSharedModule = {\n  AstReflection: /* @__PURE__ */ __name(() => new MermaidAstReflection(), \"AstReflection\")\n};\nvar InfoGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => InfoGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => InfoLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\nvar PacketGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => PacketGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => PacketLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\nvar PieGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => PieGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => PieLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\nvar ArchitectureGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => ArchitectureGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => ArchitectureLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\nvar GitGraphGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => GitGraphGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => GitGraphLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\nvar RadarGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => RadarGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => RadarLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\nvar TreemapGeneratedModule = {\n  Grammar: /* @__PURE__ */ __name(() => TreemapGrammar(), \"Grammar\"),\n  LanguageMetaData: /* @__PURE__ */ __name(() => TreemapLanguageMetaData, \"LanguageMetaData\"),\n  parser: {}\n};\n\n// src/language/common/valueConverter.ts\nimport { DefaultValueConverter } from \"langium\";\n\n// src/language/common/matcher.ts\nvar accessibilityDescrRegex = /accDescr(?:[\\t ]*:([^\\n\\r]*)|\\s*{([^}]*)})/;\nvar accessibilityTitleRegex = /accTitle[\\t ]*:([^\\n\\r]*)/;\nvar titleRegex = /title([\\t ][^\\n\\r]*|)/;\n\n// src/language/common/valueConverter.ts\nvar rulesRegexes = {\n  ACC_DESCR: accessibilityDescrRegex,\n  ACC_TITLE: accessibilityTitleRegex,\n  TITLE: titleRegex\n};\nvar AbstractMermaidValueConverter = class extends DefaultValueConverter {\n  static {\n    __name(this, \"AbstractMermaidValueConverter\");\n  }\n  runConverter(rule, input, cstNode) {\n    let value = this.runCommonConverter(rule, input, cstNode);\n    if (value === void 0) {\n      value = this.runCustomConverter(rule, input, cstNode);\n    }\n    if (value === void 0) {\n      return super.runConverter(rule, input, cstNode);\n    }\n    return value;\n  }\n  runCommonConverter(rule, input, _cstNode) {\n    const regex = rulesRegexes[rule.name];\n    if (regex === void 0) {\n      return void 0;\n    }\n    const match = regex.exec(input);\n    if (match === null) {\n      return void 0;\n    }\n    if (match[1] !== void 0) {\n      return match[1].trim().replace(/[\\t ]{2,}/gm, \" \");\n    }\n    if (match[2] !== void 0) {\n      return match[2].replace(/^\\s*/gm, \"\").replace(/\\s+$/gm, \"\").replace(/[\\t ]{2,}/gm, \" \").replace(/[\\n\\r]{2,}/gm, \"\\n\");\n    }\n    return void 0;\n  }\n};\nvar CommonValueConverter = class extends AbstractMermaidValueConverter {\n  static {\n    __name(this, \"CommonValueConverter\");\n  }\n  runCustomConverter(_rule, _input, _cstNode) {\n    return void 0;\n  }\n};\n\n// src/language/common/tokenBuilder.ts\nimport { DefaultTokenBuilder } from \"langium\";\nvar AbstractMermaidTokenBuilder = class extends DefaultTokenBuilder {\n  static {\n    __name(this, \"AbstractMermaidTokenBuilder\");\n  }\n  constructor(keywords) {\n    super();\n    this.keywords = new Set(keywords);\n  }\n  buildKeywordTokens(rules, terminalTokens, options) {\n    const tokenTypes = super.buildKeywordTokens(rules, terminalTokens, options);\n    tokenTypes.forEach((tokenType) => {\n      if (this.keywords.has(tokenType.name) && tokenType.PATTERN !== void 0) {\n        tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + \"(?:(?=%%)|(?!\\\\S))\");\n      }\n    });\n    return tokenTypes;\n  }\n};\nvar CommonTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"CommonTokenBuilder\");\n  }\n};\n\nexport {\n  __name,\n  Statement,\n  Architecture,\n  isArchitecture,\n  Branch,\n  isBranch,\n  Commit,\n  isCommit,\n  GitGraph,\n  isGitGraph,\n  Info,\n  isInfo,\n  Merge,\n  isMerge,\n  Packet,\n  isPacket,\n  PacketBlock,\n  isPacketBlock,\n  Pie,\n  isPie,\n  PieSection,\n  isPieSection,\n  Radar,\n  Treemap,\n  isTreemap,\n  MermaidGeneratedSharedModule,\n  InfoGeneratedModule,\n  PacketGeneratedModule,\n  PieGeneratedModule,\n  ArchitectureGeneratedModule,\n  GitGraphGeneratedModule,\n  RadarGeneratedModule,\n  TreemapGeneratedModule,\n  AbstractMermaidValueConverter,\n  CommonValueConverter,\n  AbstractMermaidTokenBuilder,\n  CommonTokenBuilder\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  CommonValueConverter,\n  GitGraphGeneratedModule,\n  MermaidGeneratedSharedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/gitGraph/module.ts\nimport {\n  inject,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  EmptyFileSystem\n} from \"langium\";\n\n// src/language/gitGraph/tokenBuilder.ts\nvar GitGraphTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"GitGraphTokenBuilder\");\n  }\n  constructor() {\n    super([\"gitGraph\"]);\n  }\n};\n\n// src/language/gitGraph/module.ts\nvar GitGraphModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new GitGraphTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n  }\n};\nfunction createGitGraphServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const GitGraph = inject(\n    createDefaultCoreModule({ shared }),\n    GitGraphGeneratedModule,\n    GitGraphModule\n  );\n  shared.ServiceRegistry.register(GitGraph);\n  return { shared, GitGraph };\n}\n__name(createGitGraphServices, \"createGitGraphServices\");\n\nexport {\n  GitGraphModule,\n  createGitGraphServices\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  CommonValueConverter,\n  InfoGeneratedModule,\n  MermaidGeneratedSharedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/info/module.ts\nimport {\n  EmptyFileSystem,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  inject\n} from \"langium\";\n\n// src/language/info/tokenBuilder.ts\nvar InfoTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"InfoTokenBuilder\");\n  }\n  constructor() {\n    super([\"info\", \"showInfo\"]);\n  }\n};\n\n// src/language/info/module.ts\nvar InfoModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new InfoTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n  }\n};\nfunction createInfoServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const Info = inject(\n    createDefaultCoreModule({ shared }),\n    InfoGeneratedModule,\n    InfoModule\n  );\n  shared.ServiceRegistry.register(Info);\n  return { shared, Info };\n}\n__name(createInfoServices, \"createInfoServices\");\n\nexport {\n  InfoModule,\n  createInfoServices\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  CommonValueConverter,\n  MermaidGeneratedSharedModule,\n  PacketGeneratedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/packet/module.ts\nimport {\n  EmptyFileSystem,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  inject\n} from \"langium\";\n\n// src/language/packet/tokenBuilder.ts\nvar PacketTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"PacketTokenBuilder\");\n  }\n  constructor() {\n    super([\"packet\"]);\n  }\n};\n\n// src/language/packet/module.ts\nvar PacketModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new PacketTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n  }\n};\nfunction createPacketServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const Packet = inject(\n    createDefaultCoreModule({ shared }),\n    PacketGeneratedModule,\n    PacketModule\n  );\n  shared.ServiceRegistry.register(Packet);\n  return { shared, Packet };\n}\n__name(createPacketServices, \"createPacketServices\");\n\nexport {\n  PacketModule,\n  createPacketServices\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  AbstractMermaidValueConverter,\n  MermaidGeneratedSharedModule,\n  PieGeneratedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/pie/module.ts\nimport {\n  EmptyFileSystem,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  inject\n} from \"langium\";\n\n// src/language/pie/tokenBuilder.ts\nvar PieTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"PieTokenBuilder\");\n  }\n  constructor() {\n    super([\"pie\", \"showData\"]);\n  }\n};\n\n// src/language/pie/valueConverter.ts\nvar PieValueConverter = class extends AbstractMermaidValueConverter {\n  static {\n    __name(this, \"PieValueConverter\");\n  }\n  runCustomConverter(rule, input, _cstNode) {\n    if (rule.name !== \"PIE_SECTION_LABEL\") {\n      return void 0;\n    }\n    return input.replace(/\"/g, \"\").trim();\n  }\n};\n\n// src/language/pie/module.ts\nvar PieModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new PieTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new PieValueConverter(), \"ValueConverter\")\n  }\n};\nfunction createPieServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const Pie = inject(\n    createDefaultCoreModule({ shared }),\n    PieGeneratedModule,\n    PieModule\n  );\n  shared.ServiceRegistry.register(Pie);\n  return { shared, Pie };\n}\n__name(createPieServices, \"createPieServices\");\n\nexport {\n  PieModule,\n  createPieServices\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  AbstractMermaidValueConverter,\n  ArchitectureGeneratedModule,\n  MermaidGeneratedSharedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/architecture/module.ts\nimport {\n  EmptyFileSystem,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  inject\n} from \"langium\";\n\n// src/language/architecture/tokenBuilder.ts\nvar ArchitectureTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"ArchitectureTokenBuilder\");\n  }\n  constructor() {\n    super([\"architecture\"]);\n  }\n};\n\n// src/language/architecture/valueConverter.ts\nvar ArchitectureValueConverter = class extends AbstractMermaidValueConverter {\n  static {\n    __name(this, \"ArchitectureValueConverter\");\n  }\n  runCustomConverter(rule, input, _cstNode) {\n    if (rule.name === \"ARCH_ICON\") {\n      return input.replace(/[()]/g, \"\").trim();\n    } else if (rule.name === \"ARCH_TEXT_ICON\") {\n      return input.replace(/[\"()]/g, \"\");\n    } else if (rule.name === \"ARCH_TITLE\") {\n      return input.replace(/[[\\]]/g, \"\").trim();\n    }\n    return void 0;\n  }\n};\n\n// src/language/architecture/module.ts\nvar ArchitectureModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new ArchitectureTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new ArchitectureValueConverter(), \"ValueConverter\")\n  }\n};\nfunction createArchitectureServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const Architecture = inject(\n    createDefaultCoreModule({ shared }),\n    ArchitectureGeneratedModule,\n    ArchitectureModule\n  );\n  shared.ServiceRegistry.register(Architecture);\n  return { shared, Architecture };\n}\n__name(createArchitectureServices, \"createArchitectureServices\");\n\nexport {\n  ArchitectureModule,\n  createArchitectureServices\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  CommonValueConverter,\n  MermaidGeneratedSharedModule,\n  RadarGeneratedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/radar/module.ts\nimport {\n  EmptyFileSystem,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  inject\n} from \"langium\";\n\n// src/language/radar/tokenBuilder.ts\nvar RadarTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"RadarTokenBuilder\");\n  }\n  constructor() {\n    super([\"radar-beta\"]);\n  }\n};\n\n// src/language/radar/module.ts\nvar RadarModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new RadarTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n  }\n};\nfunction createRadarServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const Radar = inject(\n    createDefaultCoreModule({ shared }),\n    RadarGeneratedModule,\n    RadarModule\n  );\n  shared.ServiceRegistry.register(Radar);\n  return { shared, Radar };\n}\n__name(createRadarServices, \"createRadarServices\");\n\nexport {\n  RadarModule,\n  createRadarServices\n};\n","import {\n  AbstractMermaidTokenBuilder,\n  AbstractMermaidValueConverter,\n  MermaidGeneratedSharedModule,\n  TreemapGeneratedModule,\n  __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/treemap/module.ts\nimport {\n  EmptyFileSystem,\n  createDefaultCoreModule,\n  createDefaultSharedCoreModule,\n  inject\n} from \"langium\";\n\n// src/language/treemap/tokenBuilder.ts\nvar TreemapTokenBuilder = class extends AbstractMermaidTokenBuilder {\n  static {\n    __name(this, \"TreemapTokenBuilder\");\n  }\n  constructor() {\n    super([\"treemap\"]);\n  }\n};\n\n// src/language/treemap/valueConverter.ts\nvar classDefRegex = /classDef\\s+([A-Z_a-z]\\w+)(?:\\s+([^\\n\\r;]*))?;?/;\nvar TreemapValueConverter = class extends AbstractMermaidValueConverter {\n  static {\n    __name(this, \"TreemapValueConverter\");\n  }\n  runCustomConverter(rule, input, _cstNode) {\n    if (rule.name === \"NUMBER2\") {\n      return parseFloat(input.replace(/,/g, \"\"));\n    } else if (rule.name === \"SEPARATOR\") {\n      return input.substring(1, input.length - 1);\n    } else if (rule.name === \"STRING2\") {\n      return input.substring(1, input.length - 1);\n    } else if (rule.name === \"INDENTATION\") {\n      return input.length;\n    } else if (rule.name === \"ClassDef\") {\n      if (typeof input !== \"string\") {\n        return input;\n      }\n      const match = classDefRegex.exec(input);\n      if (match) {\n        return {\n          $type: \"ClassDefStatement\",\n          className: match[1],\n          styleText: match[2] || void 0\n        };\n      }\n    }\n    return void 0;\n  }\n};\n\n// src/language/treemap/treemap-validator.ts\nfunction registerValidationChecks(services) {\n  const validator = services.validation.TreemapValidator;\n  const registry = services.validation.ValidationRegistry;\n  if (registry) {\n    const checks = {\n      Treemap: validator.checkSingleRoot.bind(validator)\n      // Remove unused validation for TreemapRow\n    };\n    registry.register(checks, validator);\n  }\n}\n__name(registerValidationChecks, \"registerValidationChecks\");\nvar TreemapValidator = class {\n  static {\n    __name(this, \"TreemapValidator\");\n  }\n  /**\n   * Validates that a treemap has only one root node.\n   * A root node is defined as a node that has no indentation.\n   */\n  checkSingleRoot(doc, accept) {\n    let rootNodeIndentation;\n    for (const row of doc.TreemapRows) {\n      if (!row.item) {\n        continue;\n      }\n      if (rootNodeIndentation === void 0 && // Check if this is a root node (no indentation)\n      row.indent === void 0) {\n        rootNodeIndentation = 0;\n      } else if (row.indent === void 0) {\n        accept(\"error\", \"Multiple root nodes are not allowed in a treemap.\", {\n          node: row,\n          property: \"item\"\n        });\n      } else if (rootNodeIndentation !== void 0 && rootNodeIndentation >= parseInt(row.indent, 10)) {\n        accept(\"error\", \"Multiple root nodes are not allowed in a treemap.\", {\n          node: row,\n          property: \"item\"\n        });\n      }\n    }\n  }\n};\n\n// src/language/treemap/module.ts\nvar TreemapModule = {\n  parser: {\n    TokenBuilder: /* @__PURE__ */ __name(() => new TreemapTokenBuilder(), \"TokenBuilder\"),\n    ValueConverter: /* @__PURE__ */ __name(() => new TreemapValueConverter(), \"ValueConverter\")\n  },\n  validation: {\n    TreemapValidator: /* @__PURE__ */ __name(() => new TreemapValidator(), \"TreemapValidator\")\n  }\n};\nfunction createTreemapServices(context = EmptyFileSystem) {\n  const shared = inject(\n    createDefaultSharedCoreModule(context),\n    MermaidGeneratedSharedModule\n  );\n  const Treemap = inject(\n    createDefaultCoreModule({ shared }),\n    TreemapGeneratedModule,\n    TreemapModule\n  );\n  shared.ServiceRegistry.register(Treemap);\n  registerValidationChecks(Treemap);\n  return { shared, Treemap };\n}\n__name(createTreemapServices, \"createTreemapServices\");\n\nexport {\n  TreemapModule,\n  createTreemapServices\n};\n","import {\n  GitGraphModule,\n  createGitGraphServices\n} from \"./chunks/mermaid-parser.core/chunk-S6J4BHB3.mjs\";\nimport {\n  InfoModule,\n  createInfoServices\n} from \"./chunks/mermaid-parser.core/chunk-LBM3YZW2.mjs\";\nimport {\n  PacketModule,\n  createPacketServices\n} from \"./chunks/mermaid-parser.core/chunk-76Q3JFCE.mjs\";\nimport {\n  PieModule,\n  createPieServices\n} from \"./chunks/mermaid-parser.core/chunk-T53DSG4Q.mjs\";\nimport {\n  ArchitectureModule,\n  createArchitectureServices\n} from \"./chunks/mermaid-parser.core/chunk-O7ZBX7Z2.mjs\";\nimport {\n  RadarModule,\n  createRadarServices\n} from \"./chunks/mermaid-parser.core/chunk-LHMN2FUI.mjs\";\nimport {\n  TreemapModule,\n  createTreemapServices\n} from \"./chunks/mermaid-parser.core/chunk-FWNWRKHM.mjs\";\nimport {\n  AbstractMermaidTokenBuilder,\n  AbstractMermaidValueConverter,\n  Architecture,\n  ArchitectureGeneratedModule,\n  Branch,\n  Commit,\n  CommonTokenBuilder,\n  CommonValueConverter,\n  GitGraph,\n  GitGraphGeneratedModule,\n  Info,\n  InfoGeneratedModule,\n  Merge,\n  MermaidGeneratedSharedModule,\n  Packet,\n  PacketBlock,\n  PacketGeneratedModule,\n  Pie,\n  PieGeneratedModule,\n  PieSection,\n  Radar,\n  RadarGeneratedModule,\n  Statement,\n  Treemap,\n  TreemapGeneratedModule,\n  __name,\n  isArchitecture,\n  isBranch,\n  isCommit,\n  isGitGraph,\n  isInfo,\n  isMerge,\n  isPacket,\n  isPacketBlock,\n  isPie,\n  isPieSection,\n  isTreemap\n} from \"./chunks/mermaid-parser.core/chunk-FPAJGGOC.mjs\";\n\n// src/parse.ts\nvar parsers = {};\nvar initializers = {\n  info: /* @__PURE__ */ __name(async () => {\n    const { createInfoServices: createInfoServices2 } = await import(\"./chunks/mermaid-parser.core/info-NVLQJR56.mjs\");\n    const parser = createInfoServices2().Info.parser.LangiumParser;\n    parsers.info = parser;\n  }, \"info\"),\n  packet: /* @__PURE__ */ __name(async () => {\n    const { createPacketServices: createPacketServices2 } = await import(\"./chunks/mermaid-parser.core/packet-BFZMPI3H.mjs\");\n    const parser = createPacketServices2().Packet.parser.LangiumParser;\n    parsers.packet = parser;\n  }, \"packet\"),\n  pie: /* @__PURE__ */ __name(async () => {\n    const { createPieServices: createPieServices2 } = await import(\"./chunks/mermaid-parser.core/pie-7BOR55EZ.mjs\");\n    const parser = createPieServices2().Pie.parser.LangiumParser;\n    parsers.pie = parser;\n  }, \"pie\"),\n  architecture: /* @__PURE__ */ __name(async () => {\n    const { createArchitectureServices: createArchitectureServices2 } = await import(\"./chunks/mermaid-parser.core/architecture-U656AL7Q.mjs\");\n    const parser = createArchitectureServices2().Architecture.parser.LangiumParser;\n    parsers.architecture = parser;\n  }, \"architecture\"),\n  gitGraph: /* @__PURE__ */ __name(async () => {\n    const { createGitGraphServices: createGitGraphServices2 } = await import(\"./chunks/mermaid-parser.core/gitGraph-F6HP7TQM.mjs\");\n    const parser = createGitGraphServices2().GitGraph.parser.LangiumParser;\n    parsers.gitGraph = parser;\n  }, \"gitGraph\"),\n  radar: /* @__PURE__ */ __name(async () => {\n    const { createRadarServices: createRadarServices2 } = await import(\"./chunks/mermaid-parser.core/radar-NHE76QYJ.mjs\");\n    const parser = createRadarServices2().Radar.parser.LangiumParser;\n    parsers.radar = parser;\n  }, \"radar\"),\n  treemap: /* @__PURE__ */ __name(async () => {\n    const { createTreemapServices: createTreemapServices2 } = await import(\"./chunks/mermaid-parser.core/treemap-KMMF4GRG.mjs\");\n    const parser = createTreemapServices2().Treemap.parser.LangiumParser;\n    parsers.treemap = parser;\n  }, \"treemap\")\n};\nasync function parse(diagramType, text) {\n  const initializer = initializers[diagramType];\n  if (!initializer) {\n    throw new Error(`Unknown diagram type: ${diagramType}`);\n  }\n  if (!parsers[diagramType]) {\n    await initializer();\n  }\n  const parser = parsers[diagramType];\n  const result = parser.parse(text);\n  if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {\n    throw new MermaidParseError(result);\n  }\n  return result.value;\n}\n__name(parse, \"parse\");\nvar MermaidParseError = class extends Error {\n  constructor(result) {\n    const lexerErrors = result.lexerErrors.map((err) => err.message).join(\"\\n\");\n    const parserErrors = result.parserErrors.map((err) => err.message).join(\"\\n\");\n    super(`Parsing failed: ${lexerErrors} ${parserErrors}`);\n    this.result = result;\n  }\n  static {\n    __name(this, \"MermaidParseError\");\n  }\n};\nexport {\n  AbstractMermaidTokenBuilder,\n  AbstractMermaidValueConverter,\n  Architecture,\n  ArchitectureGeneratedModule,\n  ArchitectureModule,\n  Branch,\n  Commit,\n  CommonTokenBuilder,\n  CommonValueConverter,\n  GitGraph,\n  GitGraphGeneratedModule,\n  GitGraphModule,\n  Info,\n  InfoGeneratedModule,\n  InfoModule,\n  Merge,\n  MermaidGeneratedSharedModule,\n  MermaidParseError,\n  Packet,\n  PacketBlock,\n  PacketGeneratedModule,\n  PacketModule,\n  Pie,\n  PieGeneratedModule,\n  PieModule,\n  PieSection,\n  Radar,\n  RadarGeneratedModule,\n  RadarModule,\n  Statement,\n  Treemap,\n  TreemapGeneratedModule,\n  TreemapModule,\n  createArchitectureServices,\n  createGitGraphServices,\n  createInfoServices,\n  createPacketServices,\n  createPieServices,\n  createRadarServices,\n  createTreemapServices,\n  isArchitecture,\n  isBranch,\n  isCommit,\n  isGitGraph,\n  isInfo,\n  isMerge,\n  isPacket,\n  isPacketBlock,\n  isPie,\n  isPieSection,\n  isTreemap,\n  parse\n};\n"],"names":["flatMap","collection","iteratee","baseFlatten","map","uniqBy","array","baseUniq","baseIteratee","isAstNode","obj","isReference","isAstNodeDescription","isLinkingError","AbstractAstReflection","node","type","subtype","supertype","nested","existing","result","allTypes","types","possibleSubType","isCompositeCstNode","isLeafCstNode","isRootCstNode","StreamImpl","startFn","nextFn","iterator","count","next","keyFn","valueFn","entryStream","element","other","state","DONE_RESULT","separator","value","addSeparator","toString","searchElement","fromIndex","index","predicate","callbackfn","done","initialValue","previousValue","mapped","isIterable","depth","stream","skipCount","i","maxSize","by","key","otherKeySet","item","e","ownKey","EMPTY_STREAM","collections","TreeStreamImpl","root","children","options","Reduction","sum","b","product","min","max","streamCst","isChildNode","child","parent","tokenToRange","token","toDocumentSegment","offset","end","range","RangeComparison","compareRange","to","startInside","endInside","inRange","DefaultNameRegexp","findCommentNode","cstNode","commentNames","previous","getPreviousNode","isCommentNode","endIndex","hidden","ErrorWithLocation","message","assertUnreachable","_","AbstractRule","AbstractType","Condition","TypeDefinition","ValueLiteral","AbstractElement","isAbstractElement","reflection","ArrayLiteral","ArrayType","BooleanLiteral","isBooleanLiteral","Conjunction","isConjunction","Disjunction","isDisjunction","Grammar","GrammarImport","InferredType","isInferredType","Interface","isInterface","NamedArgument","Negation","isNegation","NumberLiteral","Parameter","ParameterReference","isParameterReference","ParserRule","isParserRule","ReferenceType","ReturnType","isReturnType","SimpleType","isSimpleType","StringLiteral","TerminalRule","isTerminalRule","Type","isType","TypeAttribute","UnionType","Action","isAction","Alternatives","isAlternatives","Assignment","isAssignment","CharacterRange","isCharacterRange","CrossReference","isCrossReference","EndOfFile","isEndOfFile","Group","isGroup","Keyword","isKeyword","NegatedToken","isNegatedToken","RegexToken","isRegexToken","RuleCall","isRuleCall","TerminalAlternatives","isTerminalAlternatives","TerminalGroup","isTerminalGroup","TerminalRuleCall","isTerminalRuleCall","UnorderedGroup","isUnorderedGroup","UntilToken","isUntilToken","Wildcard","isWildcard","LangiumGrammarAstReflection","refInfo","referenceId","linkContentToContainer","name","getContainerOfType","typePredicate","getDocument","findRootNode","streamContents","property","isAstNodeInRange","streamAllContents","streamAst","astNode","_a","nodeRange","streamReferences","assignMandatoryProperties","typeMetaData","genericNode","copyDefaultValue","propertyType","cc","char","insertToSet","set","subItem","addFlag","flagObj","flagKey","ASSERT_EXISTS","ASSERT_NEVER_REACH_HERE","isCharacter","digitsCharCodes","wordCharCodes","whitespaceCodes","hexDigitPattern","decimalPattern","decimalPatternNoZero","RegExpParser","newState","input","flags","alts","begin","terms","disjunction","isBacktracking","atLeast","atMost","atom","complement","escapeCode","letter","escapedChar","nextChar","from","capturing","groupAst","number","howMuch","prevState","howMany","hexString","hexChar","BaseRegExpVisitor","subChild","NEWLINE_REGEXP","regexpParser","TerminalRegExpVisitor","regex","escapeRegExp","visitor","isMultilineComment","regexp","whitespaceCharacters","isWhitespace","ws","getCaseInsensitivePattern","keyword","partialMatches","partial","partialRegExp","match","re","source","process","tmp","appendRaw","nbChars","appendOptional","getEntryRule","grammar","ast.isParserRule","getHiddenRules","ast.isTerminalRule","getAllReachableRules","allTerminals","ruleNames","entryRule","topMostRules","rule","ruleDfs","rules","visitedSet","ast.isRuleCall","refRule","getCrossReferenceTerminal","crossRef","nameAssigment","findNameAssignment","isCommentTerminal","terminalRule","terminalRegex","findNodesForProperty","findNodesForPropertyInternal","findNodeForProperty","nodes","first","nodeFeature","ast.isAssignment","findNodeForKeyword","findNodesForKeywordInternal","ast.isKeyword","treeIterator","keywordNodes","childNode","findAssignment","assignment","startNode","ast.isInferredType","ast.isAction","findNameAssignmentInternal","cache","go","refType","childAssignment","ast.isSimpleType","isDataTypeRule","isDataTypeRuleInternal","visited","getExplicitRuleType","ast.isInterface","ast.isType","getTypeName","ast.isReturnType","actionType","getActionType","action","getRuleType","_b","_c","abstractElementToRegex","flagText","WILDCARD","ast.isTerminalAlternatives","terminalAlternativesToRegex","ast.isTerminalGroup","terminalGroupToRegex","ast.isCharacterRange","characterRangeToRegex","ast.isTerminalRuleCall","withCardinality","ast.isNegatedToken","negateTokenToRegex","ast.isUntilToken","untilTokenToRegex","ast.isRegexToken","lastSlash","regexFlags","ast.isWildcard","alternatives","group","until","negate","keywordToRegex","createGrammarConfig","services","freeGlobal","freeSelf","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","length","isArray","symbolProto","symbolToString","baseToString","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","isObject","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","remainder","identity","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","object","getNative","WeakMap","objectCreate","baseCreate","proto","apply","thisArg","args","noop","copyArray","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","setToString","arrayEach","baseFindIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","assignValue","objValue","copyObject","props","customizer","isNew","newValue","nativeMax","overRest","start","transform","otherArgs","baseRest","isLength","isArrayLike","isIterateeCall","createAssigner","assigner","sources","guard","isPrototype","Ctor","baseTimes","n","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","skipIndexes","overArg","arg","nativeKeys","baseKeys","keys","assign","nativeKeysIn","baseKeysIn","isProto","keysIn","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","entry","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","FUNC_ERROR_TEXT","memoize","resolver","memoized","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","castPath","toKey","baseGet","path","get","defaultValue","arrayPush","values","spreadableSymbol","isFlattenable","isStrict","flatten","getPrototype","baseSlice","arrayReduce","accumulator","initAccum","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","baseAssign","baseAssignIn","allocUnsafe","cloneBuffer","buffer","isDeep","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_FLAT_FLAG","cloneableTags","baseClone","bitmask","stack","isFlat","isFunc","stacked","subValue","CLONE_SYMBOLS_FLAG","clone","compact","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","arrayAggregator","setter","createBaseFor","iterable","baseFor","baseForOwn","createBaseEach","eachFunc","baseEach","baseAggregator","createAggregator","initializer","defaults","propsIndex","propsLength","isArrayLikeObject","baseDifference","comparator","includes","isCommon","valuesLength","outer","computed","valuesIndex","difference","last","drop","dropRight","castFunction","forEach","arrayEvery","baseEvery","every","baseFilter","filter","createFind","findIndexFunc","findIndex","find","head","baseMap","groupBy","baseHas","has","isString","baseValues","indexOf","isEmpty","baseIsRegExp","nodeIsRegExp","isRegExp","isUndefined","baseSet","basePickBy","paths","pickBy","prop","baseReduce","reduce","reject","baseSome","some","createSet","seenIndex","uniq","PRINT_ERROR","msg","PRINT_WARNING","timer","val","toFastProperties","toBecomeFast","FakeConstructor","fakeInstance","fakeAccess","tokenLabel","tokType","hasTokenLabel","AbstractProduction","_definition","prod","NonTerminal","v","definition","Rule","Alternative","RepetitionMandatory","RepetitionMandatoryWithSeparator","Repetition","RepetitionWithSeparator","Alternation","Terminal","serializeGrammar","topRules","serializeProduction","convertDefinition","serializedNonTerminal","Option","serializedTerminal","GAstVisitor","nodeAny","isSequenceProd","isOptionalProd","alreadyVisited","subProd","isBranchingProd","getProductionDslName","RestWalker","prevRest","currRest","terminal","refProd","flatProd","fullOrRest","optionProd","atLeastOneProd","fullAtLeastOneRest","atLeastOneSepProd","fullAtLeastOneSepRest","restForRepetitionWithSeparator","manyProd","fullManyRest","manySepProd","fullManySepRest","orProd","alt","prodWrapper","repSepProd","firstForTerminal","firstForSequence","firstForBranching","firstSet","seq","nextSubProdIdx","hasInnerProdsRemaining","currSubProd","isLastInnerProdOptional","allAlternativesFirsts","innerProd","IN","ResyncFollowsWalker","topProd","followName","buildBetweenProdsFollowPrefix","fullRest","restProd","t_in_topProd_follows","computeAllProdsFollows","topProductions","reSyncFollows","currRefsFollow","inner","occurenceInParent","regExpAstCache","regExpParser","getRegExpAst","regExp","regExpStr","regExpAst","clearRegExpParserCache","complementErrorMessage","failedOptimizationPrefixMsg","getOptimizedStartCodesIndices","ensureOptimizations","ast","firstCharOptimizedIndices","msgSuffix","ignoreCase","term","addOptimizedIdxToResult","code","rangeCode","minOptimizationVal","minUnOptVal","maxUnOptVal","minOptIdx","charCodeToOptimizedIndex","maxOptIdx","currOptIdx","isOptionalQuantifier","isWholeOptional","optimizedCharIdx","handleIgnoreCase","upperChar","lowerChar","findCode","setNode","targetCharCodes","codeOrRange","targetCode","quantifier","CharCodeFinder","canMatchCharCode","charCodes","charCodeFinder","PATTERN","DEFAULT_MODE","MODES","SUPPORT_STICKY","analyzeTokenTypes","tokenTypes","tracer","initCharCodeToOptimizedIndexMap","onlyRelevantTypes","currType","Lexer","hasCustom","allTransformedPatterns","currPattern","regExpSource","addStickyFlag","addStartOfInput","escapedRegExpString","wrappedRegExp","patternIdxToType","patternIdxToGroup","patternIdxToLongerAltIdxArr","patternIdxToPushMode","patternIdxToPopMode","clazz","groupName","longerAltType","patternIdxToCanLineTerminator","lineTerminatorCharCodes","getCharCodes","checkLineBreaksIssues","patternIdxToIsCustom","patternIdxToShort","emptyGroups","patternIdxToConfig","isCustomPattern","isShortPattern","acc","x","idx","canBeOptimized","charCodeToPatternIdxToConfig","currTokType","charCode","optimizedIdx","addToMapOfArrays","lastOptimizedIdx","charOrInt","currOptimizedIdx","optimizedCodes","validatePatterns","validModesNames","errors","missingResult","findMissingPatterns","invalidResult","findInvalidPatterns","validTokenTypes","validateRegExpPattern","findInvalidGroupType","findModesThatDoNotExist","findUnreachablePatterns","withRegExpPatterns","findEndOfInputAnchor","findStartOfInputAnchor","findUnsupportedFlags","findDuplicatePatterns","findEmptyMatchRegExps","tokenTypesWithMissingPattern","LexerDefinitionErrorType","valid","tokenTypesWithInvalidPattern","end_of_input","EndAnchorFinder","invalidRegex","regexpAst","endAnchorVisitor","matchesEmptyString","start_of_input","StartAnchorFinder","startAnchorVisitor","invalidFlags","found","identicalPatterns","outerType","innerType","duplicatePatterns","currIdenticalSet","setOfIdentical","tokenTypeNames","invalidTypes","validModes","invalidModes","canBeTested","noMetaChar","testIdx","str","tokenType","testTokenType","regExpArray","performRuntimeChecks","lexerDefinition","trackLines","lineTerminatorCharacters","currModeValue","currModeName","currIdx","longerAlt","currLongerAlt","performWarningRuntimeChecks","warnings","hasAnyLineBreak","allTokenTypes","concreteTokenTypes","terminatorCharCodes","currIssue","warningDescriptor","buildLineBreakIssueMessage","cloneEmptyGroups","clonedResult","groupKeys","currKey","currGroupValue","LineTerminatorOptimizedTester","text","len","c","details","charsOrCodes","numOrString","charCodeToOptimizedIdxMap","tokenStructuredMatcher","tokInstance","tokConstructor","instanceType","tokenStructuredMatcherNoCategories","tokenShortNameIdx","tokenIdxToClass","augmentTokenTypes","tokenTypesAndParents","expandCategories","assignTokenDefaultProps","assignCategoriesMapProp","assignCategoriesTokensProp","categories","searching","newCategories","hasShortKeyProperty","hasCategoriesProperty","hasExtendingTokensTypesProperty","hasExtendingTokensTypesMapProperty","singleAssignCategoriesToksMap","nextNode","pathNode","nextCategory","newPath","isTokenType","defaultLexerErrorProvider","fullText","startOffset","line","column","DEFAULT_LEXER_CONFIG","config","phaseDesc","phaseImpl","indent","time","traceMethod","traceInitVal","actualDefinition","hasOnlySingleMode","allModeNames","currModDef","currModName","currAnalyzeResult","allErrMessagesString","error","unOptimizedModes","cannotBeOptimized","modeName","initialMode","j","k","matchAltImage","matchedImage","payload","altPayload","imageLength","newToken","errLength","orgText","orgLength","matchedTokensIndex","guessedNumberOfTokens","matchedTokens","groups","lineTerminatorPattern","currModePatternsLength","currCharCodeToPatternIdxToConfig","modeStack","emptyArray","getPossiblePatterns","getPossiblePatternsSlow","getPossiblePatternsOptimized","possiblePatterns","pop_mode","popToken","newMode","modeCanBeOptimized","push_mode","currConfig","recoveryEnabled","nextCharCode","chosenPatternIdxToConfig","chosenPatternsLength","singleCharCode","longerAltLength","longerAltConfig","longerAltPattern","numOfLTsInMatch","foundTerminator","lastLTEndOffset","errorStartOffset","errorLine","errorColumn","foundResyncPoint","pushMode","newLastIndex","lastLTIdx","lastCharIsLT","fixForEndingInLT","oldColumn","image","tokenTypeIdx","startLine","startColumn","tokenVector","tokenToAdd","PARENT","CATEGORIES","LABEL","GROUP","PUSH_MODE","POP_MODE","LONGER_ALT","LINE_BREAKS","START_CHARS_HINT","createToken","createTokenInternal","EOF","createTokenInstance","endOffset","endLine","endColumn","tokenMatcher","defaultParserErrorProvider","expected","actual","ruleName","firstRedundant","expectedPathsPerAlt","customUserDescription","errPrefix","errSuffix","allLookAheadPaths","currAltPaths","nextValidTokenSequences","currPath","currTokenType","calculatedDescription","itemMsg","expectedIterationPaths","defaultGrammarResolverErrorProvider","topLevelRule","undefinedRule","defaultGrammarValidatorErrorProvider","duplicateProds","getExtraProductionArgument","topLevelName","duplicateProd","dslName","extraArgument","hasExplicitIndex","pathMsg","currTok","occurrence","currtok","currMessage","pathNames","currRule","leftRecursivePath","resolveGrammar","topLevels","errMsgProvider","refResolver","GastRefResolverVisitor","nameToTopRule","ref","ParserDefinitionErrorType","AbstractNextPossibleTokensWalker","NextAfterTokenWalker","AbstractNextTerminalAfterProductionWalker","topRule","NextTerminalAfterManyWalker","firstAfterMany","_first","NextTerminalAfterManySepWalker","firstAfterManySep","NextTerminalAfterAtLeastOneWalker","firstAfterAtLeastOne","NextTerminalAfterAtLeastOneSepWalker","atleastOneSepProd","firstAfterfirstAfterAtLeastOneSep","possiblePathsFrom","targetDef","maxLength","remainingPathWith","nextDef","getAlternativesForProd","newDef","currAlt","nextPossibleTokensAfter","initialDef","tokMatcher","maxLookAhead","EXIT_NON_TERMINAL","EXIT_NON_TERMINAL_ARR","EXIT_ALTERNATIVE","foundCompletePath","tokenVectorLength","minimalAlternativesIndex","possiblePaths","currDef","currRuleStack","currOccurrenceStack","nextPath","nextIdx","actualToken","newRuleStack","newOccurrenceStack","nextPathWithout","nextPathWith","secondIteration","separatorGast","nthRepetition","currAltPath","expandTopLevelRule","newCurrOccurrenceStack","PROD_TYPE","getProdType","getLookaheadPaths","prodType","maxLookahead","getLookaheadPathsForOr","getLookaheadPathsForOptionalProd","buildLookaheadFuncForOr","ruleGrammar","hasPredicates","dynamicTokensEnabled","laFuncBuilder","lookAheadPaths","areTokenCategoriesNotUsed","buildLookaheadFuncForOptionalProd","lookaheadBuilder","buildAlternativesLookAheadFunc","numOfAlts","areAllOneTokenLookahead","orAlts","predicates","t","currNumOfPaths","currPredicate","currPathLength","nextToken","singleTokenAlts","choiceToAlt","currExtendingType","buildSingleAlternativeLookaheadFunction","numOfPaths","singleTokensTypes","expectedTokenUniqueKey","RestDefinitionFinderWalker","targetOccurrence","targetProdType","expectedProdType","InsideDefinitionFinderVisitor","targetRef","expectedProdName","initializeArrayOfArrays","pathToHashKeys","longerKeys","currShorterKey","categoriesKeySuffix","isUniquePrefixHash","altKnownPathsKeys","searchPathKeys","currAltIdx","otherAltKnownPathsKeys","searchIdx","searchKey","lookAheadSequenceFromAlternatives","altsDefs","partialAlts","finalResult","altsHashes","dict","newData","pathLength","currDataset","altIdx","currAltPathsAndSuffixes","currPathIdx","currPathPrefix","suffixDef","prefixKeys","currAltResult","containsPath","newPartialPathsAndSuffixes","insideDefVisitor","insideDef","afterDef","insideFlat","AlternativeGAST","afterFlat","alternative","searchPath","compareOtherPath","otherPath","searchTok","otherTok","isStrictPrefixOfPath","prefix","otherTokType","singleAltPaths","singlePath","validateLookahead","lookaheadValidationErrorMessages","errorMessage","validateGrammar","grammarName","duplicateErrors","currTopLevel","validateDuplicateProductions","termsNamespaceConflictErrors","checkTerminalAndNoneTerminalsNameSpace","tooManyAltsErrors","curRule","validateTooManyAlts","duplicateRulesError","validateRuleDoesNotAlreadyExist","collectorVisitor","OccurrenceValidationCollector","allRuleProductions","productionGroups","identifyProductionForDuplicates","duplicates","currGroup","currDuplicates","firstProd","defError","param","subrule","option","manySep","atLeastOne","atLeastOneSep","many","or","allRules","className","errMsg","validateRuleIsOverridden","definedRulesNames","validateNoLeftRecursion","nextNonTerminals","getFirstNoneTerminal","validNextSteps","errorsFromNextSteps","currRefRule","currSubDef","isFirstOptional","hasMore","rest","OrCollector","validateEmptyOrAlternative","orCollector","ors","currOr","exceptLast","currAlternative","possibleFirstInAlt","validateAmbiguousAlternationAlternatives","globalMaxLookahead","currOccurrence","actualMaxLookahead","altsAmbiguityErrors","checkAlternativesAmbiguities","altsPrefixAmbiguityErrors","checkPrefixAlternativesAmbiguities","RepetitionCollector","validateSomeNonEmptyLookaheadPath","topLevelRules","currTopRule","currProd","pathsInsideProduction","alternation","foundAmbiguousPaths","identicalAmbiguities","altsCurrPathAppearsIn","currOtherAlt","currOtherAltIdx","currAmbDescriptor","ambgIndices","pathsAndIndices","currPathsAndIdx","currPathAndIdx","targetIdx","targetPath","prefixAmbiguitiesPathsAndIndices","searchPathAndIdx","currAmbPathAndIdx","tokenNames","currToken","currRuleName","actualOptions","topRulesTable","orgResolveGrammar","orgValidateGrammar","MISMATCHED_TOKEN_EXCEPTION","NO_VIABLE_ALT_EXCEPTION","EARLY_EXIT_EXCEPTION","NOT_ALL_INPUT_PARSED_EXCEPTION","RECOGNITION_EXCEPTION_NAMES","isRecognitionException","RecognitionException","MismatchedTokenException","previousToken","NoViableAltException","NotAllInputParsedException","EarlyExitException","EOF_FOLLOW_KEY","IN_RULE_RECOVERY_EXCEPTION","InRuleRecoveryException","Recoverable","DEFAULT_PARSER_CONFIG","attemptInRepetitionRecovery","tokToInsert","grammarRule","grammarRuleArgs","lookAheadFunc","expectedTokType","reSyncTokType","savedLexerState","resyncedTokens","passedResyncPoint","nextTokenWithoutResync","generateErrorMessage","expectTokAfterLastMatch","nextTokIdx","notStuck","tokIdxInRule","grammarPath","follows","nextTok","expectedToken","mismatchedTok","possibleFollowsTokType","followKey","currentRuleReSyncSet","allPossibleReSyncTokTypes","foundMatch","resyncTokType","currRuleShortName","currRuleIdx","prevRuleShortName","explicitRuleStack","explicitOccurrenceStack","followStack","resyncTokens","prodFunc","lookaheadFunc","dslMethodIdx","prodOccurrence","nextToksWalker","pathRuleStack","pathOccurrenceStack","currShortName","firstAfterRepInfo","isEndOfRule","BITS_FOR_METHOD_TYPE","BITS_FOR_OCCURRENCE_IDX","OR_IDX","OPTION_IDX","MANY_IDX","AT_LEAST_ONE_IDX","MANY_SEP_IDX","AT_LEAST_ONE_SEP_IDX","getKeyForAutomaticLookahead","ruleIdx","LLkLookaheadStrategy","leftRecursionErrors","emptyAltErrors","ambiguousAltsErrors","emptyRepetitionErrors","LooksAhead","repetition","repetitionMandatory","repetitionMandatoryWithSeparator","repetitionWithSeparator","collectMethods","prodIdx","laFunc","prodKey","prodMaxLookahead","dslMethodName","DslMethodsCollectorVisitor","dslMethods","setNodeLocationOnlyOffset","currNodeLocation","newLocationInfo","setNodeLocationFull","addTerminalToCst","tokenTypeName","addNoneTerminalToCst","ruleResult","NAME","defineNameProp","nameValue","defaultVisit","ctx","childrenNames","childrenNamesLength","currChildName","currChildArray","currChildArrayLength","currChild","createBaseSemanticVisitorConstructor","derivedConstructor","semanticProto","semanticDefinitionErrors","validateVisitor","errorMessages","currDefError","createBaseVisitorConstructorWithDefaults","baseConstructor","withDefaultsProto","CstVisitorDefinitionError","visitorInstance","validateMissingCstMethods","missingRuleNames","TreeBuilder","fullRuleName","ruleCstNode","prevToken","loc","consumedToken","rootCst","ruleCstResult","preCstNode","newBaseCstVisitorConstructor","newConstructor","ruleStack","occurrenceStack","LexerAdapter","newInput","END_OF_FILE","soughtIdx","RecognizerApi","impl","ruleToCall","actionORMethodDef","altsOrOpts","implementation","DEFAULT_RULE_CONFIG","ruleImplementation","ruleErrors","orgState","RecognizerEngine","tokenVocabulary","uniqueTokens","noTokenCategoriesUsed","tokenConstructor","resyncEnabled","recoveryValueFunc","shortName","invokeRuleWithTry","cst","resyncEnabledConfig","isFirstInvokedRule","reSyncEnabled","recogError","partialCstResult","orgLookaheadFunction","laKey","separatorLookAheadFunc","lookaheadFunction","nextTerminalAfterWalker","beforeIteration","altIdxToTake","firstRedundantTok","eFromConsumption","eFromInRuleRecovery","savedErrors","savedRuleStack","fullName","idxInCallingRule","ErrorHandler","newErrors","userDefinedErrMsg","insideProdPaths","actualTokens","errMsgTypes","lookAheadPathsPerAlternative","ContentAssist","startRuleName","precedingInput","startRuleGast","topRuleName","topProduction","RECORDING_NULL_OBJECT","HANDLE_SEPARATOR","MAX_METHOD_IDX","RFT","RECORDING_PHASE_TOKEN","RECORDING_PHASE_CSTNODE","GastRecorder","arg1","arg2","that","def","newTopLevelRule","originalError","recordProd","recordOrProd","assertMethodIdxIsValid","getIdxSuffix","prevProd","peek","newNoneTerminal","prodConstructor","mainProdArg","handleSep","grammarAction","newProd","hasOptions","newOrProd","currAltFlat","PerformanceTracer","userTraceInitPerf","traceIsNumber","applyMixins","derivedCtor","baseCtors","baseCtor","baseProto","propName","basePropDescriptor","EMPTY_ALT","Parser","parserInstance","defErrorsMsgs","originalGrammarAction","recordedRuleGast","resolverErrors","validationErrors","lookaheadValidationErrors","allFollows","EmbeddedActionsParser","configClone","buildATNKey","ATN_BASIC","ATN_RULE_START","ATN_PLUS_BLOCK_START","ATN_STAR_BLOCK_START","ATN_RULE_STOP","ATN_BLOCK_END","ATN_STAR_LOOP_BACK","ATN_STAR_LOOP_ENTRY","ATN_PLUS_LOOP_BACK","ATN_LOOP_END","AbstractTransition","target","AtomTransition","EpsilonTransition","RuleTransition","ruleStart","followState","createATN","atn","createRuleStartAndStopATNStates","ruleLength","ruleBlock","block","buildRuleHandle","stop","production","tokenRef","ruleRef","repetitionSep","repetitionMandatorySep","starState","defineDecisionState","handle","makeAlts","star","sep","plusState","plus","optional","handles","makeBlock","blkStart","blkEnd","loop","epsilon","loopEnd","altsLength","transition","isRuleTransition","ruleTransition","removeState","left","right","addTransition","currentRule","nonTerminal","call","a","DFA_ERROR","ATNConfigSet","getATNConfigKey","createDFACache","startState","decision","predicateSet","PredicateSet","EMPTY_PREDICATES","LLStarLookaheadStrategy","initATNSimulator","dfas","logging","decisionIndex","isLL1Sequence","prediction","gate","adaptivePredict","g","sequences","allowEmpty","fullSet","altSet","indices","decisionLength","decisionToDFA","dfaCaches","dfa","closure","computeStartState","addDFAState","newDFAState","performLookahead","s0","previousD","d","getExistingTargetState","computeLookaheadTarget","buildAdaptivePredictError","lookahead","reach","computeReachSet","addDFAEdge","predictedAlt","getUniqueAlt","hasConflictTerminatingPrediction","reportLookaheadAmbiguity","ambiguityIndices","prefixPath","atnState","buildAmbiguityError","current","nextTransitions","nextTokenTypes","configs","intermediate","skippedStopStates","transitionLength","getReachableTarget","hasConfigInRuleStopState","mapKey","numberOfTransitions","p","atnStack","followConfig","getEpsilonTarget","allConfigsInRuleStopStates","altSets","getConflictingAltSets","hasConflictingAltSet","hasStateAssociatedWithOneAlt","configToAlts","DocumentUri","is","URI","integer","uinteger","Position","create","character","candidate","Is","Range","one","two","three","four","Location","uri","LocationLink","targetUri","targetRange","targetSelectionRange","originSelectionRange","Color","red","green","blue","alpha","ColorInformation","color","ColorPresentation","label","textEdit","additionalTextEdits","TextEdit","FoldingRangeKind","FoldingRange","startCharacter","endCharacter","kind","collapsedText","DiagnosticRelatedInformation","location","DiagnosticSeverity","DiagnosticTag","CodeDescription","Diagnostic","severity","relatedInformation","Command","title","command","replace","newText","insert","position","del","ChangeAnnotation","needsConfirmation","description","ChangeAnnotationIdentifier","AnnotatedTextEdit","annotation","TextDocumentEdit","textDocument","edits","OptionalVersionedTextDocumentIdentifier","CreateFile","RenameFile","oldUri","newUri","DeleteFile","WorkspaceEdit","change","TextDocumentIdentifier","VersionedTextDocumentIdentifier","version","TextDocumentItem","languageId","MarkupKind","MarkupContent","CompletionItemKind","InsertTextFormat","CompletionItemTag","InsertReplaceEdit","InsertTextMode","CompletionItemLabelDetails","CompletionItem","CompletionList","items","isIncomplete","MarkedString","fromPlainText","plainText","Hover","ParameterInformation","documentation","SignatureInformation","parameters","DocumentHighlightKind","DocumentHighlight","SymbolKind","SymbolTag","SymbolInformation","containerName","WorkspaceSymbol","DocumentSymbol","detail","selectionRange","CodeActionKind","CodeActionTriggerKind","CodeActionContext","diagnostics","only","triggerKind","CodeAction","kindOrCommandOrEdit","checkKind","CodeLens","FormattingOptions","tabSize","insertSpaces","DocumentLink","SelectionRange","SemanticTokenTypes","SemanticTokenModifiers","SemanticTokens","InlineValueText","InlineValueVariableLookup","variableName","caseSensitiveLookup","InlineValueEvaluatableExpression","expression","InlineValueContext","frameId","stoppedLocation","InlayHintKind","InlayHintLabelPart","InlayHint","StringValue","createSnippet","InlineCompletionItem","insertText","filterText","InlineCompletionList","InlineCompletionTriggerKind","SelectedCompletionInfo","InlineCompletionContext","selectedCompletionInfo","WorkspaceFolder","TextDocument","content","FullTextDocument","applyEdits","document","sortedEdits","mergeSort","diff","lastModifiedOffset","compare","leftIdx","rightIdx","FullTextDocument$1","event","lineOffsets","isLineStart","ch","low","high","mid","lineOffset","nextLineOffset","defined","undefined","boolean","numberRange","objectLiteral","check","CstNodeBuilder","RootCstNodeImpl","feature","compositeNode","CompositeCstNodeImpl","leafNode","LeafCstNodeImpl","tokens","added","AbstractCstNode","CstNodeContainer","firstNode","lastNode","firstRange","lastRange","DatatypeSymbol","isDataTypeNode","ruleSuffix","withRuleSuffix","AbstractLangiumParser","ChevrotainWrapper","choices","callback","LangiumParser","ruleMethod","explicit","lexerResult","$type","createNode","hiddenTokens","isCrossRef","convertedValue","fragment","subruleResult","newItem","operator","existingValue","targetCstNode","AbstractParserErrorMessageProvider","LangiumParserErrorMessageProvider","LangiumCompletionParser","defaultConfig","useDefaultLookahead","createParser","parser","buildRules","parserContext","reachable","parserRules","buildElement","ignoreGuard","method","buildKeyword","buildAction","buildCrossReference","buildRuleCall","buildAlternatives","buildUnorderedGroup","buildGroup","wrap","getGuardCondition","ruleCall","buildRuleCallPredicate","getRule","getToken","namedArgs","buildPredicate","ruleArgs","ruleTarget","condition","methods","predicatedMethod","orIdx","idFunc","groupIdx","lParser","stackId","groupState","trackedAlternatives","wrapped","assignTerminal","cardinality","getRuleName","createCompletionParser","lexer","createLangiumParser","prepareLangiumParser","DefaultTokenBuilder","reachableRules","terminalTokens","terminalToken","stickyRegex","caseInsensitive","keywordPattern","longerAlts","DefaultValueConverter","ValueConverter","convertString","c1","convertEscapeCharacter","convertID","convertInt","convertBigint","convertDate","convertNumber","convertBoolean","ral","_ral","RAL","install","stringArray","elem","events","Emitter_1","ral_1","require$$0","Event","_disposable","CallbackList","context","bucket","foundCallbackWithDifferentContext","ret","callbacks","contexts","Emitter","_options","listener","thisArgs","disposables","cancellation","CancellationTokenSource_1","CancellationToken_1","require$$1","events_1","require$$2","CancellationToken","shortcutEvent","MutableToken","CancellationTokenSource","delayNextTick","resolve","lastTick","globalInterruptionPeriod","startCancelableOperation","OperationCancelled","isOperationCancelled","err","interruptAndCheck","Deferred","changes","getWellformedRange","addedLineOffsets","computeLineOffsets","isEOL","update","getWellformedEdit","spans","isAtLineStart","textOffset","LIB","r","o","s","h","f","u","l","P","__publicField","m","C","y","A","w","Utils","UriUtils","equals","relative","fromPath","toPath","fromParts","toParts","backPart","toPart","normalize","DocumentState","DefaultLangiumDocumentFactory","cancellationToken","model","parseResult","cancelToken","textDocumentGetter","oldText","serviceRegistry","textDoc","DefaultLangiumDocuments","uriString","langiumDoc","ref_resolving","DefaultLinker","linkedNode","refNode","refText","linker","reference","refData","nodeDescription","doc","targetDescription","referenceType","isNamed","DefaultNameProvider","DefaultReferences","sourceCstNode","nodeElem","nameNode","targetNode","refs","indexReferences","MultiMap","elements","BiMap","DefaultScopeComputation","parentNode","exports","rootNode","scopes","container","StreamScope","outerScope","local","MapScope","localName","elementStream","DisposableCache","disposable","SimpleCache","provider","ContextCache","converter","contextKey","contextCache","documentCache","WorkspaceCache","sharedServices","_changed","deleted","DefaultScopeProvider","precomputed","currentNode","allDescriptions","desc","_context","isAstNodeWithComment","isIntermediateReference","DefaultJsonSerializer","serializeOptions","specificReplacer","defaultReplacer","replacer","deserializeOptions","sourceText","textRegions","comments","uriConverter","_d","refValue","$refText","targetDocument","comment","createDocumentSegment","textRegion","assignments","propertyAssignments","containerProperty","containerIndex","propertyName","mutable","fragmentIndex","documentUri","DefaultServiceRegistry","language","ext","diagnosticData","ValidationCategory","ValidationRegistry","checksRecord","thisObj","category","accept","functionality","messageContext","messageDetails","checks","checkBefore","checkAfter","DefaultDocumentValidator","DocumentValidator","lexerDiagnostics","lexerDiagnostic","diagnostic","toDiagnosticSeverity","toDiagnosticData","parserError","linkingError","info","validationItems","acceptor","checksBefore","checksAfter","getDiagnosticRange","DefaultAstNodeDescriptionProvider","nameNodeSegment","nameSegmentGetter","DefaultReferenceDescriptionProvider","descr","targetNodeDescr","refCstNode","docUri","DefaultAstNodeLocator","containerPath","newSegment","$containerProperty","$containerIndex","currentValue","propertyIndex","arrayIndex","DefaultConfigurationProvider","params","languages","lang","configToUpdate","conf","section","configuration","sectionName","Disposable","DefaultDocumentBuilder","documents","buildState","previousCategories","changed","deletedUri","changedUri","newDocument","allChangedUris","rebuildDocuments","changedUris","scopeComputation","toBeValidated","targetState","filtered","targetStateDocs","uriOrToken","buildDisposable","cancelDisposable","listenersCopy","validator","validationSetting","DefaultIndexManager","astNodePath","targetDocUri","docRefs","refDescr","nodeType","uris","documentUris","indexData","references","DefaultWorkspaceManager","_params","folders","fileExtensions","collector","wf","_folders","_collector","workspaceFolder","folderPath","_workspaceFolder","extname","DefaultLexerErrorMessageProvider","DEFAULT_TOKENIZE_OPTIONS","DefaultLexer","lexerTokens","isTokenTypeDictionary","ChevrotainLexer","chevrotainResult","buildTokens","isIMultiModeLexerDefinition","res","isTokenTypeArray","parseJSDoc","opts","lines","getLines","normalizedOptions","normalizeOptions","tokenize","parseJSDocComment","isJSDoc","firstRegex","lastRegex","tagRegex","inlineTagRegex","currentLine","currentCharacter","lastCharacter","skipWhitespace","tagMatch","fullMatch","inlineTagMatches","buildInlineTokens","tags","lineIndex","characterIndex","matchIndex","startContent","tagName","endContent","nonWhitespaceRegex","whitespaceEndRegex","startPosition","JSDocCommentImpl","parseJSDocElement","parseJSDocTag","parseJSDocText","appendEmptyLine","JSDocLineImpl","firstToken","lastToken","parseJSDocInline","JSDocTextImpl","parseJSDocLine","inline","tagToken","docLine","JSDocTagImpl","normalizeOption","escaped","fillNewlines","rendered","renderInlineTag","marker","display","displayStart","renderLinkDefault","JSDocDocumentationProvider","link","_node","_tag","DefaultCommentProvider","DefaultAsyncParser","_cancelToken","DefaultWorkspaceLock","tokenSource","queue","deferred","DefaultHydrator","lexerReport","astNodes","cstNodes","arr","num","cstNodeObj","hydrated","id","createDefaultCoreModule","createDefaultSharedCoreModule","Module","m1","m2","_merge","inject","module1","module2","module3","module4","module5","module6","module7","module8","module9","module","_inject","isProxy","injector","proxy","_resolve","__requested__","value2","value1","EmptyFileSystemProvider","EmptyFileSystem","minimalGrammarModule","minimalSharedGrammarModule","ast.LangiumGrammarAstReflection","createMinimalGrammarServices","shared","loadGrammarFromJson","json","__defProp","__name","Statement","Architecture","isArchitecture","Axis","Branch","isBranch","Checkout","CherryPicking","ClassDefStatement","Commit","isCommit","Curve","Edge","Entry","GitGraph","isGitGraph","Info","isInfo","Item","Junction","Merge","isMerge","Packet","isPacket","PacketBlock","isPacketBlock","Pie","isPie","PieSection","isPieSection","Radar","Service","Treemap","isTreemap","TreemapRow","Direction","Leaf","Section","MermaidAstReflection","loadedInfoGrammar","InfoGrammar","loadedPacketGrammar","PacketGrammar","loadedPieGrammar","PieGrammar","loadedArchitectureGrammar","ArchitectureGrammar","loadedGitGraphGrammar","GitGraphGrammar","loadedRadarGrammar","RadarGrammar","loadedTreemapGrammar","TreemapGrammar","InfoLanguageMetaData","PacketLanguageMetaData","PieLanguageMetaData","ArchitectureLanguageMetaData","GitGraphLanguageMetaData","RadarLanguageMetaData","TreemapLanguageMetaData","MermaidGeneratedSharedModule","InfoGeneratedModule","PacketGeneratedModule","PieGeneratedModule","ArchitectureGeneratedModule","GitGraphGeneratedModule","RadarGeneratedModule","TreemapGeneratedModule","accessibilityDescrRegex","accessibilityTitleRegex","titleRegex","rulesRegexes","AbstractMermaidValueConverter","_cstNode","CommonValueConverter","_rule","_input","AbstractMermaidTokenBuilder","keywords","GitGraphTokenBuilder","GitGraphModule","createGitGraphServices","InfoTokenBuilder","InfoModule","createInfoServices","PacketTokenBuilder","PacketModule","createPacketServices","PieTokenBuilder","PieValueConverter","PieModule","createPieServices","ArchitectureTokenBuilder","ArchitectureValueConverter","ArchitectureModule","createArchitectureServices","RadarTokenBuilder","RadarModule","createRadarServices","TreemapTokenBuilder","classDefRegex","TreemapValueConverter","registerValidationChecks","registry","TreemapValidator","rootNodeIndentation","row","TreemapModule","createTreemapServices","parsers","initializers","createInfoServices2","createPacketServices2","createPieServices2","createArchitectureServices2","createGitGraphServices2","createRadarServices2","createTreemapServices2","parse","diagramType","MermaidParseError","lexerErrors","parserErrors"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507]}