{"version":3,"sources":["../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/utils/is.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/is.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messages.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/linkedMap.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/disposable.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/ral.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/events.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/cancellation.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/semaphore.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageReader.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageWriter.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/connection.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/api.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/node/ril.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/node/main.js","../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/node.js","../../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/umd/main.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/messages.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/protocol.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/connection.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/common/api.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/lib/node/main.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/utils/async.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolCodeLens.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolCodeAction.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolInlayHint.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/codeConverter.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/protocolConverter.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/utils/uuid.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/progressPart.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/features.js","../../../node_modules/.pnpm/minimatch@5.1.6/node_modules/minimatch/lib/path.js","../../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js","../../../node_modules/.pnpm/brace-expansion@2.0.1/node_modules/brace-expansion/index.js","../../../node_modules/.pnpm/minimatch@5.1.6/node_modules/minimatch/minimatch.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/diagnostic.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/notebook.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/configuration.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/textSynchronization.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/completion.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/hover.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/definition.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/signatureHelp.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/documentHighlight.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/documentSymbol.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/workspaceSymbol.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/reference.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/codeAction.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/codeLens.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/formatting.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/rename.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/documentLink.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/executeCommand.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/fileSystemWatcher.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/colorProvider.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/implementation.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/typeDefinition.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/workspaceFolder.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/foldingRange.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/declaration.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/selectionRange.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/progress.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/callHierarchy.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/semanticTokens.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/fileOperations.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/linkedEditingRange.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/typeHierarchy.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/inlineValue.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/inlayHint.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/inlineCompletion.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/client.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/node/processes.js","../../../node_modules/.pnpm/vscode-languageserver-protocol@3.17.5/node_modules/vscode-languageserver-protocol/node.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.7.1/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/common/api.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/lib/node/main.js","../../../node_modules/.pnpm/vscode-languageclient@9.0.1/node_modules/vscode-languageclient/node.js","../src/extension/main.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/index.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/cst-utils.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/syntax-tree.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/stream.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/grammar-utils.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/errors.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/languages/generated/ast.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/ast-utils.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/regexp-utils.ts","../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/utils.ts","../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/character-classes.ts","../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/regexp-parser.ts","../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/base-regexp-visitor.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/languages/grammar-config.ts","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toFinite.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toInteger.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNaN.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAssigner.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/assign.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/get.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSlice.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayReduce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/clone.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/compact.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMatch.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isStrictComparable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMatchData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_matchesStrictComparable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatches.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHasIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/hasIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatchesProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePropertyDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/property.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIteratee.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayAggregator.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAggregator.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAggregator.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaults.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludesWith.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseDifference.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/difference.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/drop.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/dropRight.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEvery.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEvery.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/every.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/filter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createFind.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/find.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/head.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/groupBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/has.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseValues.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/values.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/includes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/indexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEmpty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsRegExp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isRegExp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isUndefined.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseLt.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseExtremum.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/min.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/negate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePickBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pickBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseReduce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/some.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUniq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqBy.js","../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/print.ts","../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/timer.ts","../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/to-fast-properties.ts","../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/model.ts","../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/visitor.ts","../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/helpers.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/rest.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/first.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/constants.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/follow.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/reg_exp_parser.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/reg_exp.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/lexer.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/tokens.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/lexer_errors_public.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/lexer_public.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/tokens_public.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/errors_public.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/resolver.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/interpreter.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/lookahead.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/checks.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/gast/gast_resolver_public.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/exceptions_public.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/recoverable.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/keys.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/llk_lookahead.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/looksahead.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/cst/cst.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/lang/lang_extensions.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/cst/cst_visitor.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/tree_builder.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/lexer_adapter.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/recognizer_api.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/recognizer_engine.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/error_handler.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/context_assist.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/gast_recorder.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/perf_tracer.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/utils/apply_mixins.ts","../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/parser.ts","../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/atn.ts","../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/dfa.ts","../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/all-star-lookahead.ts","../../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/esm/main.js","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/cst-node-builder.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/langium-parser.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/parser-builder-base.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/completion-parser-builder.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/langium-parser-builder.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/token-builder.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/value-converter.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/cancellation.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/promise-utils.ts","../../../node_modules/.pnpm/vscode-languageserver-textdocument@1.0.12/node_modules/vscode-languageserver-textdocument/lib/esm/main.js","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/node_modules/path-browserify/index.js","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/webpack/bootstrap","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/webpack/runtime/define%20property%20getters","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/webpack/runtime/hasOwnProperty%20shorthand","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/webpack/runtime/make%20namespace%20object","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/src/platform.ts","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/src/uri.ts","../../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/webpack:/LIB/src/utils.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/uri-utils.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/documents.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/references/linker.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/references/name-provider.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/references/references.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/collections.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/references/scope-computation.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/references/scope.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/caching.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/references/scope-provider.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/serializer/json-serializer.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/service-registry.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/validation/validation-registry.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/validation/document-validator.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/ast-descriptions.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/ast-node-locator.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/event.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/configuration.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/disposable.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/document-builder.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/index-manager.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/workspace-manager.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/lexer.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/documentation/jsdoc.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/documentation/documentation-provider.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/documentation/comment-provider.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/async-parser.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/workspace-lock.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/serializer/hydrator.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/default-module.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/dependency-injection.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/parser/indentation-aware.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/index.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/workspace/file-system-provider.ts","../../../node_modules/.pnpm/langium@3.3.0/node_modules/langium/src/utils/grammar-loader.ts","../src/language/builtin/index.ts","../src/extension/file-system-provider.ts"],"names":["exports","reject","error","require_is","ErrorCodes","Message","Touch","_a","Disposable","RAL","Event","Emitter","Is","CancellationToken","CancellationTokenSource","CancellationState","MessageReader","ResolvedMessageReaderOptions","MessageWriter","ResolvedMessageWriterOptions","result","CancelNotification","ProgressToken","ProgressNotification","StarRequestHandler","Trace","TraceValues","toString","TraceFormat","SetTraceNotification","LogTraceNotification","ConnectionErrors","ConnectionStrategy","IdCancellationReceiverStrategy","RequestCancellationReceiverStrategy","CancellationReceiverStrategy","CancellationSenderStrategy","CancellationStrategy","MessageStrategy","ConnectionOptions","ConnectionState","timer","startTime","first","last","stream","RIL","path","process","module","require_main","require","DocumentUri","URI","integer","uinteger","Position","Range","Location","LocationLink","Color","ColorInformation","ColorPresentation","TextEdit","FoldingRangeKind","FoldingRange","DiagnosticRelatedInformation","DiagnosticSeverity","DiagnosticTag","CodeDescription","Diagnostic","Command","ChangeAnnotation","ChangeAnnotationIdentifier","AnnotatedTextEdit","TextDocumentEdit","OptionalVersionedTextDocumentIdentifier","CreateFile","RenameFile","DeleteFile","WorkspaceEdit","TextEditChangeImpl","ChangeAnnotations","WorkspaceChange","TextDocumentIdentifier","VersionedTextDocumentIdentifier","TextDocumentItem","MarkupKind","MarkupContent","CompletionItemKind","InsertTextFormat","CompletionItemTag","InsertReplaceEdit","InsertTextMode","CompletionItemLabelDetails","CompletionItem","CompletionList","MarkedString","Hover","ParameterInformation","SignatureInformation","DocumentHighlightKind","DocumentHighlight","SymbolKind","SymbolTag","SymbolInformation","WorkspaceSymbol","DocumentSymbol","CodeActionKind","CodeActionTriggerKind","CodeActionContext","CodeAction","CodeLens","FormattingOptions","DocumentLink","SelectionRange","SemanticTokenTypes","SemanticTokenModifiers","SemanticTokens","InlineValueText","InlineValueVariableLookup","InlineValueEvaluatableExpression","InlineValueContext","InlayHintKind","InlayHintLabelPart","InlayHint","StringValue","InlineCompletionItem","InlineCompletionList","InlineCompletionTriggerKind","SelectedCompletionInfo","InlineCompletionContext","WorkspaceFolder","TextDocument","FullTextDocument","mergeSort","undefined","min","require_messages","MessageDirection","ImplementationRequest","TypeDefinitionRequest","WorkspaceFoldersRequest","DidChangeWorkspaceFoldersNotification","ConfigurationRequest","DocumentColorRequest","ColorPresentationRequest","FoldingRangeRequest","FoldingRangeRefreshRequest","DeclarationRequest","SelectionRangeRequest","WorkDoneProgress","WorkDoneProgressCreateRequest","WorkDoneProgressCancelNotification","CallHierarchyPrepareRequest","CallHierarchyIncomingCallsRequest","CallHierarchyOutgoingCallsRequest","TokenFormat","SemanticTokensRegistrationType","SemanticTokensRequest","SemanticTokensDeltaRequest","SemanticTokensRangeRequest","SemanticTokensRefreshRequest","ShowDocumentRequest","LinkedEditingRangeRequest","FileOperationPatternKind","WillCreateFilesRequest","DidCreateFilesNotification","WillRenameFilesRequest","DidRenameFilesNotification","DidDeleteFilesNotification","WillDeleteFilesRequest","UniquenessLevel","MonikerKind","MonikerRequest","TypeHierarchyPrepareRequest","TypeHierarchySupertypesRequest","TypeHierarchySubtypesRequest","InlineValueRequest","InlineValueRefreshRequest","InlayHintRequest","InlayHintResolveRequest","InlayHintRefreshRequest","DiagnosticServerCancellationData","DocumentDiagnosticReportKind","DocumentDiagnosticRequest","WorkspaceDiagnosticRequest","DiagnosticRefreshRequest","NotebookCellKind","ExecutionSummary","NotebookCell","NotebookDocument","NotebookDocumentSyncRegistrationType","DidOpenNotebookDocumentNotification","NotebookCellArrayChange","DidChangeNotebookDocumentNotification","DidSaveNotebookDocumentNotification","DidCloseNotebookDocumentNotification","InlineCompletionRequest","TextDocumentFilter","NotebookDocumentFilter","NotebookCellTextDocumentFilter","DocumentSelector","RegistrationRequest","UnregistrationRequest","ResourceOperationKind","FailureHandlingKind","PositionEncodingKind","StaticRegistrationOptions","TextDocumentRegistrationOptions","WorkDoneProgressOptions","InitializeRequest","InitializeErrorCodes","InitializedNotification","ShutdownRequest","ExitNotification","DidChangeConfigurationNotification","MessageType","ShowMessageNotification","ShowMessageRequest","LogMessageNotification","TelemetryEventNotification","TextDocumentSyncKind","DidOpenTextDocumentNotification","TextDocumentContentChangeEvent","DidChangeTextDocumentNotification","DidCloseTextDocumentNotification","DidSaveTextDocumentNotification","TextDocumentSaveReason","WillSaveTextDocumentNotification","WillSaveTextDocumentWaitUntilRequest","DidChangeWatchedFilesNotification","FileChangeType","RelativePattern","WatchKind","PublishDiagnosticsNotification","CompletionTriggerKind","CompletionRequest","CompletionResolveRequest","HoverRequest","SignatureHelpTriggerKind","SignatureHelpRequest","DefinitionRequest","ReferencesRequest","DocumentHighlightRequest","DocumentSymbolRequest","CodeActionRequest","CodeActionResolveRequest","WorkspaceSymbolRequest","WorkspaceSymbolResolveRequest","CodeLensRequest","CodeLensResolveRequest","CodeLensRefreshRequest","DocumentLinkRequest","DocumentLinkResolveRequest","DocumentFormattingRequest","DocumentRangeFormattingRequest","DocumentRangesFormattingRequest","DocumentOnTypeFormattingRequest","PrepareSupportDefaultBehavior","RenameRequest","PrepareRenameRequest","ExecuteCommandRequest","ApplyWorkspaceEditRequest","require_connection","require_api","LSPErrorCodes","map","forEach","DiagnosticCode","InsertReplaceRange","values","code","CodeBlock","filter","StaticFeature","DynamicFeature","client","data","star","set","negate","vsdiag","DiagnosticPullMode","RequestStateKind","PullState","DocumentOrUri","document","previousResultId","token","resultIds","Converter","c2p","event","$NotebookCell","$NotebookDocumentFilter","$NotebookDocumentSyncOptions","SyncInfo","notebookDocument","cells","params","sections","keys","textDocument","position","context","item","query","options","range","codeLens","FileFormattingOptions","ranges","ch","newName","link","color","positions","assign","viewPort","RevealOutputChannelOn","ErrorAction","CloseAction","State","SuspendMode","ResolvedClientOptions","ClientState","MessageTransports","newState","type","param","disposable","_resolve","connection","uri","diagnostics","ProposedFeatures","require_node","MAX_SAFE_INTEGER","createToken","eq","TransportKind","Transport","Executable","NodeModule","StreamInfo","ChildProcessInfo","LanguageClient","cp","transport","root","Reduction","RangeComparison","property","reflection","atom","Symbol","objectProto","nativeObjectToString","symToStringTag","INFINITY","funcProto","funcToString","hasOwnProperty","Buffer","argsTag","funcTag","freeExports","freeModule","moduleExports","isType","HASH_UNDEFINED","Map","propertyIsEnumerable","nativeGetSymbols","Promise","Set","mapTag","objectTag","setTag","weakMapTag","dataViewTag","Uint8Array","symbolProto","boolTag","dateTag","numberTag","regexpTag","stringTag","symbolTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","arrayTag","errorTag","genTag","key","CLONE_SYMBOLS_FLAG","othValue","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","symbolValueOf","collection","LARGE_ARRAY_SIZE","includes","nativeMax","FUNC_ERROR_TEXT","visitor","LexerDefinitionErrorType","msg","currConfig","tokenLabel","hasTokenLabel","getExtraProductionArgument","PROD_TYPE","tokenMatcher","prefixKeys","collectorVisitor","option","alternation","resolveGrammar","validateGrammar","repetition","repetitionMandatory","CstVisitorDefinitionError","allTokenTypes","invokeRuleWithTry","ParserDefinitionErrorType","block","plus","optional","getProdType","closure","getProductionDslName","ValueConverter","assertPath","TypeError","JSON","stringify","normalizeStringPosix","allowAboveRoot","res","lastSegmentLength","lastSlash","dots","i","length","charCodeAt","lastSlashIndex","lastIndexOf","slice","posix","resolve","cwd","resolvedPath","resolvedAbsolute","arguments","normalize","isAbsolute","trailingSeparator","join","joined","arg","relative","from","to","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","out","_makeLong","dirname","hasRoot","end","matchedSlash","basename","ext","start","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","format","pathObject","sep","dir","base","name","parse","ret","delimiter","win32","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","call","r","toStringTag","value","isWindows","platform","navigator","userAgent","indexOf","_schemePattern","_singleSlashStart","_doubleSlashStart","_validateUri","_strict","scheme","Error","authority","fragment","test","_empty","_slash","_regexp","schemeOrData","this","thing","fsPath","with","uriToFsPath","change","Uri","match","exec","percentDecode","replace","idx","substring","components","skipEncoding","_asFormatted","toJSON","_formatted","external","_fsPath","_sep","_pathSepMarker","$mid","encodeTable","encodeURIComponentFast","uriComponent","isPath","isAuthority","nativeEncodePos","pos","encodeURIComponent","charAt","substr","escaped","encodeURIComponentMinimal","keepDriveLetterCasing","toLowerCase","encoder","userinfo","String","fromCharCode","decodeURIComponentGraceful","str","decodeURIComponent","e","_rEncodedAsHex","posixPath","slash","Utils","t","joinPath","paths","resolvePath","slashAdded","UriUtils","DocumentState","node","documentUri","services","ValidationCategory","DocumentValidator","Module","LexingMode","EventEmitter","workspace","FileType","FileSystemError"],"mappings":"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","file":"extension.cjs","sourcesContent":["\"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.asPromise = exports.thenable = exports.typedArray = exports.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;\nfunction typedArray(value, check) {\n    return Array.isArray(value) && value.every(check);\n}\nexports.typedArray = typedArray;\nfunction thenable(value) {\n    return value && func(value.then);\n}\nexports.thenable = thenable;\nfunction asPromise(value) {\n    if (value instanceof Promise) {\n        return value;\n    }\n    else if (thenable(value)) {\n        return new Promise((resolve, reject) => {\n            value.then((resolved) => resolve(resolved), (error) => reject(error));\n        });\n    }\n    else {\n        return Promise.resolve(value);\n    }\n}\nexports.asPromise = asPromise;\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.Message = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType = exports.RequestType0 = exports.AbstractMessageSignature = exports.ParameterStructures = exports.ResponseError = exports.ErrorCodes = void 0;\nconst is = require(\"./is\");\n/**\n * Predefined error codes.\n */\nvar ErrorCodes;\n(function (ErrorCodes) {\n    // Defined by JSON RPC\n    ErrorCodes.ParseError = -32700;\n    ErrorCodes.InvalidRequest = -32600;\n    ErrorCodes.MethodNotFound = -32601;\n    ErrorCodes.InvalidParams = -32602;\n    ErrorCodes.InternalError = -32603;\n    /**\n     * This is the start range of JSON RPC reserved error codes.\n     * It doesn't denote a real error code. No application error codes should\n     * be defined between the start and end range. For backwards\n     * compatibility the `ServerNotInitialized` and the `UnknownErrorCode`\n     * are left in the range.\n     *\n     * @since 3.16.0\n    */\n    ErrorCodes.jsonrpcReservedErrorRangeStart = -32099;\n    /** @deprecated use  jsonrpcReservedErrorRangeStart */\n    ErrorCodes.serverErrorStart = -32099;\n    /**\n     * An error occurred when write a message to the transport layer.\n     */\n    ErrorCodes.MessageWriteError = -32099;\n    /**\n     * An error occurred when reading a message from the transport layer.\n     */\n    ErrorCodes.MessageReadError = -32098;\n    /**\n     * The connection got disposed or lost and all pending responses got\n     * rejected.\n     */\n    ErrorCodes.PendingResponseRejected = -32097;\n    /**\n     * The connection is inactive and a use of it failed.\n     */\n    ErrorCodes.ConnectionInactive = -32096;\n    /**\n     * Error code indicating that a server received a notification or\n     * request before the server has received the `initialize` request.\n     */\n    ErrorCodes.ServerNotInitialized = -32002;\n    ErrorCodes.UnknownErrorCode = -32001;\n    /**\n     * This is the end range of JSON RPC reserved error codes.\n     * It doesn't denote a real error code.\n     *\n     * @since 3.16.0\n    */\n    ErrorCodes.jsonrpcReservedErrorRangeEnd = -32000;\n    /** @deprecated use  jsonrpcReservedErrorRangeEnd */\n    ErrorCodes.serverErrorEnd = -32000;\n})(ErrorCodes || (exports.ErrorCodes = ErrorCodes = {}));\n/**\n * An error object return in a response in case a request\n * has failed.\n */\nclass ResponseError extends Error {\n    constructor(code, message, data) {\n        super(message);\n        this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;\n        this.data = data;\n        Object.setPrototypeOf(this, ResponseError.prototype);\n    }\n    toJson() {\n        const result = {\n            code: this.code,\n            message: this.message\n        };\n        if (this.data !== undefined) {\n            result.data = this.data;\n        }\n        return result;\n    }\n}\nexports.ResponseError = ResponseError;\nclass ParameterStructures {\n    constructor(kind) {\n        this.kind = kind;\n    }\n    static is(value) {\n        return value === ParameterStructures.auto || value === ParameterStructures.byName || value === ParameterStructures.byPosition;\n    }\n    toString() {\n        return this.kind;\n    }\n}\nexports.ParameterStructures = ParameterStructures;\n/**\n * The parameter structure is automatically inferred on the number of parameters\n * and the parameter type in case of a single param.\n */\nParameterStructures.auto = new ParameterStructures('auto');\n/**\n * Forces `byPosition` parameter structure. This is useful if you have a single\n * parameter which has a literal type.\n */\nParameterStructures.byPosition = new ParameterStructures('byPosition');\n/**\n * Forces `byName` parameter structure. This is only useful when having a single\n * parameter. The library will report errors if used with a different number of\n * parameters.\n */\nParameterStructures.byName = new ParameterStructures('byName');\n/**\n * An abstract implementation of a MessageType.\n */\nclass AbstractMessageSignature {\n    constructor(method, numberOfParams) {\n        this.method = method;\n        this.numberOfParams = numberOfParams;\n    }\n    get parameterStructures() {\n        return ParameterStructures.auto;\n    }\n}\nexports.AbstractMessageSignature = AbstractMessageSignature;\n/**\n * Classes to type request response pairs\n */\nclass RequestType0 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 0);\n    }\n}\nexports.RequestType0 = RequestType0;\nclass RequestType extends AbstractMessageSignature {\n    constructor(method, _parameterStructures = ParameterStructures.auto) {\n        super(method, 1);\n        this._parameterStructures = _parameterStructures;\n    }\n    get parameterStructures() {\n        return this._parameterStructures;\n    }\n}\nexports.RequestType = RequestType;\nclass RequestType1 extends AbstractMessageSignature {\n    constructor(method, _parameterStructures = ParameterStructures.auto) {\n        super(method, 1);\n        this._parameterStructures = _parameterStructures;\n    }\n    get parameterStructures() {\n        return this._parameterStructures;\n    }\n}\nexports.RequestType1 = RequestType1;\nclass RequestType2 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 2);\n    }\n}\nexports.RequestType2 = RequestType2;\nclass RequestType3 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 3);\n    }\n}\nexports.RequestType3 = RequestType3;\nclass RequestType4 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 4);\n    }\n}\nexports.RequestType4 = RequestType4;\nclass RequestType5 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 5);\n    }\n}\nexports.RequestType5 = RequestType5;\nclass RequestType6 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 6);\n    }\n}\nexports.RequestType6 = RequestType6;\nclass RequestType7 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 7);\n    }\n}\nexports.RequestType7 = RequestType7;\nclass RequestType8 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 8);\n    }\n}\nexports.RequestType8 = RequestType8;\nclass RequestType9 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 9);\n    }\n}\nexports.RequestType9 = RequestType9;\nclass NotificationType extends AbstractMessageSignature {\n    constructor(method, _parameterStructures = ParameterStructures.auto) {\n        super(method, 1);\n        this._parameterStructures = _parameterStructures;\n    }\n    get parameterStructures() {\n        return this._parameterStructures;\n    }\n}\nexports.NotificationType = NotificationType;\nclass NotificationType0 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 0);\n    }\n}\nexports.NotificationType0 = NotificationType0;\nclass NotificationType1 extends AbstractMessageSignature {\n    constructor(method, _parameterStructures = ParameterStructures.auto) {\n        super(method, 1);\n        this._parameterStructures = _parameterStructures;\n    }\n    get parameterStructures() {\n        return this._parameterStructures;\n    }\n}\nexports.NotificationType1 = NotificationType1;\nclass NotificationType2 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 2);\n    }\n}\nexports.NotificationType2 = NotificationType2;\nclass NotificationType3 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 3);\n    }\n}\nexports.NotificationType3 = NotificationType3;\nclass NotificationType4 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 4);\n    }\n}\nexports.NotificationType4 = NotificationType4;\nclass NotificationType5 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 5);\n    }\n}\nexports.NotificationType5 = NotificationType5;\nclass NotificationType6 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 6);\n    }\n}\nexports.NotificationType6 = NotificationType6;\nclass NotificationType7 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 7);\n    }\n}\nexports.NotificationType7 = NotificationType7;\nclass NotificationType8 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 8);\n    }\n}\nexports.NotificationType8 = NotificationType8;\nclass NotificationType9 extends AbstractMessageSignature {\n    constructor(method) {\n        super(method, 9);\n    }\n}\nexports.NotificationType9 = NotificationType9;\nvar Message;\n(function (Message) {\n    /**\n     * Tests if the given message is a request message\n     */\n    function isRequest(message) {\n        const candidate = message;\n        return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));\n    }\n    Message.isRequest = isRequest;\n    /**\n     * Tests if the given message is a notification message\n     */\n    function isNotification(message) {\n        const candidate = message;\n        return candidate && is.string(candidate.method) && message.id === void 0;\n    }\n    Message.isNotification = isNotification;\n    /**\n     * Tests if the given message is a response message\n     */\n    function isResponse(message) {\n        const candidate = message;\n        return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);\n    }\n    Message.isResponse = isResponse;\n})(Message || (exports.Message = Message = {}));\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LRUCache = exports.LinkedMap = exports.Touch = void 0;\nvar Touch;\n(function (Touch) {\n    Touch.None = 0;\n    Touch.First = 1;\n    Touch.AsOld = Touch.First;\n    Touch.Last = 2;\n    Touch.AsNew = Touch.Last;\n})(Touch || (exports.Touch = Touch = {}));\nclass LinkedMap {\n    constructor() {\n        this[_a] = 'LinkedMap';\n        this._map = new Map();\n        this._head = undefined;\n        this._tail = undefined;\n        this._size = 0;\n        this._state = 0;\n    }\n    clear() {\n        this._map.clear();\n        this._head = undefined;\n        this._tail = undefined;\n        this._size = 0;\n        this._state++;\n    }\n    isEmpty() {\n        return !this._head && !this._tail;\n    }\n    get size() {\n        return this._size;\n    }\n    get first() {\n        return this._head?.value;\n    }\n    get last() {\n        return this._tail?.value;\n    }\n    has(key) {\n        return this._map.has(key);\n    }\n    get(key, touch = Touch.None) {\n        const item = this._map.get(key);\n        if (!item) {\n            return undefined;\n        }\n        if (touch !== Touch.None) {\n            this.touch(item, touch);\n        }\n        return item.value;\n    }\n    set(key, value, touch = Touch.None) {\n        let item = this._map.get(key);\n        if (item) {\n            item.value = value;\n            if (touch !== Touch.None) {\n                this.touch(item, touch);\n            }\n        }\n        else {\n            item = { key, value, next: undefined, previous: undefined };\n            switch (touch) {\n                case Touch.None:\n                    this.addItemLast(item);\n                    break;\n                case Touch.First:\n                    this.addItemFirst(item);\n                    break;\n                case Touch.Last:\n                    this.addItemLast(item);\n                    break;\n                default:\n                    this.addItemLast(item);\n                    break;\n            }\n            this._map.set(key, item);\n            this._size++;\n        }\n        return this;\n    }\n    delete(key) {\n        return !!this.remove(key);\n    }\n    remove(key) {\n        const item = this._map.get(key);\n        if (!item) {\n            return undefined;\n        }\n        this._map.delete(key);\n        this.removeItem(item);\n        this._size--;\n        return item.value;\n    }\n    shift() {\n        if (!this._head && !this._tail) {\n            return undefined;\n        }\n        if (!this._head || !this._tail) {\n            throw new Error('Invalid list');\n        }\n        const item = this._head;\n        this._map.delete(item.key);\n        this.removeItem(item);\n        this._size--;\n        return item.value;\n    }\n    forEach(callbackfn, thisArg) {\n        const state = this._state;\n        let current = this._head;\n        while (current) {\n            if (thisArg) {\n                callbackfn.bind(thisArg)(current.value, current.key, this);\n            }\n            else {\n                callbackfn(current.value, current.key, this);\n            }\n            if (this._state !== state) {\n                throw new Error(`LinkedMap got modified during iteration.`);\n            }\n            current = current.next;\n        }\n    }\n    keys() {\n        const state = this._state;\n        let current = this._head;\n        const iterator = {\n            [Symbol.iterator]: () => {\n                return iterator;\n            },\n            next: () => {\n                if (this._state !== state) {\n                    throw new Error(`LinkedMap got modified during iteration.`);\n                }\n                if (current) {\n                    const result = { value: current.key, done: false };\n                    current = current.next;\n                    return result;\n                }\n                else {\n                    return { value: undefined, done: true };\n                }\n            }\n        };\n        return iterator;\n    }\n    values() {\n        const state = this._state;\n        let current = this._head;\n        const iterator = {\n            [Symbol.iterator]: () => {\n                return iterator;\n            },\n            next: () => {\n                if (this._state !== state) {\n                    throw new Error(`LinkedMap got modified during iteration.`);\n                }\n                if (current) {\n                    const result = { value: current.value, done: false };\n                    current = current.next;\n                    return result;\n                }\n                else {\n                    return { value: undefined, done: true };\n                }\n            }\n        };\n        return iterator;\n    }\n    entries() {\n        const state = this._state;\n        let current = this._head;\n        const iterator = {\n            [Symbol.iterator]: () => {\n                return iterator;\n            },\n            next: () => {\n                if (this._state !== state) {\n                    throw new Error(`LinkedMap got modified during iteration.`);\n                }\n                if (current) {\n                    const result = { value: [current.key, current.value], done: false };\n                    current = current.next;\n                    return result;\n                }\n                else {\n                    return { value: undefined, done: true };\n                }\n            }\n        };\n        return iterator;\n    }\n    [(_a = Symbol.toStringTag, Symbol.iterator)]() {\n        return this.entries();\n    }\n    trimOld(newSize) {\n        if (newSize >= this.size) {\n            return;\n        }\n        if (newSize === 0) {\n            this.clear();\n            return;\n        }\n        let current = this._head;\n        let currentSize = this.size;\n        while (current && currentSize > newSize) {\n            this._map.delete(current.key);\n            current = current.next;\n            currentSize--;\n        }\n        this._head = current;\n        this._size = currentSize;\n        if (current) {\n            current.previous = undefined;\n        }\n        this._state++;\n    }\n    addItemFirst(item) {\n        // First time Insert\n        if (!this._head && !this._tail) {\n            this._tail = item;\n        }\n        else if (!this._head) {\n            throw new Error('Invalid list');\n        }\n        else {\n            item.next = this._head;\n            this._head.previous = item;\n        }\n        this._head = item;\n        this._state++;\n    }\n    addItemLast(item) {\n        // First time Insert\n        if (!this._head && !this._tail) {\n            this._head = item;\n        }\n        else if (!this._tail) {\n            throw new Error('Invalid list');\n        }\n        else {\n            item.previous = this._tail;\n            this._tail.next = item;\n        }\n        this._tail = item;\n        this._state++;\n    }\n    removeItem(item) {\n        if (item === this._head && item === this._tail) {\n            this._head = undefined;\n            this._tail = undefined;\n        }\n        else if (item === this._head) {\n            // This can only happened if size === 1 which is handle\n            // by the case above.\n            if (!item.next) {\n                throw new Error('Invalid list');\n            }\n            item.next.previous = undefined;\n            this._head = item.next;\n        }\n        else if (item === this._tail) {\n            // This can only happened if size === 1 which is handle\n            // by the case above.\n            if (!item.previous) {\n                throw new Error('Invalid list');\n            }\n            item.previous.next = undefined;\n            this._tail = item.previous;\n        }\n        else {\n            const next = item.next;\n            const previous = item.previous;\n            if (!next || !previous) {\n                throw new Error('Invalid list');\n            }\n            next.previous = previous;\n            previous.next = next;\n        }\n        item.next = undefined;\n        item.previous = undefined;\n        this._state++;\n    }\n    touch(item, touch) {\n        if (!this._head || !this._tail) {\n            throw new Error('Invalid list');\n        }\n        if ((touch !== Touch.First && touch !== Touch.Last)) {\n            return;\n        }\n        if (touch === Touch.First) {\n            if (item === this._head) {\n                return;\n            }\n            const next = item.next;\n            const previous = item.previous;\n            // Unlink the item\n            if (item === this._tail) {\n                // previous must be defined since item was not head but is tail\n                // So there are more than on item in the map\n                previous.next = undefined;\n                this._tail = previous;\n            }\n            else {\n                // Both next and previous are not undefined since item was neither head nor tail.\n                next.previous = previous;\n                previous.next = next;\n            }\n            // Insert the node at head\n            item.previous = undefined;\n            item.next = this._head;\n            this._head.previous = item;\n            this._head = item;\n            this._state++;\n        }\n        else if (touch === Touch.Last) {\n            if (item === this._tail) {\n                return;\n            }\n            const next = item.next;\n            const previous = item.previous;\n            // Unlink the item.\n            if (item === this._head) {\n                // next must be defined since item was not tail but is head\n                // So there are more than on item in the map\n                next.previous = undefined;\n                this._head = next;\n            }\n            else {\n                // Both next and previous are not undefined since item was neither head nor tail.\n                next.previous = previous;\n                previous.next = next;\n            }\n            item.next = undefined;\n            item.previous = this._tail;\n            this._tail.next = item;\n            this._tail = item;\n            this._state++;\n        }\n    }\n    toJSON() {\n        const data = [];\n        this.forEach((value, key) => {\n            data.push([key, value]);\n        });\n        return data;\n    }\n    fromJSON(data) {\n        this.clear();\n        for (const [key, value] of data) {\n            this.set(key, value);\n        }\n    }\n}\nexports.LinkedMap = LinkedMap;\nclass LRUCache extends LinkedMap {\n    constructor(limit, ratio = 1) {\n        super();\n        this._limit = limit;\n        this._ratio = Math.min(Math.max(0, ratio), 1);\n    }\n    get limit() {\n        return this._limit;\n    }\n    set limit(limit) {\n        this._limit = limit;\n        this.checkTrim();\n    }\n    get ratio() {\n        return this._ratio;\n    }\n    set ratio(ratio) {\n        this._ratio = Math.min(Math.max(0, ratio), 1);\n        this.checkTrim();\n    }\n    get(key, touch = Touch.AsNew) {\n        return super.get(key, touch);\n    }\n    peek(key) {\n        return super.get(key, Touch.None);\n    }\n    set(key, value) {\n        super.set(key, value, Touch.Last);\n        this.checkTrim();\n        return this;\n    }\n    checkTrim() {\n        if (this.size > this._limit) {\n            this.trimOld(Math.round(this._limit * this._ratio));\n        }\n    }\n}\nexports.LRUCache = LRUCache;\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.Disposable = void 0;\nvar Disposable;\n(function (Disposable) {\n    function create(func) {\n        return {\n            dispose: func\n        };\n    }\n    Disposable.create = create;\n})(Disposable || (exports.Disposable = Disposable = {}));\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 });\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.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","\"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.SharedArrayReceiverStrategy = exports.SharedArraySenderStrategy = void 0;\nconst cancellation_1 = require(\"./cancellation\");\nvar CancellationState;\n(function (CancellationState) {\n    CancellationState.Continue = 0;\n    CancellationState.Cancelled = 1;\n})(CancellationState || (CancellationState = {}));\nclass SharedArraySenderStrategy {\n    constructor() {\n        this.buffers = new Map();\n    }\n    enableCancellation(request) {\n        if (request.id === null) {\n            return;\n        }\n        const buffer = new SharedArrayBuffer(4);\n        const data = new Int32Array(buffer, 0, 1);\n        data[0] = CancellationState.Continue;\n        this.buffers.set(request.id, buffer);\n        request.$cancellationData = buffer;\n    }\n    async sendCancellation(_conn, id) {\n        const buffer = this.buffers.get(id);\n        if (buffer === undefined) {\n            return;\n        }\n        const data = new Int32Array(buffer, 0, 1);\n        Atomics.store(data, 0, CancellationState.Cancelled);\n    }\n    cleanup(id) {\n        this.buffers.delete(id);\n    }\n    dispose() {\n        this.buffers.clear();\n    }\n}\nexports.SharedArraySenderStrategy = SharedArraySenderStrategy;\nclass SharedArrayBufferCancellationToken {\n    constructor(buffer) {\n        this.data = new Int32Array(buffer, 0, 1);\n    }\n    get isCancellationRequested() {\n        return Atomics.load(this.data, 0) === CancellationState.Cancelled;\n    }\n    get onCancellationRequested() {\n        throw new Error(`Cancellation over SharedArrayBuffer doesn't support cancellation events`);\n    }\n}\nclass SharedArrayBufferCancellationTokenSource {\n    constructor(buffer) {\n        this.token = new SharedArrayBufferCancellationToken(buffer);\n    }\n    cancel() {\n    }\n    dispose() {\n    }\n}\nclass SharedArrayReceiverStrategy {\n    constructor() {\n        this.kind = 'request';\n    }\n    createCancellationTokenSource(request) {\n        const buffer = request.$cancellationData;\n        if (buffer === undefined) {\n            return new cancellation_1.CancellationTokenSource();\n        }\n        return new SharedArrayBufferCancellationTokenSource(buffer);\n    }\n}\nexports.SharedArrayReceiverStrategy = SharedArrayReceiverStrategy;\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.Semaphore = void 0;\nconst ral_1 = require(\"./ral\");\nclass Semaphore {\n    constructor(capacity = 1) {\n        if (capacity <= 0) {\n            throw new Error('Capacity must be greater than 0');\n        }\n        this._capacity = capacity;\n        this._active = 0;\n        this._waiting = [];\n    }\n    lock(thunk) {\n        return new Promise((resolve, reject) => {\n            this._waiting.push({ thunk, resolve, reject });\n            this.runNext();\n        });\n    }\n    get active() {\n        return this._active;\n    }\n    runNext() {\n        if (this._waiting.length === 0 || this._active === this._capacity) {\n            return;\n        }\n        (0, ral_1.default)().timer.setImmediate(() => this.doRunNext());\n    }\n    doRunNext() {\n        if (this._waiting.length === 0 || this._active === this._capacity) {\n            return;\n        }\n        const next = this._waiting.shift();\n        this._active++;\n        if (this._active > this._capacity) {\n            throw new Error(`To many thunks active`);\n        }\n        try {\n            const result = next.thunk();\n            if (result instanceof Promise) {\n                result.then((value) => {\n                    this._active--;\n                    next.resolve(value);\n                    this.runNext();\n                }, (err) => {\n                    this._active--;\n                    next.reject(err);\n                    this.runNext();\n                });\n            }\n            else {\n                this._active--;\n                next.resolve(result);\n                this.runNext();\n            }\n        }\n        catch (err) {\n            this._active--;\n            next.reject(err);\n            this.runNext();\n        }\n    }\n}\nexports.Semaphore = Semaphore;\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.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = void 0;\nconst ral_1 = require(\"./ral\");\nconst Is = require(\"./is\");\nconst events_1 = require(\"./events\");\nconst semaphore_1 = require(\"./semaphore\");\nvar MessageReader;\n(function (MessageReader) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&\n            Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);\n    }\n    MessageReader.is = is;\n})(MessageReader || (exports.MessageReader = MessageReader = {}));\nclass AbstractMessageReader {\n    constructor() {\n        this.errorEmitter = new events_1.Emitter();\n        this.closeEmitter = new events_1.Emitter();\n        this.partialMessageEmitter = new events_1.Emitter();\n    }\n    dispose() {\n        this.errorEmitter.dispose();\n        this.closeEmitter.dispose();\n    }\n    get onError() {\n        return this.errorEmitter.event;\n    }\n    fireError(error) {\n        this.errorEmitter.fire(this.asError(error));\n    }\n    get onClose() {\n        return this.closeEmitter.event;\n    }\n    fireClose() {\n        this.closeEmitter.fire(undefined);\n    }\n    get onPartialMessage() {\n        return this.partialMessageEmitter.event;\n    }\n    firePartialMessage(info) {\n        this.partialMessageEmitter.fire(info);\n    }\n    asError(error) {\n        if (error instanceof Error) {\n            return error;\n        }\n        else {\n            return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\n        }\n    }\n}\nexports.AbstractMessageReader = AbstractMessageReader;\nvar ResolvedMessageReaderOptions;\n(function (ResolvedMessageReaderOptions) {\n    function fromOptions(options) {\n        let charset;\n        let result;\n        let contentDecoder;\n        const contentDecoders = new Map();\n        let contentTypeDecoder;\n        const contentTypeDecoders = new Map();\n        if (options === undefined || typeof options === 'string') {\n            charset = options ?? 'utf-8';\n        }\n        else {\n            charset = options.charset ?? 'utf-8';\n            if (options.contentDecoder !== undefined) {\n                contentDecoder = options.contentDecoder;\n                contentDecoders.set(contentDecoder.name, contentDecoder);\n            }\n            if (options.contentDecoders !== undefined) {\n                for (const decoder of options.contentDecoders) {\n                    contentDecoders.set(decoder.name, decoder);\n                }\n            }\n            if (options.contentTypeDecoder !== undefined) {\n                contentTypeDecoder = options.contentTypeDecoder;\n                contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);\n            }\n            if (options.contentTypeDecoders !== undefined) {\n                for (const decoder of options.contentTypeDecoders) {\n                    contentTypeDecoders.set(decoder.name, decoder);\n                }\n            }\n        }\n        if (contentTypeDecoder === undefined) {\n            contentTypeDecoder = (0, ral_1.default)().applicationJson.decoder;\n            contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);\n        }\n        return { charset, contentDecoder, contentDecoders, contentTypeDecoder, contentTypeDecoders };\n    }\n    ResolvedMessageReaderOptions.fromOptions = fromOptions;\n})(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));\nclass ReadableStreamMessageReader extends AbstractMessageReader {\n    constructor(readable, options) {\n        super();\n        this.readable = readable;\n        this.options = ResolvedMessageReaderOptions.fromOptions(options);\n        this.buffer = (0, ral_1.default)().messageBuffer.create(this.options.charset);\n        this._partialMessageTimeout = 10000;\n        this.nextMessageLength = -1;\n        this.messageToken = 0;\n        this.readSemaphore = new semaphore_1.Semaphore(1);\n    }\n    set partialMessageTimeout(timeout) {\n        this._partialMessageTimeout = timeout;\n    }\n    get partialMessageTimeout() {\n        return this._partialMessageTimeout;\n    }\n    listen(callback) {\n        this.nextMessageLength = -1;\n        this.messageToken = 0;\n        this.partialMessageTimer = undefined;\n        this.callback = callback;\n        const result = this.readable.onData((data) => {\n            this.onData(data);\n        });\n        this.readable.onError((error) => this.fireError(error));\n        this.readable.onClose(() => this.fireClose());\n        return result;\n    }\n    onData(data) {\n        try {\n            this.buffer.append(data);\n            while (true) {\n                if (this.nextMessageLength === -1) {\n                    const headers = this.buffer.tryReadHeaders(true);\n                    if (!headers) {\n                        return;\n                    }\n                    const contentLength = headers.get('content-length');\n                    if (!contentLength) {\n                        this.fireError(new Error(`Header must provide a Content-Length property.\\n${JSON.stringify(Object.fromEntries(headers))}`));\n                        return;\n                    }\n                    const length = parseInt(contentLength);\n                    if (isNaN(length)) {\n                        this.fireError(new Error(`Content-Length value must be a number. Got ${contentLength}`));\n                        return;\n                    }\n                    this.nextMessageLength = length;\n                }\n                const body = this.buffer.tryReadBody(this.nextMessageLength);\n                if (body === undefined) {\n                    /** We haven't received the full message yet. */\n                    this.setPartialMessageTimer();\n                    return;\n                }\n                this.clearPartialMessageTimer();\n                this.nextMessageLength = -1;\n                // Make sure that we convert one received message after the\n                // other. Otherwise it could happen that a decoding of a second\n                // smaller message finished before the decoding of a first larger\n                // message and then we would deliver the second message first.\n                this.readSemaphore.lock(async () => {\n                    const bytes = this.options.contentDecoder !== undefined\n                        ? await this.options.contentDecoder.decode(body)\n                        : body;\n                    const message = await this.options.contentTypeDecoder.decode(bytes, this.options);\n                    this.callback(message);\n                }).catch((error) => {\n                    this.fireError(error);\n                });\n            }\n        }\n        catch (error) {\n            this.fireError(error);\n        }\n    }\n    clearPartialMessageTimer() {\n        if (this.partialMessageTimer) {\n            this.partialMessageTimer.dispose();\n            this.partialMessageTimer = undefined;\n        }\n    }\n    setPartialMessageTimer() {\n        this.clearPartialMessageTimer();\n        if (this._partialMessageTimeout <= 0) {\n            return;\n        }\n        this.partialMessageTimer = (0, ral_1.default)().timer.setTimeout((token, timeout) => {\n            this.partialMessageTimer = undefined;\n            if (token === this.messageToken) {\n                this.firePartialMessage({ messageToken: token, waitingTime: timeout });\n                this.setPartialMessageTimer();\n            }\n        }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);\n    }\n}\nexports.ReadableStreamMessageReader = ReadableStreamMessageReader;\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.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = void 0;\nconst ral_1 = require(\"./ral\");\nconst Is = require(\"./is\");\nconst semaphore_1 = require(\"./semaphore\");\nconst events_1 = require(\"./events\");\nconst ContentLength = 'Content-Length: ';\nconst CRLF = '\\r\\n';\nvar MessageWriter;\n(function (MessageWriter) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&\n            Is.func(candidate.onError) && Is.func(candidate.write);\n    }\n    MessageWriter.is = is;\n})(MessageWriter || (exports.MessageWriter = MessageWriter = {}));\nclass AbstractMessageWriter {\n    constructor() {\n        this.errorEmitter = new events_1.Emitter();\n        this.closeEmitter = new events_1.Emitter();\n    }\n    dispose() {\n        this.errorEmitter.dispose();\n        this.closeEmitter.dispose();\n    }\n    get onError() {\n        return this.errorEmitter.event;\n    }\n    fireError(error, message, count) {\n        this.errorEmitter.fire([this.asError(error), message, count]);\n    }\n    get onClose() {\n        return this.closeEmitter.event;\n    }\n    fireClose() {\n        this.closeEmitter.fire(undefined);\n    }\n    asError(error) {\n        if (error instanceof Error) {\n            return error;\n        }\n        else {\n            return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\n        }\n    }\n}\nexports.AbstractMessageWriter = AbstractMessageWriter;\nvar ResolvedMessageWriterOptions;\n(function (ResolvedMessageWriterOptions) {\n    function fromOptions(options) {\n        if (options === undefined || typeof options === 'string') {\n            return { charset: options ?? 'utf-8', contentTypeEncoder: (0, ral_1.default)().applicationJson.encoder };\n        }\n        else {\n            return { charset: options.charset ?? 'utf-8', contentEncoder: options.contentEncoder, contentTypeEncoder: options.contentTypeEncoder ?? (0, ral_1.default)().applicationJson.encoder };\n        }\n    }\n    ResolvedMessageWriterOptions.fromOptions = fromOptions;\n})(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));\nclass WriteableStreamMessageWriter extends AbstractMessageWriter {\n    constructor(writable, options) {\n        super();\n        this.writable = writable;\n        this.options = ResolvedMessageWriterOptions.fromOptions(options);\n        this.errorCount = 0;\n        this.writeSemaphore = new semaphore_1.Semaphore(1);\n        this.writable.onError((error) => this.fireError(error));\n        this.writable.onClose(() => this.fireClose());\n    }\n    async write(msg) {\n        return this.writeSemaphore.lock(async () => {\n            const payload = this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {\n                if (this.options.contentEncoder !== undefined) {\n                    return this.options.contentEncoder.encode(buffer);\n                }\n                else {\n                    return buffer;\n                }\n            });\n            return payload.then((buffer) => {\n                const headers = [];\n                headers.push(ContentLength, buffer.byteLength.toString(), CRLF);\n                headers.push(CRLF);\n                return this.doWrite(msg, headers, buffer);\n            }, (error) => {\n                this.fireError(error);\n                throw error;\n            });\n        });\n    }\n    async doWrite(msg, headers, data) {\n        try {\n            await this.writable.write(headers.join(''), 'ascii');\n            return this.writable.write(data);\n        }\n        catch (error) {\n            this.handleError(error, msg);\n            return Promise.reject(error);\n        }\n    }\n    handleError(error, msg) {\n        this.errorCount++;\n        this.fireError(error, msg, this.errorCount);\n    }\n    end() {\n        this.writable.end();\n    }\n}\nexports.WriteableStreamMessageWriter = WriteableStreamMessageWriter;\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.AbstractMessageBuffer = void 0;\nconst CR = 13;\nconst LF = 10;\nconst CRLF = '\\r\\n';\nclass AbstractMessageBuffer {\n    constructor(encoding = 'utf-8') {\n        this._encoding = encoding;\n        this._chunks = [];\n        this._totalLength = 0;\n    }\n    get encoding() {\n        return this._encoding;\n    }\n    append(chunk) {\n        const toAppend = typeof chunk === 'string' ? this.fromString(chunk, this._encoding) : chunk;\n        this._chunks.push(toAppend);\n        this._totalLength += toAppend.byteLength;\n    }\n    tryReadHeaders(lowerCaseKeys = false) {\n        if (this._chunks.length === 0) {\n            return undefined;\n        }\n        let state = 0;\n        let chunkIndex = 0;\n        let offset = 0;\n        let chunkBytesRead = 0;\n        row: while (chunkIndex < this._chunks.length) {\n            const chunk = this._chunks[chunkIndex];\n            offset = 0;\n            column: while (offset < chunk.length) {\n                const value = chunk[offset];\n                switch (value) {\n                    case CR:\n                        switch (state) {\n                            case 0:\n                                state = 1;\n                                break;\n                            case 2:\n                                state = 3;\n                                break;\n                            default:\n                                state = 0;\n                        }\n                        break;\n                    case LF:\n                        switch (state) {\n                            case 1:\n                                state = 2;\n                                break;\n                            case 3:\n                                state = 4;\n                                offset++;\n                                break row;\n                            default:\n                                state = 0;\n                        }\n                        break;\n                    default:\n                        state = 0;\n                }\n                offset++;\n            }\n            chunkBytesRead += chunk.byteLength;\n            chunkIndex++;\n        }\n        if (state !== 4) {\n            return undefined;\n        }\n        // The buffer contains the two CRLF at the end. So we will\n        // have two empty lines after the split at the end as well.\n        const buffer = this._read(chunkBytesRead + offset);\n        const result = new Map();\n        const headers = this.toString(buffer, 'ascii').split(CRLF);\n        if (headers.length < 2) {\n            return result;\n        }\n        for (let i = 0; i < headers.length - 2; i++) {\n            const header = headers[i];\n            const index = header.indexOf(':');\n            if (index === -1) {\n                throw new Error(`Message header must separate key and value using ':'\\n${header}`);\n            }\n            const key = header.substr(0, index);\n            const value = header.substr(index + 1).trim();\n            result.set(lowerCaseKeys ? key.toLowerCase() : key, value);\n        }\n        return result;\n    }\n    tryReadBody(length) {\n        if (this._totalLength < length) {\n            return undefined;\n        }\n        return this._read(length);\n    }\n    get numberOfBytes() {\n        return this._totalLength;\n    }\n    _read(byteCount) {\n        if (byteCount === 0) {\n            return this.emptyBuffer();\n        }\n        if (byteCount > this._totalLength) {\n            throw new Error(`Cannot read so many bytes!`);\n        }\n        if (this._chunks[0].byteLength === byteCount) {\n            // super fast path, precisely first chunk must be returned\n            const chunk = this._chunks[0];\n            this._chunks.shift();\n            this._totalLength -= byteCount;\n            return this.asNative(chunk);\n        }\n        if (this._chunks[0].byteLength > byteCount) {\n            // fast path, the reading is entirely within the first chunk\n            const chunk = this._chunks[0];\n            const result = this.asNative(chunk, byteCount);\n            this._chunks[0] = chunk.slice(byteCount);\n            this._totalLength -= byteCount;\n            return result;\n        }\n        const result = this.allocNative(byteCount);\n        let resultOffset = 0;\n        let chunkIndex = 0;\n        while (byteCount > 0) {\n            const chunk = this._chunks[chunkIndex];\n            if (chunk.byteLength > byteCount) {\n                // this chunk will survive\n                const chunkPart = chunk.slice(0, byteCount);\n                result.set(chunkPart, resultOffset);\n                resultOffset += byteCount;\n                this._chunks[chunkIndex] = chunk.slice(byteCount);\n                this._totalLength -= byteCount;\n                byteCount -= byteCount;\n            }\n            else {\n                // this chunk will be entirely read\n                result.set(chunk, resultOffset);\n                resultOffset += chunk.byteLength;\n                this._chunks.shift();\n                this._totalLength -= chunk.byteLength;\n                byteCount -= chunk.byteLength;\n            }\n        }\n        return result;\n    }\n}\nexports.AbstractMessageBuffer = AbstractMessageBuffer;\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.createMessageConnection = exports.ConnectionOptions = exports.MessageStrategy = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.RequestCancellationReceiverStrategy = exports.IdCancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.TraceValues = exports.Trace = exports.NullLogger = exports.ProgressType = exports.ProgressToken = void 0;\nconst ral_1 = require(\"./ral\");\nconst Is = require(\"./is\");\nconst messages_1 = require(\"./messages\");\nconst linkedMap_1 = require(\"./linkedMap\");\nconst events_1 = require(\"./events\");\nconst cancellation_1 = require(\"./cancellation\");\nvar CancelNotification;\n(function (CancelNotification) {\n    CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');\n})(CancelNotification || (CancelNotification = {}));\nvar ProgressToken;\n(function (ProgressToken) {\n    function is(value) {\n        return typeof value === 'string' || typeof value === 'number';\n    }\n    ProgressToken.is = is;\n})(ProgressToken || (exports.ProgressToken = ProgressToken = {}));\nvar ProgressNotification;\n(function (ProgressNotification) {\n    ProgressNotification.type = new messages_1.NotificationType('$/progress');\n})(ProgressNotification || (ProgressNotification = {}));\nclass ProgressType {\n    constructor() {\n    }\n}\nexports.ProgressType = ProgressType;\nvar StarRequestHandler;\n(function (StarRequestHandler) {\n    function is(value) {\n        return Is.func(value);\n    }\n    StarRequestHandler.is = is;\n})(StarRequestHandler || (StarRequestHandler = {}));\nexports.NullLogger = Object.freeze({\n    error: () => { },\n    warn: () => { },\n    info: () => { },\n    log: () => { }\n});\nvar Trace;\n(function (Trace) {\n    Trace[Trace[\"Off\"] = 0] = \"Off\";\n    Trace[Trace[\"Messages\"] = 1] = \"Messages\";\n    Trace[Trace[\"Compact\"] = 2] = \"Compact\";\n    Trace[Trace[\"Verbose\"] = 3] = \"Verbose\";\n})(Trace || (exports.Trace = Trace = {}));\nvar TraceValues;\n(function (TraceValues) {\n    /**\n     * Turn tracing off.\n     */\n    TraceValues.Off = 'off';\n    /**\n     * Trace messages only.\n     */\n    TraceValues.Messages = 'messages';\n    /**\n     * Compact message tracing.\n     */\n    TraceValues.Compact = 'compact';\n    /**\n     * Verbose message tracing.\n     */\n    TraceValues.Verbose = 'verbose';\n})(TraceValues || (exports.TraceValues = TraceValues = {}));\n(function (Trace) {\n    function fromString(value) {\n        if (!Is.string(value)) {\n            return Trace.Off;\n        }\n        value = value.toLowerCase();\n        switch (value) {\n            case 'off':\n                return Trace.Off;\n            case 'messages':\n                return Trace.Messages;\n            case 'compact':\n                return Trace.Compact;\n            case 'verbose':\n                return Trace.Verbose;\n            default:\n                return Trace.Off;\n        }\n    }\n    Trace.fromString = fromString;\n    function toString(value) {\n        switch (value) {\n            case Trace.Off:\n                return 'off';\n            case Trace.Messages:\n                return 'messages';\n            case Trace.Compact:\n                return 'compact';\n            case Trace.Verbose:\n                return 'verbose';\n            default:\n                return 'off';\n        }\n    }\n    Trace.toString = toString;\n})(Trace || (exports.Trace = Trace = {}));\nvar TraceFormat;\n(function (TraceFormat) {\n    TraceFormat[\"Text\"] = \"text\";\n    TraceFormat[\"JSON\"] = \"json\";\n})(TraceFormat || (exports.TraceFormat = TraceFormat = {}));\n(function (TraceFormat) {\n    function fromString(value) {\n        if (!Is.string(value)) {\n            return TraceFormat.Text;\n        }\n        value = value.toLowerCase();\n        if (value === 'json') {\n            return TraceFormat.JSON;\n        }\n        else {\n            return TraceFormat.Text;\n        }\n    }\n    TraceFormat.fromString = fromString;\n})(TraceFormat || (exports.TraceFormat = TraceFormat = {}));\nvar SetTraceNotification;\n(function (SetTraceNotification) {\n    SetTraceNotification.type = new messages_1.NotificationType('$/setTrace');\n})(SetTraceNotification || (exports.SetTraceNotification = SetTraceNotification = {}));\nvar LogTraceNotification;\n(function (LogTraceNotification) {\n    LogTraceNotification.type = new messages_1.NotificationType('$/logTrace');\n})(LogTraceNotification || (exports.LogTraceNotification = LogTraceNotification = {}));\nvar ConnectionErrors;\n(function (ConnectionErrors) {\n    /**\n     * The connection is closed.\n     */\n    ConnectionErrors[ConnectionErrors[\"Closed\"] = 1] = \"Closed\";\n    /**\n     * The connection got disposed.\n     */\n    ConnectionErrors[ConnectionErrors[\"Disposed\"] = 2] = \"Disposed\";\n    /**\n     * The connection is already in listening mode.\n     */\n    ConnectionErrors[ConnectionErrors[\"AlreadyListening\"] = 3] = \"AlreadyListening\";\n})(ConnectionErrors || (exports.ConnectionErrors = ConnectionErrors = {}));\nclass ConnectionError extends Error {\n    constructor(code, message) {\n        super(message);\n        this.code = code;\n        Object.setPrototypeOf(this, ConnectionError.prototype);\n    }\n}\nexports.ConnectionError = ConnectionError;\nvar ConnectionStrategy;\n(function (ConnectionStrategy) {\n    function is(value) {\n        const candidate = value;\n        return candidate && Is.func(candidate.cancelUndispatched);\n    }\n    ConnectionStrategy.is = is;\n})(ConnectionStrategy || (exports.ConnectionStrategy = ConnectionStrategy = {}));\nvar IdCancellationReceiverStrategy;\n(function (IdCancellationReceiverStrategy) {\n    function is(value) {\n        const candidate = value;\n        return candidate && (candidate.kind === undefined || candidate.kind === 'id') && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === undefined || Is.func(candidate.dispose));\n    }\n    IdCancellationReceiverStrategy.is = is;\n})(IdCancellationReceiverStrategy || (exports.IdCancellationReceiverStrategy = IdCancellationReceiverStrategy = {}));\nvar RequestCancellationReceiverStrategy;\n(function (RequestCancellationReceiverStrategy) {\n    function is(value) {\n        const candidate = value;\n        return candidate && candidate.kind === 'request' && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === undefined || Is.func(candidate.dispose));\n    }\n    RequestCancellationReceiverStrategy.is = is;\n})(RequestCancellationReceiverStrategy || (exports.RequestCancellationReceiverStrategy = RequestCancellationReceiverStrategy = {}));\nvar CancellationReceiverStrategy;\n(function (CancellationReceiverStrategy) {\n    CancellationReceiverStrategy.Message = Object.freeze({\n        createCancellationTokenSource(_) {\n            return new cancellation_1.CancellationTokenSource();\n        }\n    });\n    function is(value) {\n        return IdCancellationReceiverStrategy.is(value) || RequestCancellationReceiverStrategy.is(value);\n    }\n    CancellationReceiverStrategy.is = is;\n})(CancellationReceiverStrategy || (exports.CancellationReceiverStrategy = CancellationReceiverStrategy = {}));\nvar CancellationSenderStrategy;\n(function (CancellationSenderStrategy) {\n    CancellationSenderStrategy.Message = Object.freeze({\n        sendCancellation(conn, id) {\n            return conn.sendNotification(CancelNotification.type, { id });\n        },\n        cleanup(_) { }\n    });\n    function is(value) {\n        const candidate = value;\n        return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);\n    }\n    CancellationSenderStrategy.is = is;\n})(CancellationSenderStrategy || (exports.CancellationSenderStrategy = CancellationSenderStrategy = {}));\nvar CancellationStrategy;\n(function (CancellationStrategy) {\n    CancellationStrategy.Message = Object.freeze({\n        receiver: CancellationReceiverStrategy.Message,\n        sender: CancellationSenderStrategy.Message\n    });\n    function is(value) {\n        const candidate = value;\n        return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);\n    }\n    CancellationStrategy.is = is;\n})(CancellationStrategy || (exports.CancellationStrategy = CancellationStrategy = {}));\nvar MessageStrategy;\n(function (MessageStrategy) {\n    function is(value) {\n        const candidate = value;\n        return candidate && Is.func(candidate.handleMessage);\n    }\n    MessageStrategy.is = is;\n})(MessageStrategy || (exports.MessageStrategy = MessageStrategy = {}));\nvar ConnectionOptions;\n(function (ConnectionOptions) {\n    function is(value) {\n        const candidate = value;\n        return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy) || MessageStrategy.is(candidate.messageStrategy));\n    }\n    ConnectionOptions.is = is;\n})(ConnectionOptions || (exports.ConnectionOptions = ConnectionOptions = {}));\nvar ConnectionState;\n(function (ConnectionState) {\n    ConnectionState[ConnectionState[\"New\"] = 1] = \"New\";\n    ConnectionState[ConnectionState[\"Listening\"] = 2] = \"Listening\";\n    ConnectionState[ConnectionState[\"Closed\"] = 3] = \"Closed\";\n    ConnectionState[ConnectionState[\"Disposed\"] = 4] = \"Disposed\";\n})(ConnectionState || (ConnectionState = {}));\nfunction createMessageConnection(messageReader, messageWriter, _logger, options) {\n    const logger = _logger !== undefined ? _logger : exports.NullLogger;\n    let sequenceNumber = 0;\n    let notificationSequenceNumber = 0;\n    let unknownResponseSequenceNumber = 0;\n    const version = '2.0';\n    let starRequestHandler = undefined;\n    const requestHandlers = new Map();\n    let starNotificationHandler = undefined;\n    const notificationHandlers = new Map();\n    const progressHandlers = new Map();\n    let timer;\n    let messageQueue = new linkedMap_1.LinkedMap();\n    let responsePromises = new Map();\n    let knownCanceledRequests = new Set();\n    let requestTokens = new Map();\n    let trace = Trace.Off;\n    let traceFormat = TraceFormat.Text;\n    let tracer;\n    let state = ConnectionState.New;\n    const errorEmitter = new events_1.Emitter();\n    const closeEmitter = new events_1.Emitter();\n    const unhandledNotificationEmitter = new events_1.Emitter();\n    const unhandledProgressEmitter = new events_1.Emitter();\n    const disposeEmitter = new events_1.Emitter();\n    const cancellationStrategy = (options && options.cancellationStrategy) ? options.cancellationStrategy : CancellationStrategy.Message;\n    function createRequestQueueKey(id) {\n        if (id === null) {\n            throw new Error(`Can't send requests with id null since the response can't be correlated.`);\n        }\n        return 'req-' + id.toString();\n    }\n    function createResponseQueueKey(id) {\n        if (id === null) {\n            return 'res-unknown-' + (++unknownResponseSequenceNumber).toString();\n        }\n        else {\n            return 'res-' + id.toString();\n        }\n    }\n    function createNotificationQueueKey() {\n        return 'not-' + (++notificationSequenceNumber).toString();\n    }\n    function addMessageToQueue(queue, message) {\n        if (messages_1.Message.isRequest(message)) {\n            queue.set(createRequestQueueKey(message.id), message);\n        }\n        else if (messages_1.Message.isResponse(message)) {\n            queue.set(createResponseQueueKey(message.id), message);\n        }\n        else {\n            queue.set(createNotificationQueueKey(), message);\n        }\n    }\n    function cancelUndispatched(_message) {\n        return undefined;\n    }\n    function isListening() {\n        return state === ConnectionState.Listening;\n    }\n    function isClosed() {\n        return state === ConnectionState.Closed;\n    }\n    function isDisposed() {\n        return state === ConnectionState.Disposed;\n    }\n    function closeHandler() {\n        if (state === ConnectionState.New || state === ConnectionState.Listening) {\n            state = ConnectionState.Closed;\n            closeEmitter.fire(undefined);\n        }\n        // If the connection is disposed don't sent close events.\n    }\n    function readErrorHandler(error) {\n        errorEmitter.fire([error, undefined, undefined]);\n    }\n    function writeErrorHandler(data) {\n        errorEmitter.fire(data);\n    }\n    messageReader.onClose(closeHandler);\n    messageReader.onError(readErrorHandler);\n    messageWriter.onClose(closeHandler);\n    messageWriter.onError(writeErrorHandler);\n    function triggerMessageQueue() {\n        if (timer || messageQueue.size === 0) {\n            return;\n        }\n        timer = (0, ral_1.default)().timer.setImmediate(() => {\n            timer = undefined;\n            processMessageQueue();\n        });\n    }\n    function handleMessage(message) {\n        if (messages_1.Message.isRequest(message)) {\n            handleRequest(message);\n        }\n        else if (messages_1.Message.isNotification(message)) {\n            handleNotification(message);\n        }\n        else if (messages_1.Message.isResponse(message)) {\n            handleResponse(message);\n        }\n        else {\n            handleInvalidMessage(message);\n        }\n    }\n    function processMessageQueue() {\n        if (messageQueue.size === 0) {\n            return;\n        }\n        const message = messageQueue.shift();\n        try {\n            const messageStrategy = options?.messageStrategy;\n            if (MessageStrategy.is(messageStrategy)) {\n                messageStrategy.handleMessage(message, handleMessage);\n            }\n            else {\n                handleMessage(message);\n            }\n        }\n        finally {\n            triggerMessageQueue();\n        }\n    }\n    const callback = (message) => {\n        try {\n            // We have received a cancellation message. Check if the message is still in the queue\n            // and cancel it if allowed to do so.\n            if (messages_1.Message.isNotification(message) && message.method === CancelNotification.type.method) {\n                const cancelId = message.params.id;\n                const key = createRequestQueueKey(cancelId);\n                const toCancel = messageQueue.get(key);\n                if (messages_1.Message.isRequest(toCancel)) {\n                    const strategy = options?.connectionStrategy;\n                    const response = (strategy && strategy.cancelUndispatched) ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);\n                    if (response && (response.error !== undefined || response.result !== undefined)) {\n                        messageQueue.delete(key);\n                        requestTokens.delete(cancelId);\n                        response.id = toCancel.id;\n                        traceSendingResponse(response, message.method, Date.now());\n                        messageWriter.write(response).catch(() => logger.error(`Sending response for canceled message failed.`));\n                        return;\n                    }\n                }\n                const cancellationToken = requestTokens.get(cancelId);\n                // The request is already running. Cancel the token\n                if (cancellationToken !== undefined) {\n                    cancellationToken.cancel();\n                    traceReceivedNotification(message);\n                    return;\n                }\n                else {\n                    // Remember the cancel but still queue the message to\n                    // clean up state in process message.\n                    knownCanceledRequests.add(cancelId);\n                }\n            }\n            addMessageToQueue(messageQueue, message);\n        }\n        finally {\n            triggerMessageQueue();\n        }\n    };\n    function handleRequest(requestMessage) {\n        if (isDisposed()) {\n            // we return here silently since we fired an event when the\n            // connection got disposed.\n            return;\n        }\n        function reply(resultOrError, method, startTime) {\n            const message = {\n                jsonrpc: version,\n                id: requestMessage.id\n            };\n            if (resultOrError instanceof messages_1.ResponseError) {\n                message.error = resultOrError.toJson();\n            }\n            else {\n                message.result = resultOrError === undefined ? null : resultOrError;\n            }\n            traceSendingResponse(message, method, startTime);\n            messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));\n        }\n        function replyError(error, method, startTime) {\n            const message = {\n                jsonrpc: version,\n                id: requestMessage.id,\n                error: error.toJson()\n            };\n            traceSendingResponse(message, method, startTime);\n            messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));\n        }\n        function replySuccess(result, method, startTime) {\n            // The JSON RPC defines that a response must either have a result or an error\n            // So we can't treat undefined as a valid response result.\n            if (result === undefined) {\n                result = null;\n            }\n            const message = {\n                jsonrpc: version,\n                id: requestMessage.id,\n                result: result\n            };\n            traceSendingResponse(message, method, startTime);\n            messageWriter.write(message).catch(() => logger.error(`Sending response failed.`));\n        }\n        traceReceivedRequest(requestMessage);\n        const element = requestHandlers.get(requestMessage.method);\n        let type;\n        let requestHandler;\n        if (element) {\n            type = element.type;\n            requestHandler = element.handler;\n        }\n        const startTime = Date.now();\n        if (requestHandler || starRequestHandler) {\n            const tokenKey = requestMessage.id ?? String(Date.now()); //\n            const cancellationSource = IdCancellationReceiverStrategy.is(cancellationStrategy.receiver)\n                ? cancellationStrategy.receiver.createCancellationTokenSource(tokenKey)\n                : cancellationStrategy.receiver.createCancellationTokenSource(requestMessage);\n            if (requestMessage.id !== null && knownCanceledRequests.has(requestMessage.id)) {\n                cancellationSource.cancel();\n            }\n            if (requestMessage.id !== null) {\n                requestTokens.set(tokenKey, cancellationSource);\n            }\n            try {\n                let handlerResult;\n                if (requestHandler) {\n                    if (requestMessage.params === undefined) {\n                        if (type !== undefined && type.numberOfParams !== 0) {\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.`), requestMessage.method, startTime);\n                            return;\n                        }\n                        handlerResult = requestHandler(cancellationSource.token);\n                    }\n                    else if (Array.isArray(requestMessage.params)) {\n                        if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byName) {\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);\n                            return;\n                        }\n                        handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);\n                    }\n                    else {\n                        if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);\n                            return;\n                        }\n                        handlerResult = requestHandler(requestMessage.params, cancellationSource.token);\n                    }\n                }\n                else if (starRequestHandler) {\n                    handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);\n                }\n                const promise = handlerResult;\n                if (!handlerResult) {\n                    requestTokens.delete(tokenKey);\n                    replySuccess(handlerResult, requestMessage.method, startTime);\n                }\n                else if (promise.then) {\n                    promise.then((resultOrError) => {\n                        requestTokens.delete(tokenKey);\n                        reply(resultOrError, requestMessage.method, startTime);\n                    }, error => {\n                        requestTokens.delete(tokenKey);\n                        if (error instanceof messages_1.ResponseError) {\n                            replyError(error, requestMessage.method, startTime);\n                        }\n                        else if (error && Is.string(error.message)) {\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\n                        }\n                        else {\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\n                        }\n                    });\n                }\n                else {\n                    requestTokens.delete(tokenKey);\n                    reply(handlerResult, requestMessage.method, startTime);\n                }\n            }\n            catch (error) {\n                requestTokens.delete(tokenKey);\n                if (error instanceof messages_1.ResponseError) {\n                    reply(error, requestMessage.method, startTime);\n                }\n                else if (error && Is.string(error.message)) {\n                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\n                }\n                else {\n                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\n                }\n            }\n        }\n        else {\n            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);\n        }\n    }\n    function handleResponse(responseMessage) {\n        if (isDisposed()) {\n            // See handle request.\n            return;\n        }\n        if (responseMessage.id === null) {\n            if (responseMessage.error) {\n                logger.error(`Received response message without id: Error is: \\n${JSON.stringify(responseMessage.error, undefined, 4)}`);\n            }\n            else {\n                logger.error(`Received response message without id. No further error information provided.`);\n            }\n        }\n        else {\n            const key = responseMessage.id;\n            const responsePromise = responsePromises.get(key);\n            traceReceivedResponse(responseMessage, responsePromise);\n            if (responsePromise !== undefined) {\n                responsePromises.delete(key);\n                try {\n                    if (responseMessage.error) {\n                        const error = responseMessage.error;\n                        responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));\n                    }\n                    else if (responseMessage.result !== undefined) {\n                        responsePromise.resolve(responseMessage.result);\n                    }\n                    else {\n                        throw new Error('Should never happen.');\n                    }\n                }\n                catch (error) {\n                    if (error.message) {\n                        logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);\n                    }\n                    else {\n                        logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);\n                    }\n                }\n            }\n        }\n    }\n    function handleNotification(message) {\n        if (isDisposed()) {\n            // See handle request.\n            return;\n        }\n        let type = undefined;\n        let notificationHandler;\n        if (message.method === CancelNotification.type.method) {\n            const cancelId = message.params.id;\n            knownCanceledRequests.delete(cancelId);\n            traceReceivedNotification(message);\n            return;\n        }\n        else {\n            const element = notificationHandlers.get(message.method);\n            if (element) {\n                notificationHandler = element.handler;\n                type = element.type;\n            }\n        }\n        if (notificationHandler || starNotificationHandler) {\n            try {\n                traceReceivedNotification(message);\n                if (notificationHandler) {\n                    if (message.params === undefined) {\n                        if (type !== undefined) {\n                            if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) {\n                                logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received none.`);\n                            }\n                        }\n                        notificationHandler();\n                    }\n                    else if (Array.isArray(message.params)) {\n                        // There are JSON-RPC libraries that send progress message as positional params although\n                        // specified as named. So convert them if this is the case.\n                        const params = message.params;\n                        if (message.method === ProgressNotification.type.method && params.length === 2 && ProgressToken.is(params[0])) {\n                            notificationHandler({ token: params[0], value: params[1] });\n                        }\n                        else {\n                            if (type !== undefined) {\n                                if (type.parameterStructures === messages_1.ParameterStructures.byName) {\n                                    logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);\n                                }\n                                if (type.numberOfParams !== message.params.length) {\n                                    logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments`);\n                                }\n                            }\n                            notificationHandler(...params);\n                        }\n                    }\n                    else {\n                        if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {\n                            logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);\n                        }\n                        notificationHandler(message.params);\n                    }\n                }\n                else if (starNotificationHandler) {\n                    starNotificationHandler(message.method, message.params);\n                }\n            }\n            catch (error) {\n                if (error.message) {\n                    logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);\n                }\n                else {\n                    logger.error(`Notification handler '${message.method}' failed unexpectedly.`);\n                }\n            }\n        }\n        else {\n            unhandledNotificationEmitter.fire(message);\n        }\n    }\n    function handleInvalidMessage(message) {\n        if (!message) {\n            logger.error('Received empty message.');\n            return;\n        }\n        logger.error(`Received message which is neither a response nor a notification message:\\n${JSON.stringify(message, null, 4)}`);\n        // Test whether we find an id to reject the promise\n        const responseMessage = message;\n        if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {\n            const key = responseMessage.id;\n            const responseHandler = responsePromises.get(key);\n            if (responseHandler) {\n                responseHandler.reject(new Error('The received response has neither a result nor an error property.'));\n            }\n        }\n    }\n    function stringifyTrace(params) {\n        if (params === undefined || params === null) {\n            return undefined;\n        }\n        switch (trace) {\n            case Trace.Verbose:\n                return JSON.stringify(params, null, 4);\n            case Trace.Compact:\n                return JSON.stringify(params);\n            default:\n                return undefined;\n        }\n    }\n    function traceSendingRequest(message) {\n        if (trace === Trace.Off || !tracer) {\n            return;\n        }\n        if (traceFormat === TraceFormat.Text) {\n            let data = undefined;\n            if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {\n                data = `Params: ${stringifyTrace(message.params)}\\n\\n`;\n            }\n            tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);\n        }\n        else {\n            logLSPMessage('send-request', message);\n        }\n    }\n    function traceSendingNotification(message) {\n        if (trace === Trace.Off || !tracer) {\n            return;\n        }\n        if (traceFormat === TraceFormat.Text) {\n            let data = undefined;\n            if (trace === Trace.Verbose || trace === Trace.Compact) {\n                if (message.params) {\n                    data = `Params: ${stringifyTrace(message.params)}\\n\\n`;\n                }\n                else {\n                    data = 'No parameters provided.\\n\\n';\n                }\n            }\n            tracer.log(`Sending notification '${message.method}'.`, data);\n        }\n        else {\n            logLSPMessage('send-notification', message);\n        }\n    }\n    function traceSendingResponse(message, method, startTime) {\n        if (trace === Trace.Off || !tracer) {\n            return;\n        }\n        if (traceFormat === TraceFormat.Text) {\n            let data = undefined;\n            if (trace === Trace.Verbose || trace === Trace.Compact) {\n                if (message.error && message.error.data) {\n                    data = `Error data: ${stringifyTrace(message.error.data)}\\n\\n`;\n                }\n                else {\n                    if (message.result) {\n                        data = `Result: ${stringifyTrace(message.result)}\\n\\n`;\n                    }\n                    else if (message.error === undefined) {\n                        data = 'No result returned.\\n\\n';\n                    }\n                }\n            }\n            tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);\n        }\n        else {\n            logLSPMessage('send-response', message);\n        }\n    }\n    function traceReceivedRequest(message) {\n        if (trace === Trace.Off || !tracer) {\n            return;\n        }\n        if (traceFormat === TraceFormat.Text) {\n            let data = undefined;\n            if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {\n                data = `Params: ${stringifyTrace(message.params)}\\n\\n`;\n            }\n            tracer.log(`Received request '${message.method} - (${message.id})'.`, data);\n        }\n        else {\n            logLSPMessage('receive-request', message);\n        }\n    }\n    function traceReceivedNotification(message) {\n        if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {\n            return;\n        }\n        if (traceFormat === TraceFormat.Text) {\n            let data = undefined;\n            if (trace === Trace.Verbose || trace === Trace.Compact) {\n                if (message.params) {\n                    data = `Params: ${stringifyTrace(message.params)}\\n\\n`;\n                }\n                else {\n                    data = 'No parameters provided.\\n\\n';\n                }\n            }\n            tracer.log(`Received notification '${message.method}'.`, data);\n        }\n        else {\n            logLSPMessage('receive-notification', message);\n        }\n    }\n    function traceReceivedResponse(message, responsePromise) {\n        if (trace === Trace.Off || !tracer) {\n            return;\n        }\n        if (traceFormat === TraceFormat.Text) {\n            let data = undefined;\n            if (trace === Trace.Verbose || trace === Trace.Compact) {\n                if (message.error && message.error.data) {\n                    data = `Error data: ${stringifyTrace(message.error.data)}\\n\\n`;\n                }\n                else {\n                    if (message.result) {\n                        data = `Result: ${stringifyTrace(message.result)}\\n\\n`;\n                    }\n                    else if (message.error === undefined) {\n                        data = 'No result returned.\\n\\n';\n                    }\n                }\n            }\n            if (responsePromise) {\n                const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';\n                tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);\n            }\n            else {\n                tracer.log(`Received response ${message.id} without active response promise.`, data);\n            }\n        }\n        else {\n            logLSPMessage('receive-response', message);\n        }\n    }\n    function logLSPMessage(type, message) {\n        if (!tracer || trace === Trace.Off) {\n            return;\n        }\n        const lspMessage = {\n            isLSPMessage: true,\n            type,\n            message,\n            timestamp: Date.now()\n        };\n        tracer.log(lspMessage);\n    }\n    function throwIfClosedOrDisposed() {\n        if (isClosed()) {\n            throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');\n        }\n        if (isDisposed()) {\n            throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');\n        }\n    }\n    function throwIfListening() {\n        if (isListening()) {\n            throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');\n        }\n    }\n    function throwIfNotListening() {\n        if (!isListening()) {\n            throw new Error('Call listen() first.');\n        }\n    }\n    function undefinedToNull(param) {\n        if (param === undefined) {\n            return null;\n        }\n        else {\n            return param;\n        }\n    }\n    function nullToUndefined(param) {\n        if (param === null) {\n            return undefined;\n        }\n        else {\n            return param;\n        }\n    }\n    function isNamedParam(param) {\n        return param !== undefined && param !== null && !Array.isArray(param) && typeof param === 'object';\n    }\n    function computeSingleParam(parameterStructures, param) {\n        switch (parameterStructures) {\n            case messages_1.ParameterStructures.auto:\n                if (isNamedParam(param)) {\n                    return nullToUndefined(param);\n                }\n                else {\n                    return [undefinedToNull(param)];\n                }\n            case messages_1.ParameterStructures.byName:\n                if (!isNamedParam(param)) {\n                    throw new Error(`Received parameters by name but param is not an object literal.`);\n                }\n                return nullToUndefined(param);\n            case messages_1.ParameterStructures.byPosition:\n                return [undefinedToNull(param)];\n            default:\n                throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);\n        }\n    }\n    function computeMessageParams(type, params) {\n        let result;\n        const numberOfParams = type.numberOfParams;\n        switch (numberOfParams) {\n            case 0:\n                result = undefined;\n                break;\n            case 1:\n                result = computeSingleParam(type.parameterStructures, params[0]);\n                break;\n            default:\n                result = [];\n                for (let i = 0; i < params.length && i < numberOfParams; i++) {\n                    result.push(undefinedToNull(params[i]));\n                }\n                if (params.length < numberOfParams) {\n                    for (let i = params.length; i < numberOfParams; i++) {\n                        result.push(null);\n                    }\n                }\n                break;\n        }\n        return result;\n    }\n    const connection = {\n        sendNotification: (type, ...args) => {\n            throwIfClosedOrDisposed();\n            let method;\n            let messageParams;\n            if (Is.string(type)) {\n                method = type;\n                const first = args[0];\n                let paramStart = 0;\n                let parameterStructures = messages_1.ParameterStructures.auto;\n                if (messages_1.ParameterStructures.is(first)) {\n                    paramStart = 1;\n                    parameterStructures = first;\n                }\n                let paramEnd = args.length;\n                const numberOfParams = paramEnd - paramStart;\n                switch (numberOfParams) {\n                    case 0:\n                        messageParams = undefined;\n                        break;\n                    case 1:\n                        messageParams = computeSingleParam(parameterStructures, args[paramStart]);\n                        break;\n                    default:\n                        if (parameterStructures === messages_1.ParameterStructures.byName) {\n                            throw new Error(`Received ${numberOfParams} parameters for 'by Name' notification parameter structure.`);\n                        }\n                        messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));\n                        break;\n                }\n            }\n            else {\n                const params = args;\n                method = type.method;\n                messageParams = computeMessageParams(type, params);\n            }\n            const notificationMessage = {\n                jsonrpc: version,\n                method: method,\n                params: messageParams\n            };\n            traceSendingNotification(notificationMessage);\n            return messageWriter.write(notificationMessage).catch((error) => {\n                logger.error(`Sending notification failed.`);\n                throw error;\n            });\n        },\n        onNotification: (type, handler) => {\n            throwIfClosedOrDisposed();\n            let method;\n            if (Is.func(type)) {\n                starNotificationHandler = type;\n            }\n            else if (handler) {\n                if (Is.string(type)) {\n                    method = type;\n                    notificationHandlers.set(type, { type: undefined, handler });\n                }\n                else {\n                    method = type.method;\n                    notificationHandlers.set(type.method, { type, handler });\n                }\n            }\n            return {\n                dispose: () => {\n                    if (method !== undefined) {\n                        notificationHandlers.delete(method);\n                    }\n                    else {\n                        starNotificationHandler = undefined;\n                    }\n                }\n            };\n        },\n        onProgress: (_type, token, handler) => {\n            if (progressHandlers.has(token)) {\n                throw new Error(`Progress handler for token ${token} already registered`);\n            }\n            progressHandlers.set(token, handler);\n            return {\n                dispose: () => {\n                    progressHandlers.delete(token);\n                }\n            };\n        },\n        sendProgress: (_type, token, value) => {\n            // This should not await but simple return to ensure that we don't have another\n            // async scheduling. Otherwise one send could overtake another send.\n            return connection.sendNotification(ProgressNotification.type, { token, value });\n        },\n        onUnhandledProgress: unhandledProgressEmitter.event,\n        sendRequest: (type, ...args) => {\n            throwIfClosedOrDisposed();\n            throwIfNotListening();\n            let method;\n            let messageParams;\n            let token = undefined;\n            if (Is.string(type)) {\n                method = type;\n                const first = args[0];\n                const last = args[args.length - 1];\n                let paramStart = 0;\n                let parameterStructures = messages_1.ParameterStructures.auto;\n                if (messages_1.ParameterStructures.is(first)) {\n                    paramStart = 1;\n                    parameterStructures = first;\n                }\n                let paramEnd = args.length;\n                if (cancellation_1.CancellationToken.is(last)) {\n                    paramEnd = paramEnd - 1;\n                    token = last;\n                }\n                const numberOfParams = paramEnd - paramStart;\n                switch (numberOfParams) {\n                    case 0:\n                        messageParams = undefined;\n                        break;\n                    case 1:\n                        messageParams = computeSingleParam(parameterStructures, args[paramStart]);\n                        break;\n                    default:\n                        if (parameterStructures === messages_1.ParameterStructures.byName) {\n                            throw new Error(`Received ${numberOfParams} parameters for 'by Name' request parameter structure.`);\n                        }\n                        messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));\n                        break;\n                }\n            }\n            else {\n                const params = args;\n                method = type.method;\n                messageParams = computeMessageParams(type, params);\n                const numberOfParams = type.numberOfParams;\n                token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;\n            }\n            const id = sequenceNumber++;\n            let disposable;\n            if (token) {\n                disposable = token.onCancellationRequested(() => {\n                    const p = cancellationStrategy.sender.sendCancellation(connection, id);\n                    if (p === undefined) {\n                        logger.log(`Received no promise from cancellation strategy when cancelling id ${id}`);\n                        return Promise.resolve();\n                    }\n                    else {\n                        return p.catch(() => {\n                            logger.log(`Sending cancellation messages for id ${id} failed`);\n                        });\n                    }\n                });\n            }\n            const requestMessage = {\n                jsonrpc: version,\n                id: id,\n                method: method,\n                params: messageParams\n            };\n            traceSendingRequest(requestMessage);\n            if (typeof cancellationStrategy.sender.enableCancellation === 'function') {\n                cancellationStrategy.sender.enableCancellation(requestMessage);\n            }\n            return new Promise(async (resolve, reject) => {\n                const resolveWithCleanup = (r) => {\n                    resolve(r);\n                    cancellationStrategy.sender.cleanup(id);\n                    disposable?.dispose();\n                };\n                const rejectWithCleanup = (r) => {\n                    reject(r);\n                    cancellationStrategy.sender.cleanup(id);\n                    disposable?.dispose();\n                };\n                const responsePromise = { method: method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup };\n                try {\n                    await messageWriter.write(requestMessage);\n                    responsePromises.set(id, responsePromise);\n                }\n                catch (error) {\n                    logger.error(`Sending request failed.`);\n                    // Writing the message failed. So we need to reject the promise.\n                    responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, error.message ? error.message : 'Unknown reason'));\n                    throw error;\n                }\n            });\n        },\n        onRequest: (type, handler) => {\n            throwIfClosedOrDisposed();\n            let method = null;\n            if (StarRequestHandler.is(type)) {\n                method = undefined;\n                starRequestHandler = type;\n            }\n            else if (Is.string(type)) {\n                method = null;\n                if (handler !== undefined) {\n                    method = type;\n                    requestHandlers.set(type, { handler: handler, type: undefined });\n                }\n            }\n            else {\n                if (handler !== undefined) {\n                    method = type.method;\n                    requestHandlers.set(type.method, { type, handler });\n                }\n            }\n            return {\n                dispose: () => {\n                    if (method === null) {\n                        return;\n                    }\n                    if (method !== undefined) {\n                        requestHandlers.delete(method);\n                    }\n                    else {\n                        starRequestHandler = undefined;\n                    }\n                }\n            };\n        },\n        hasPendingResponse: () => {\n            return responsePromises.size > 0;\n        },\n        trace: async (_value, _tracer, sendNotificationOrTraceOptions) => {\n            let _sendNotification = false;\n            let _traceFormat = TraceFormat.Text;\n            if (sendNotificationOrTraceOptions !== undefined) {\n                if (Is.boolean(sendNotificationOrTraceOptions)) {\n                    _sendNotification = sendNotificationOrTraceOptions;\n                }\n                else {\n                    _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;\n                    _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;\n                }\n            }\n            trace = _value;\n            traceFormat = _traceFormat;\n            if (trace === Trace.Off) {\n                tracer = undefined;\n            }\n            else {\n                tracer = _tracer;\n            }\n            if (_sendNotification && !isClosed() && !isDisposed()) {\n                await connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });\n            }\n        },\n        onError: errorEmitter.event,\n        onClose: closeEmitter.event,\n        onUnhandledNotification: unhandledNotificationEmitter.event,\n        onDispose: disposeEmitter.event,\n        end: () => {\n            messageWriter.end();\n        },\n        dispose: () => {\n            if (isDisposed()) {\n                return;\n            }\n            state = ConnectionState.Disposed;\n            disposeEmitter.fire(undefined);\n            const error = new messages_1.ResponseError(messages_1.ErrorCodes.PendingResponseRejected, 'Pending response rejected since connection got disposed');\n            for (const promise of responsePromises.values()) {\n                promise.reject(error);\n            }\n            responsePromises = new Map();\n            requestTokens = new Map();\n            knownCanceledRequests = new Set();\n            messageQueue = new linkedMap_1.LinkedMap();\n            // Test for backwards compatibility\n            if (Is.func(messageWriter.dispose)) {\n                messageWriter.dispose();\n            }\n            if (Is.func(messageReader.dispose)) {\n                messageReader.dispose();\n            }\n        },\n        listen: () => {\n            throwIfClosedOrDisposed();\n            throwIfListening();\n            state = ConnectionState.Listening;\n            messageReader.listen(callback);\n        },\n        inspect: () => {\n            // eslint-disable-next-line no-console\n            (0, ral_1.default)().console.log('inspect');\n        }\n    };\n    connection.onNotification(LogTraceNotification.type, (params) => {\n        if (trace === Trace.Off || !tracer) {\n            return;\n        }\n        const verbose = trace === Trace.Verbose || trace === Trace.Compact;\n        tracer.log(params.message, verbose ? params.verbose : undefined);\n    });\n    connection.onNotification(ProgressNotification.type, (params) => {\n        const handler = progressHandlers.get(params.token);\n        if (handler) {\n            handler(params.value);\n        }\n        else {\n            unhandledProgressEmitter.fire(params);\n        }\n    });\n    return connection;\n}\nexports.createMessageConnection = createMessageConnection;\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 * ------------------------------------------------------------------------------------------ */\n/// <reference path=\"../../typings/thenable.d.ts\" />\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProgressType = exports.ProgressToken = exports.createMessageConnection = exports.NullLogger = exports.ConnectionOptions = exports.ConnectionStrategy = exports.AbstractMessageBuffer = exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = exports.SharedArrayReceiverStrategy = exports.SharedArraySenderStrategy = exports.CancellationToken = exports.CancellationTokenSource = exports.Emitter = exports.Event = exports.Disposable = exports.LRUCache = exports.Touch = exports.LinkedMap = exports.ParameterStructures = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.ErrorCodes = exports.ResponseError = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType0 = exports.RequestType = exports.Message = exports.RAL = void 0;\nexports.MessageStrategy = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.TraceValues = exports.Trace = void 0;\nconst messages_1 = require(\"./messages\");\nObject.defineProperty(exports, \"Message\", { enumerable: true, get: function () { return messages_1.Message; } });\nObject.defineProperty(exports, \"RequestType\", { enumerable: true, get: function () { return messages_1.RequestType; } });\nObject.defineProperty(exports, \"RequestType0\", { enumerable: true, get: function () { return messages_1.RequestType0; } });\nObject.defineProperty(exports, \"RequestType1\", { enumerable: true, get: function () { return messages_1.RequestType1; } });\nObject.defineProperty(exports, \"RequestType2\", { enumerable: true, get: function () { return messages_1.RequestType2; } });\nObject.defineProperty(exports, \"RequestType3\", { enumerable: true, get: function () { return messages_1.RequestType3; } });\nObject.defineProperty(exports, \"RequestType4\", { enumerable: true, get: function () { return messages_1.RequestType4; } });\nObject.defineProperty(exports, \"RequestType5\", { enumerable: true, get: function () { return messages_1.RequestType5; } });\nObject.defineProperty(exports, \"RequestType6\", { enumerable: true, get: function () { return messages_1.RequestType6; } });\nObject.defineProperty(exports, \"RequestType7\", { enumerable: true, get: function () { return messages_1.RequestType7; } });\nObject.defineProperty(exports, \"RequestType8\", { enumerable: true, get: function () { return messages_1.RequestType8; } });\nObject.defineProperty(exports, \"RequestType9\", { enumerable: true, get: function () { return messages_1.RequestType9; } });\nObject.defineProperty(exports, \"ResponseError\", { enumerable: true, get: function () { return messages_1.ResponseError; } });\nObject.defineProperty(exports, \"ErrorCodes\", { enumerable: true, get: function () { return messages_1.ErrorCodes; } });\nObject.defineProperty(exports, \"NotificationType\", { enumerable: true, get: function () { return messages_1.NotificationType; } });\nObject.defineProperty(exports, \"NotificationType0\", { enumerable: true, get: function () { return messages_1.NotificationType0; } });\nObject.defineProperty(exports, \"NotificationType1\", { enumerable: true, get: function () { return messages_1.NotificationType1; } });\nObject.defineProperty(exports, \"NotificationType2\", { enumerable: true, get: function () { return messages_1.NotificationType2; } });\nObject.defineProperty(exports, \"NotificationType3\", { enumerable: true, get: function () { return messages_1.NotificationType3; } });\nObject.defineProperty(exports, \"NotificationType4\", { enumerable: true, get: function () { return messages_1.NotificationType4; } });\nObject.defineProperty(exports, \"NotificationType5\", { enumerable: true, get: function () { return messages_1.NotificationType5; } });\nObject.defineProperty(exports, \"NotificationType6\", { enumerable: true, get: function () { return messages_1.NotificationType6; } });\nObject.defineProperty(exports, \"NotificationType7\", { enumerable: true, get: function () { return messages_1.NotificationType7; } });\nObject.defineProperty(exports, \"NotificationType8\", { enumerable: true, get: function () { return messages_1.NotificationType8; } });\nObject.defineProperty(exports, \"NotificationType9\", { enumerable: true, get: function () { return messages_1.NotificationType9; } });\nObject.defineProperty(exports, \"ParameterStructures\", { enumerable: true, get: function () { return messages_1.ParameterStructures; } });\nconst linkedMap_1 = require(\"./linkedMap\");\nObject.defineProperty(exports, \"LinkedMap\", { enumerable: true, get: function () { return linkedMap_1.LinkedMap; } });\nObject.defineProperty(exports, \"LRUCache\", { enumerable: true, get: function () { return linkedMap_1.LRUCache; } });\nObject.defineProperty(exports, \"Touch\", { enumerable: true, get: function () { return linkedMap_1.Touch; } });\nconst disposable_1 = require(\"./disposable\");\nObject.defineProperty(exports, \"Disposable\", { enumerable: true, get: function () { return disposable_1.Disposable; } });\nconst events_1 = require(\"./events\");\nObject.defineProperty(exports, \"Event\", { enumerable: true, get: function () { return events_1.Event; } });\nObject.defineProperty(exports, \"Emitter\", { enumerable: true, get: function () { return events_1.Emitter; } });\nconst cancellation_1 = require(\"./cancellation\");\nObject.defineProperty(exports, \"CancellationTokenSource\", { enumerable: true, get: function () { return cancellation_1.CancellationTokenSource; } });\nObject.defineProperty(exports, \"CancellationToken\", { enumerable: true, get: function () { return cancellation_1.CancellationToken; } });\nconst sharedArrayCancellation_1 = require(\"./sharedArrayCancellation\");\nObject.defineProperty(exports, \"SharedArraySenderStrategy\", { enumerable: true, get: function () { return sharedArrayCancellation_1.SharedArraySenderStrategy; } });\nObject.defineProperty(exports, \"SharedArrayReceiverStrategy\", { enumerable: true, get: function () { return sharedArrayCancellation_1.SharedArrayReceiverStrategy; } });\nconst messageReader_1 = require(\"./messageReader\");\nObject.defineProperty(exports, \"MessageReader\", { enumerable: true, get: function () { return messageReader_1.MessageReader; } });\nObject.defineProperty(exports, \"AbstractMessageReader\", { enumerable: true, get: function () { return messageReader_1.AbstractMessageReader; } });\nObject.defineProperty(exports, \"ReadableStreamMessageReader\", { enumerable: true, get: function () { return messageReader_1.ReadableStreamMessageReader; } });\nconst messageWriter_1 = require(\"./messageWriter\");\nObject.defineProperty(exports, \"MessageWriter\", { enumerable: true, get: function () { return messageWriter_1.MessageWriter; } });\nObject.defineProperty(exports, \"AbstractMessageWriter\", { enumerable: true, get: function () { return messageWriter_1.AbstractMessageWriter; } });\nObject.defineProperty(exports, \"WriteableStreamMessageWriter\", { enumerable: true, get: function () { return messageWriter_1.WriteableStreamMessageWriter; } });\nconst messageBuffer_1 = require(\"./messageBuffer\");\nObject.defineProperty(exports, \"AbstractMessageBuffer\", { enumerable: true, get: function () { return messageBuffer_1.AbstractMessageBuffer; } });\nconst connection_1 = require(\"./connection\");\nObject.defineProperty(exports, \"ConnectionStrategy\", { enumerable: true, get: function () { return connection_1.ConnectionStrategy; } });\nObject.defineProperty(exports, \"ConnectionOptions\", { enumerable: true, get: function () { return connection_1.ConnectionOptions; } });\nObject.defineProperty(exports, \"NullLogger\", { enumerable: true, get: function () { return connection_1.NullLogger; } });\nObject.defineProperty(exports, \"createMessageConnection\", { enumerable: true, get: function () { return connection_1.createMessageConnection; } });\nObject.defineProperty(exports, \"ProgressToken\", { enumerable: true, get: function () { return connection_1.ProgressToken; } });\nObject.defineProperty(exports, \"ProgressType\", { enumerable: true, get: function () { return connection_1.ProgressType; } });\nObject.defineProperty(exports, \"Trace\", { enumerable: true, get: function () { return connection_1.Trace; } });\nObject.defineProperty(exports, \"TraceValues\", { enumerable: true, get: function () { return connection_1.TraceValues; } });\nObject.defineProperty(exports, \"TraceFormat\", { enumerable: true, get: function () { return connection_1.TraceFormat; } });\nObject.defineProperty(exports, \"SetTraceNotification\", { enumerable: true, get: function () { return connection_1.SetTraceNotification; } });\nObject.defineProperty(exports, \"LogTraceNotification\", { enumerable: true, get: function () { return connection_1.LogTraceNotification; } });\nObject.defineProperty(exports, \"ConnectionErrors\", { enumerable: true, get: function () { return connection_1.ConnectionErrors; } });\nObject.defineProperty(exports, \"ConnectionError\", { enumerable: true, get: function () { return connection_1.ConnectionError; } });\nObject.defineProperty(exports, \"CancellationReceiverStrategy\", { enumerable: true, get: function () { return connection_1.CancellationReceiverStrategy; } });\nObject.defineProperty(exports, \"CancellationSenderStrategy\", { enumerable: true, get: function () { return connection_1.CancellationSenderStrategy; } });\nObject.defineProperty(exports, \"CancellationStrategy\", { enumerable: true, get: function () { return connection_1.CancellationStrategy; } });\nObject.defineProperty(exports, \"MessageStrategy\", { enumerable: true, get: function () { return connection_1.MessageStrategy; } });\nconst ral_1 = require(\"./ral\");\nexports.RAL = ral_1.default;\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 });\nconst util_1 = require(\"util\");\nconst api_1 = require(\"../common/api\");\nclass MessageBuffer extends api_1.AbstractMessageBuffer {\n    constructor(encoding = 'utf-8') {\n        super(encoding);\n    }\n    emptyBuffer() {\n        return MessageBuffer.emptyBuffer;\n    }\n    fromString(value, encoding) {\n        return Buffer.from(value, encoding);\n    }\n    toString(value, encoding) {\n        if (value instanceof Buffer) {\n            return value.toString(encoding);\n        }\n        else {\n            return new util_1.TextDecoder(encoding).decode(value);\n        }\n    }\n    asNative(buffer, length) {\n        if (length === undefined) {\n            return buffer instanceof Buffer ? buffer : Buffer.from(buffer);\n        }\n        else {\n            return buffer instanceof Buffer ? buffer.slice(0, length) : Buffer.from(buffer, 0, length);\n        }\n    }\n    allocNative(length) {\n        return Buffer.allocUnsafe(length);\n    }\n}\nMessageBuffer.emptyBuffer = Buffer.allocUnsafe(0);\nclass ReadableStreamWrapper {\n    constructor(stream) {\n        this.stream = stream;\n    }\n    onClose(listener) {\n        this.stream.on('close', listener);\n        return api_1.Disposable.create(() => this.stream.off('close', listener));\n    }\n    onError(listener) {\n        this.stream.on('error', listener);\n        return api_1.Disposable.create(() => this.stream.off('error', listener));\n    }\n    onEnd(listener) {\n        this.stream.on('end', listener);\n        return api_1.Disposable.create(() => this.stream.off('end', listener));\n    }\n    onData(listener) {\n        this.stream.on('data', listener);\n        return api_1.Disposable.create(() => this.stream.off('data', listener));\n    }\n}\nclass WritableStreamWrapper {\n    constructor(stream) {\n        this.stream = stream;\n    }\n    onClose(listener) {\n        this.stream.on('close', listener);\n        return api_1.Disposable.create(() => this.stream.off('close', listener));\n    }\n    onError(listener) {\n        this.stream.on('error', listener);\n        return api_1.Disposable.create(() => this.stream.off('error', listener));\n    }\n    onEnd(listener) {\n        this.stream.on('end', listener);\n        return api_1.Disposable.create(() => this.stream.off('end', listener));\n    }\n    write(data, encoding) {\n        return new Promise((resolve, reject) => {\n            const callback = (error) => {\n                if (error === undefined || error === null) {\n                    resolve();\n                }\n                else {\n                    reject(error);\n                }\n            };\n            if (typeof data === 'string') {\n                this.stream.write(data, encoding, callback);\n            }\n            else {\n                this.stream.write(data, callback);\n            }\n        });\n    }\n    end() {\n        this.stream.end();\n    }\n}\nconst _ril = Object.freeze({\n    messageBuffer: Object.freeze({\n        create: (encoding) => new MessageBuffer(encoding)\n    }),\n    applicationJson: Object.freeze({\n        encoder: Object.freeze({\n            name: 'application/json',\n            encode: (msg, options) => {\n                try {\n                    return Promise.resolve(Buffer.from(JSON.stringify(msg, undefined, 0), options.charset));\n                }\n                catch (err) {\n                    return Promise.reject(err);\n                }\n            }\n        }),\n        decoder: Object.freeze({\n            name: 'application/json',\n            decode: (buffer, options) => {\n                try {\n                    if (buffer instanceof Buffer) {\n                        return Promise.resolve(JSON.parse(buffer.toString(options.charset)));\n                    }\n                    else {\n                        return Promise.resolve(JSON.parse(new util_1.TextDecoder(options.charset).decode(buffer)));\n                    }\n                }\n                catch (err) {\n                    return Promise.reject(err);\n                }\n            }\n        })\n    }),\n    stream: Object.freeze({\n        asReadableStream: (stream) => new ReadableStreamWrapper(stream),\n        asWritableStream: (stream) => new WritableStreamWrapper(stream)\n    }),\n    console: console,\n    timer: Object.freeze({\n        setTimeout(callback, ms, ...args) {\n            const handle = setTimeout(callback, ms, ...args);\n            return { dispose: () => clearTimeout(handle) };\n        },\n        setImmediate(callback, ...args) {\n            const handle = setImmediate(callback, ...args);\n            return { dispose: () => clearImmediate(handle) };\n        },\n        setInterval(callback, ms, ...args) {\n            const handle = setInterval(callback, ms, ...args);\n            return { dispose: () => clearInterval(handle) };\n        }\n    })\n});\nfunction RIL() {\n    return _ril;\n}\n(function (RIL) {\n    function install() {\n        api_1.RAL.install(_ril);\n    }\n    RIL.install = install;\n})(RIL || (RIL = {}));\nexports.default = RIL;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createMessageConnection = exports.createServerSocketTransport = exports.createClientSocketTransport = exports.createServerPipeTransport = exports.createClientPipeTransport = exports.generateRandomPipeName = exports.StreamMessageWriter = exports.StreamMessageReader = exports.SocketMessageWriter = exports.SocketMessageReader = exports.PortMessageWriter = exports.PortMessageReader = exports.IPCMessageWriter = exports.IPCMessageReader = void 0;\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 * ----------------------------------------------------------------------------------------- */\nconst ril_1 = require(\"./ril\");\n// Install the node runtime abstract.\nril_1.default.install();\nconst path = require(\"path\");\nconst os = require(\"os\");\nconst crypto_1 = require(\"crypto\");\nconst net_1 = require(\"net\");\nconst api_1 = require(\"../common/api\");\n__exportStar(require(\"../common/api\"), exports);\nclass IPCMessageReader extends api_1.AbstractMessageReader {\n    constructor(process) {\n        super();\n        this.process = process;\n        let eventEmitter = this.process;\n        eventEmitter.on('error', (error) => this.fireError(error));\n        eventEmitter.on('close', () => this.fireClose());\n    }\n    listen(callback) {\n        this.process.on('message', callback);\n        return api_1.Disposable.create(() => this.process.off('message', callback));\n    }\n}\nexports.IPCMessageReader = IPCMessageReader;\nclass IPCMessageWriter extends api_1.AbstractMessageWriter {\n    constructor(process) {\n        super();\n        this.process = process;\n        this.errorCount = 0;\n        const eventEmitter = this.process;\n        eventEmitter.on('error', (error) => this.fireError(error));\n        eventEmitter.on('close', () => this.fireClose);\n    }\n    write(msg) {\n        try {\n            if (typeof this.process.send === 'function') {\n                this.process.send(msg, undefined, undefined, (error) => {\n                    if (error) {\n                        this.errorCount++;\n                        this.handleError(error, msg);\n                    }\n                    else {\n                        this.errorCount = 0;\n                    }\n                });\n            }\n            return Promise.resolve();\n        }\n        catch (error) {\n            this.handleError(error, msg);\n            return Promise.reject(error);\n        }\n    }\n    handleError(error, msg) {\n        this.errorCount++;\n        this.fireError(error, msg, this.errorCount);\n    }\n    end() {\n    }\n}\nexports.IPCMessageWriter = IPCMessageWriter;\nclass PortMessageReader extends api_1.AbstractMessageReader {\n    constructor(port) {\n        super();\n        this.onData = new api_1.Emitter;\n        port.on('close', () => this.fireClose);\n        port.on('error', (error) => this.fireError(error));\n        port.on('message', (message) => {\n            this.onData.fire(message);\n        });\n    }\n    listen(callback) {\n        return this.onData.event(callback);\n    }\n}\nexports.PortMessageReader = PortMessageReader;\nclass PortMessageWriter extends api_1.AbstractMessageWriter {\n    constructor(port) {\n        super();\n        this.port = port;\n        this.errorCount = 0;\n        port.on('close', () => this.fireClose());\n        port.on('error', (error) => this.fireError(error));\n    }\n    write(msg) {\n        try {\n            this.port.postMessage(msg);\n            return Promise.resolve();\n        }\n        catch (error) {\n            this.handleError(error, msg);\n            return Promise.reject(error);\n        }\n    }\n    handleError(error, msg) {\n        this.errorCount++;\n        this.fireError(error, msg, this.errorCount);\n    }\n    end() {\n    }\n}\nexports.PortMessageWriter = PortMessageWriter;\nclass SocketMessageReader extends api_1.ReadableStreamMessageReader {\n    constructor(socket, encoding = 'utf-8') {\n        super((0, ril_1.default)().stream.asReadableStream(socket), encoding);\n    }\n}\nexports.SocketMessageReader = SocketMessageReader;\nclass SocketMessageWriter extends api_1.WriteableStreamMessageWriter {\n    constructor(socket, options) {\n        super((0, ril_1.default)().stream.asWritableStream(socket), options);\n        this.socket = socket;\n    }\n    dispose() {\n        super.dispose();\n        this.socket.destroy();\n    }\n}\nexports.SocketMessageWriter = SocketMessageWriter;\nclass StreamMessageReader extends api_1.ReadableStreamMessageReader {\n    constructor(readable, encoding) {\n        super((0, ril_1.default)().stream.asReadableStream(readable), encoding);\n    }\n}\nexports.StreamMessageReader = StreamMessageReader;\nclass StreamMessageWriter extends api_1.WriteableStreamMessageWriter {\n    constructor(writable, options) {\n        super((0, ril_1.default)().stream.asWritableStream(writable), options);\n    }\n}\nexports.StreamMessageWriter = StreamMessageWriter;\nconst XDG_RUNTIME_DIR = process.env['XDG_RUNTIME_DIR'];\nconst safeIpcPathLengths = new Map([\n    ['linux', 107],\n    ['darwin', 103]\n]);\nfunction generateRandomPipeName() {\n    const randomSuffix = (0, crypto_1.randomBytes)(21).toString('hex');\n    if (process.platform === 'win32') {\n        return `\\\\\\\\.\\\\pipe\\\\vscode-jsonrpc-${randomSuffix}-sock`;\n    }\n    let result;\n    if (XDG_RUNTIME_DIR) {\n        result = path.join(XDG_RUNTIME_DIR, `vscode-ipc-${randomSuffix}.sock`);\n    }\n    else {\n        result = path.join(os.tmpdir(), `vscode-${randomSuffix}.sock`);\n    }\n    const limit = safeIpcPathLengths.get(process.platform);\n    if (limit !== undefined && result.length > limit) {\n        (0, ril_1.default)().console.warn(`WARNING: IPC handle \"${result}\" is longer than ${limit} characters.`);\n    }\n    return result;\n}\nexports.generateRandomPipeName = generateRandomPipeName;\nfunction createClientPipeTransport(pipeName, encoding = 'utf-8') {\n    let connectResolve;\n    const connected = new Promise((resolve, _reject) => {\n        connectResolve = resolve;\n    });\n    return new Promise((resolve, reject) => {\n        let server = (0, net_1.createServer)((socket) => {\n            server.close();\n            connectResolve([\n                new SocketMessageReader(socket, encoding),\n                new SocketMessageWriter(socket, encoding)\n            ]);\n        });\n        server.on('error', reject);\n        server.listen(pipeName, () => {\n            server.removeListener('error', reject);\n            resolve({\n                onConnected: () => { return connected; }\n            });\n        });\n    });\n}\nexports.createClientPipeTransport = createClientPipeTransport;\nfunction createServerPipeTransport(pipeName, encoding = 'utf-8') {\n    const socket = (0, net_1.createConnection)(pipeName);\n    return [\n        new SocketMessageReader(socket, encoding),\n        new SocketMessageWriter(socket, encoding)\n    ];\n}\nexports.createServerPipeTransport = createServerPipeTransport;\nfunction createClientSocketTransport(port, encoding = 'utf-8') {\n    let connectResolve;\n    const connected = new Promise((resolve, _reject) => {\n        connectResolve = resolve;\n    });\n    return new Promise((resolve, reject) => {\n        const server = (0, net_1.createServer)((socket) => {\n            server.close();\n            connectResolve([\n                new SocketMessageReader(socket, encoding),\n                new SocketMessageWriter(socket, encoding)\n            ]);\n        });\n        server.on('error', reject);\n        server.listen(port, '127.0.0.1', () => {\n            server.removeListener('error', reject);\n            resolve({\n                onConnected: () => { return connected; }\n            });\n        });\n    });\n}\nexports.createClientSocketTransport = createClientSocketTransport;\nfunction createServerSocketTransport(port, encoding = 'utf-8') {\n    const socket = (0, net_1.createConnection)(port, '127.0.0.1');\n    return [\n        new SocketMessageReader(socket, encoding),\n        new SocketMessageWriter(socket, encoding)\n    ];\n}\nexports.createServerSocketTransport = createServerSocketTransport;\nfunction isReadableStream(value) {\n    const candidate = value;\n    return candidate.read !== undefined && candidate.addListener !== undefined;\n}\nfunction isWritableStream(value) {\n    const candidate = value;\n    return candidate.write !== undefined && candidate.addListener !== undefined;\n}\nfunction createMessageConnection(input, output, logger, options) {\n    if (!logger) {\n        logger = api_1.NullLogger;\n    }\n    const reader = isReadableStream(input) ? new StreamMessageReader(input) : input;\n    const writer = isWritableStream(output) ? new StreamMessageWriter(output) : output;\n    if (api_1.ConnectionStrategy.is(options)) {\n        options = { connectionStrategy: options };\n    }\n    return (0, api_1.createMessageConnection)(reader, writer, logger, options);\n}\nexports.createMessageConnection = createMessageConnection;\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 * ----------------------------------------------------------------------------------------- */\n'use strict';\n\nmodule.exports = require('./lib/node/main');","(function (factory) {\n    if (typeof module === \"object\" && typeof module.exports === \"object\") {\n        var v = factory(require, exports);\n        if (v !== undefined) module.exports = v;\n    }\n    else if (typeof define === \"function\" && define.amd) {\n        define([\"require\", \"exports\"], factory);\n    }\n})(function (require, exports) {\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     * ------------------------------------------------------------------------------------------ */\n    'use strict';\n    Object.defineProperty(exports, \"__esModule\", { value: true });\n    exports.TextDocument = exports.EOL = exports.WorkspaceFolder = exports.InlineCompletionContext = exports.SelectedCompletionInfo = exports.InlineCompletionTriggerKind = exports.InlineCompletionList = exports.InlineCompletionItem = exports.StringValue = exports.InlayHint = exports.InlayHintLabelPart = exports.InlayHintKind = exports.InlineValueContext = exports.InlineValueEvaluatableExpression = exports.InlineValueVariableLookup = exports.InlineValueText = exports.SemanticTokens = exports.SemanticTokenModifiers = exports.SemanticTokenTypes = exports.SelectionRange = exports.DocumentLink = exports.FormattingOptions = exports.CodeLens = exports.CodeAction = exports.CodeActionContext = exports.CodeActionTriggerKind = exports.CodeActionKind = exports.DocumentSymbol = exports.WorkspaceSymbol = exports.SymbolInformation = exports.SymbolTag = exports.SymbolKind = exports.DocumentHighlight = exports.DocumentHighlightKind = exports.SignatureInformation = exports.ParameterInformation = exports.Hover = exports.MarkedString = exports.CompletionList = exports.CompletionItem = exports.CompletionItemLabelDetails = exports.InsertTextMode = exports.InsertReplaceEdit = exports.CompletionItemTag = exports.InsertTextFormat = exports.CompletionItemKind = exports.MarkupContent = exports.MarkupKind = exports.TextDocumentItem = exports.OptionalVersionedTextDocumentIdentifier = exports.VersionedTextDocumentIdentifier = exports.TextDocumentIdentifier = exports.WorkspaceChange = exports.WorkspaceEdit = exports.DeleteFile = exports.RenameFile = exports.CreateFile = exports.TextDocumentEdit = exports.AnnotatedTextEdit = exports.ChangeAnnotationIdentifier = exports.ChangeAnnotation = exports.TextEdit = exports.Command = exports.Diagnostic = exports.CodeDescription = exports.DiagnosticTag = exports.DiagnosticSeverity = exports.DiagnosticRelatedInformation = exports.FoldingRange = exports.FoldingRangeKind = exports.ColorPresentation = exports.ColorInformation = exports.Color = exports.LocationLink = exports.Location = exports.Range = exports.Position = exports.uinteger = exports.integer = exports.URI = exports.DocumentUri = void 0;\n    var DocumentUri;\n    (function (DocumentUri) {\n        function is(value) {\n            return typeof value === 'string';\n        }\n        DocumentUri.is = is;\n    })(DocumentUri || (exports.DocumentUri = DocumentUri = {}));\n    var URI;\n    (function (URI) {\n        function is(value) {\n            return typeof value === 'string';\n        }\n        URI.is = is;\n    })(URI || (exports.URI = URI = {}));\n    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 || (exports.integer = integer = {}));\n    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 || (exports.uinteger = uinteger = {}));\n    /**\n     * The Position namespace provides helper functions to work with\n     * {@link Position} literals.\n     */\n    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: line, character: 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            var candidate = value;\n            return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n        }\n        Position.is = is;\n    })(Position || (exports.Position = Position = {}));\n    /**\n     * The Range namespace provides helper functions to work with\n     * {@link Range} literals.\n     */\n    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[\".concat(one, \", \").concat(two, \", \").concat(three, \", \").concat(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            var candidate = value;\n            return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n        }\n        Range.is = is;\n    })(Range || (exports.Range = Range = {}));\n    /**\n     * The Location namespace provides helper functions to work with\n     * {@link Location} literals.\n     */\n    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: uri, range: 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            var 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 || (exports.Location = Location = {}));\n    /**\n     * The LocationLink namespace provides helper functions to work with\n     * {@link LocationLink} literals.\n     */\n    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: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: 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            var 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 || (exports.LocationLink = LocationLink = {}));\n    /**\n     * The Color namespace provides helper functions to work with\n     * {@link Color} literals.\n     */\n    var Color;\n    (function (Color) {\n        /**\n         * Creates a new Color literal.\n         */\n        function create(red, green, blue, alpha) {\n            return {\n                red: red,\n                green: green,\n                blue: blue,\n                alpha: 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            var 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 || (exports.Color = Color = {}));\n    /**\n     * The ColorInformation namespace provides helper functions to work with\n     * {@link ColorInformation} literals.\n     */\n    var ColorInformation;\n    (function (ColorInformation) {\n        /**\n         * Creates a new ColorInformation literal.\n         */\n        function create(range, color) {\n            return {\n                range: range,\n                color: 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            var candidate = value;\n            return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n        }\n        ColorInformation.is = is;\n    })(ColorInformation || (exports.ColorInformation = ColorInformation = {}));\n    /**\n     * The Color namespace provides helper functions to work with\n     * {@link ColorPresentation} literals.\n     */\n    var ColorPresentation;\n    (function (ColorPresentation) {\n        /**\n         * Creates a new ColorInformation literal.\n         */\n        function create(label, textEdit, additionalTextEdits) {\n            return {\n                label: label,\n                textEdit: textEdit,\n                additionalTextEdits: 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            var 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 || (exports.ColorPresentation = ColorPresentation = {}));\n    /**\n     * A set of predefined range kinds.\n     */\n    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 || (exports.FoldingRangeKind = FoldingRangeKind = {}));\n    /**\n     * The folding range namespace provides helper functions to work with\n     * {@link FoldingRange} literals.\n     */\n    var FoldingRange;\n    (function (FoldingRange) {\n        /**\n         * Creates a new FoldingRange literal.\n         */\n        function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n            var result = {\n                startLine: startLine,\n                endLine: 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            var 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 || (exports.FoldingRange = FoldingRange = {}));\n    /**\n     * The DiagnosticRelatedInformation namespace provides helper functions to work with\n     * {@link DiagnosticRelatedInformation} literals.\n     */\n    var DiagnosticRelatedInformation;\n    (function (DiagnosticRelatedInformation) {\n        /**\n         * Creates a new DiagnosticRelatedInformation literal.\n         */\n        function create(location, message) {\n            return {\n                location: location,\n                message: 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            var candidate = value;\n            return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n        }\n        DiagnosticRelatedInformation.is = is;\n    })(DiagnosticRelatedInformation || (exports.DiagnosticRelatedInformation = DiagnosticRelatedInformation = {}));\n    /**\n     * The diagnostic's severity.\n     */\n    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 || (exports.DiagnosticSeverity = DiagnosticSeverity = {}));\n    /**\n     * The diagnostic tags.\n     *\n     * @since 3.15.0\n     */\n    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 || (exports.DiagnosticTag = DiagnosticTag = {}));\n    /**\n     * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n     *\n     * @since 3.16.0\n     */\n    var CodeDescription;\n    (function (CodeDescription) {\n        function is(value) {\n            var candidate = value;\n            return Is.objectLiteral(candidate) && Is.string(candidate.href);\n        }\n        CodeDescription.is = is;\n    })(CodeDescription || (exports.CodeDescription = CodeDescription = {}));\n    /**\n     * The Diagnostic namespace provides helper functions to work with\n     * {@link Diagnostic} literals.\n     */\n    var Diagnostic;\n    (function (Diagnostic) {\n        /**\n         * Creates a new Diagnostic literal.\n         */\n        function create(range, message, severity, code, source, relatedInformation) {\n            var result = { range: range, message: 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            var 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 || (exports.Diagnostic = Diagnostic = {}));\n    /**\n     * The Command namespace provides helper functions to work with\n     * {@link Command} literals.\n     */\n    var Command;\n    (function (Command) {\n        /**\n         * Creates a new Command literal.\n         */\n        function create(title, command) {\n            var args = [];\n            for (var _i = 2; _i < arguments.length; _i++) {\n                args[_i - 2] = arguments[_i];\n            }\n            var result = { title: title, command: 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            var candidate = value;\n            return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n        }\n        Command.is = is;\n    })(Command || (exports.Command = Command = {}));\n    /**\n     * The TextEdit namespace provides helper function to create replace,\n     * insert and delete edits more easily.\n     */\n    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: range, newText: 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: 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: range, newText: '' };\n        }\n        TextEdit.del = del;\n        function is(value) {\n            var candidate = value;\n            return Is.objectLiteral(candidate)\n                && Is.string(candidate.newText)\n                && Range.is(candidate.range);\n        }\n        TextEdit.is = is;\n    })(TextEdit || (exports.TextEdit = TextEdit = {}));\n    var ChangeAnnotation;\n    (function (ChangeAnnotation) {\n        function create(label, needsConfirmation, description) {\n            var result = { label: 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            var 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 || (exports.ChangeAnnotation = ChangeAnnotation = {}));\n    var ChangeAnnotationIdentifier;\n    (function (ChangeAnnotationIdentifier) {\n        function is(value) {\n            var candidate = value;\n            return Is.string(candidate);\n        }\n        ChangeAnnotationIdentifier.is = is;\n    })(ChangeAnnotationIdentifier || (exports.ChangeAnnotationIdentifier = ChangeAnnotationIdentifier = {}));\n    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: range, newText: 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: 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: range, newText: '', annotationId: annotation };\n        }\n        AnnotatedTextEdit.del = del;\n        function is(value) {\n            var candidate = value;\n            return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n        }\n        AnnotatedTextEdit.is = is;\n    })(AnnotatedTextEdit || (exports.AnnotatedTextEdit = AnnotatedTextEdit = {}));\n    /**\n     * The TextDocumentEdit namespace provides helper function to create\n     * an edit that manipulates a text document.\n     */\n    var TextDocumentEdit;\n    (function (TextDocumentEdit) {\n        /**\n         * Creates a new `TextDocumentEdit`\n         */\n        function create(textDocument, edits) {\n            return { textDocument: textDocument, edits: edits };\n        }\n        TextDocumentEdit.create = create;\n        function is(value) {\n            var candidate = value;\n            return Is.defined(candidate)\n                && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n                && Array.isArray(candidate.edits);\n        }\n        TextDocumentEdit.is = is;\n    })(TextDocumentEdit || (exports.TextDocumentEdit = TextDocumentEdit = {}));\n    var CreateFile;\n    (function (CreateFile) {\n        function create(uri, options, annotation) {\n            var result = {\n                kind: 'create',\n                uri: 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            var 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 || (exports.CreateFile = CreateFile = {}));\n    var RenameFile;\n    (function (RenameFile) {\n        function create(oldUri, newUri, options, annotation) {\n            var result = {\n                kind: 'rename',\n                oldUri: oldUri,\n                newUri: 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            var 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 || (exports.RenameFile = RenameFile = {}));\n    var DeleteFile;\n    (function (DeleteFile) {\n        function create(uri, options, annotation) {\n            var result = {\n                kind: 'delete',\n                uri: 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            var 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 || (exports.DeleteFile = DeleteFile = {}));\n    var WorkspaceEdit;\n    (function (WorkspaceEdit) {\n        function is(value) {\n            var candidate = value;\n            return candidate &&\n                (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n                (candidate.documentChanges === undefined || candidate.documentChanges.every(function (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 || (exports.WorkspaceEdit = WorkspaceEdit = {}));\n    var TextEditChangeImpl = /** @class */ (function () {\n        function TextEditChangeImpl(edits, changeAnnotations) {\n            this.edits = edits;\n            this.changeAnnotations = changeAnnotations;\n        }\n        TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {\n            var edit;\n            var 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        TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {\n            var edit;\n            var 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        TextEditChangeImpl.prototype.delete = function (range, annotation) {\n            var edit;\n            var 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        TextEditChangeImpl.prototype.add = function (edit) {\n            this.edits.push(edit);\n        };\n        TextEditChangeImpl.prototype.all = function () {\n            return this.edits;\n        };\n        TextEditChangeImpl.prototype.clear = function () {\n            this.edits.splice(0, this.edits.length);\n        };\n        TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {\n            if (value === undefined) {\n                throw new Error(\"Text edit change is not configured to manage change annotations.\");\n            }\n        };\n        return TextEditChangeImpl;\n    }());\n    /**\n     * A helper class\n     */\n    var ChangeAnnotations = /** @class */ (function () {\n        function ChangeAnnotations(annotations) {\n            this._annotations = annotations === undefined ? Object.create(null) : annotations;\n            this._counter = 0;\n            this._size = 0;\n        }\n        ChangeAnnotations.prototype.all = function () {\n            return this._annotations;\n        };\n        Object.defineProperty(ChangeAnnotations.prototype, \"size\", {\n            get: function () {\n                return this._size;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {\n            var 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 \".concat(id, \" is already in use.\"));\n            }\n            if (annotation === undefined) {\n                throw new Error(\"No annotation provided for id \".concat(id));\n            }\n            this._annotations[id] = annotation;\n            this._size++;\n            return id;\n        };\n        ChangeAnnotations.prototype.nextId = function () {\n            this._counter++;\n            return this._counter.toString();\n        };\n        return ChangeAnnotations;\n    }());\n    /**\n     * A workspace change helps constructing changes to a workspace.\n     */\n    var WorkspaceChange = /** @class */ (function () {\n        function WorkspaceChange(workspaceEdit) {\n            var _this = this;\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(function (change) {\n                        if (TextDocumentEdit.is(change)) {\n                            var 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(function (key) {\n                        var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n                        _this._textEditChanges[key] = textEditChange;\n                    });\n                }\n            }\n            else {\n                this._workspaceEdit = {};\n            }\n        }\n        Object.defineProperty(WorkspaceChange.prototype, \"edit\", {\n            /**\n             * Returns the underlying {@link WorkspaceEdit} literal\n             * use to be returned from a workspace edit operation like rename.\n             */\n            get: function () {\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            enumerable: false,\n            configurable: true\n        });\n        WorkspaceChange.prototype.getTextEditChange = function (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                var textDocument = { uri: key.uri, version: key.version };\n                var result = this._textEditChanges[textDocument.uri];\n                if (!result) {\n                    var edits = [];\n                    var textDocumentEdit = {\n                        textDocument: textDocument,\n                        edits: 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                var result = this._textEditChanges[key];\n                if (!result) {\n                    var edits = [];\n                    this._workspaceEdit.changes[key] = edits;\n                    result = new TextEditChangeImpl(edits);\n                    this._textEditChanges[key] = result;\n                }\n                return result;\n            }\n        };\n        WorkspaceChange.prototype.initDocumentChanges = function () {\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        WorkspaceChange.prototype.initChanges = function () {\n            if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n                this._workspaceEdit.changes = Object.create(null);\n            }\n        };\n        WorkspaceChange.prototype.createFile = function (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            var annotation;\n            if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n                annotation = optionsOrAnnotation;\n            }\n            else {\n                options = optionsOrAnnotation;\n            }\n            var operation;\n            var 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        WorkspaceChange.prototype.renameFile = function (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            var annotation;\n            if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n                annotation = optionsOrAnnotation;\n            }\n            else {\n                options = optionsOrAnnotation;\n            }\n            var operation;\n            var 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        WorkspaceChange.prototype.deleteFile = function (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            var annotation;\n            if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n                annotation = optionsOrAnnotation;\n            }\n            else {\n                options = optionsOrAnnotation;\n            }\n            var operation;\n            var 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        return WorkspaceChange;\n    }());\n    exports.WorkspaceChange = WorkspaceChange;\n    /**\n     * The TextDocumentIdentifier namespace provides helper functions to work with\n     * {@link TextDocumentIdentifier} literals.\n     */\n    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: 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            var candidate = value;\n            return Is.defined(candidate) && Is.string(candidate.uri);\n        }\n        TextDocumentIdentifier.is = is;\n    })(TextDocumentIdentifier || (exports.TextDocumentIdentifier = TextDocumentIdentifier = {}));\n    /**\n     * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n     * {@link VersionedTextDocumentIdentifier} literals.\n     */\n    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: uri, version: 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            var candidate = value;\n            return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n        }\n        VersionedTextDocumentIdentifier.is = is;\n    })(VersionedTextDocumentIdentifier || (exports.VersionedTextDocumentIdentifier = VersionedTextDocumentIdentifier = {}));\n    /**\n     * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n     * {@link OptionalVersionedTextDocumentIdentifier} literals.\n     */\n    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: uri, version: 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            var 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 || (exports.OptionalVersionedTextDocumentIdentifier = OptionalVersionedTextDocumentIdentifier = {}));\n    /**\n     * The TextDocumentItem namespace provides helper functions to work with\n     * {@link TextDocumentItem} literals.\n     */\n    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: uri, languageId: languageId, version: version, text: 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            var 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 || (exports.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     */\n    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            var candidate = value;\n            return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n        }\n        MarkupKind.is = is;\n    })(MarkupKind || (exports.MarkupKind = MarkupKind = {}));\n    var MarkupContent;\n    (function (MarkupContent) {\n        /**\n         * Checks whether the given value conforms to the {@link MarkupContent} interface.\n         */\n        function is(value) {\n            var candidate = value;\n            return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n        }\n        MarkupContent.is = is;\n    })(MarkupContent || (exports.MarkupContent = MarkupContent = {}));\n    /**\n     * The kind of a completion entry.\n     */\n    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 || (exports.CompletionItemKind = CompletionItemKind = {}));\n    /**\n     * Defines whether the insert text in a completion item should be interpreted as\n     * plain text or a snippet.\n     */\n    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 || (exports.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     */\n    var CompletionItemTag;\n    (function (CompletionItemTag) {\n        /**\n         * Render a completion as obsolete, usually using a strike-out.\n         */\n        CompletionItemTag.Deprecated = 1;\n    })(CompletionItemTag || (exports.CompletionItemTag = CompletionItemTag = {}));\n    /**\n     * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n     *\n     * @since 3.16.0\n     */\n    var InsertReplaceEdit;\n    (function (InsertReplaceEdit) {\n        /**\n         * Creates a new insert / replace edit\n         */\n        function create(newText, insert, replace) {\n            return { newText: newText, insert: insert, replace: 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            var candidate = value;\n            return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n        }\n        InsertReplaceEdit.is = is;\n    })(InsertReplaceEdit || (exports.InsertReplaceEdit = InsertReplaceEdit = {}));\n    /**\n     * How whitespace and indentation is handled during completion\n     * item insertion.\n     *\n     * @since 3.16.0\n     */\n    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 || (exports.InsertTextMode = InsertTextMode = {}));\n    var CompletionItemLabelDetails;\n    (function (CompletionItemLabelDetails) {\n        function is(value) {\n            var 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 || (exports.CompletionItemLabelDetails = CompletionItemLabelDetails = {}));\n    /**\n     * The CompletionItem namespace provides functions to deal with\n     * completion items.\n     */\n    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: label };\n        }\n        CompletionItem.create = create;\n    })(CompletionItem || (exports.CompletionItem = CompletionItem = {}));\n    /**\n     * The CompletionList namespace provides functions to deal with\n     * completion lists.\n     */\n    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 || (exports.CompletionList = CompletionList = {}));\n    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            var 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 || (exports.MarkedString = MarkedString = {}));\n    var Hover;\n    (function (Hover) {\n        /**\n         * Checks whether the given value conforms to the {@link Hover} interface.\n         */\n        function is(value) {\n            var 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 || (exports.Hover = Hover = {}));\n    /**\n     * The ParameterInformation namespace provides helper functions to work with\n     * {@link ParameterInformation} literals.\n     */\n    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: label, documentation: documentation } : { label: label };\n        }\n        ParameterInformation.create = create;\n    })(ParameterInformation || (exports.ParameterInformation = ParameterInformation = {}));\n    /**\n     * The SignatureInformation namespace provides helper functions to work with\n     * {@link SignatureInformation} literals.\n     */\n    var SignatureInformation;\n    (function (SignatureInformation) {\n        function create(label, documentation) {\n            var parameters = [];\n            for (var _i = 2; _i < arguments.length; _i++) {\n                parameters[_i - 2] = arguments[_i];\n            }\n            var result = { label: 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 || (exports.SignatureInformation = SignatureInformation = {}));\n    /**\n     * A document highlight kind.\n     */\n    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 || (exports.DocumentHighlightKind = DocumentHighlightKind = {}));\n    /**\n     * DocumentHighlight namespace to provide helper functions to work with\n     * {@link DocumentHighlight} literals.\n     */\n    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            var result = { range: range };\n            if (Is.number(kind)) {\n                result.kind = kind;\n            }\n            return result;\n        }\n        DocumentHighlight.create = create;\n    })(DocumentHighlight || (exports.DocumentHighlight = DocumentHighlight = {}));\n    /**\n     * A symbol kind.\n     */\n    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 || (exports.SymbolKind = SymbolKind = {}));\n    /**\n     * Symbol tags are extra annotations that tweak the rendering of a symbol.\n     *\n     * @since 3.16\n     */\n    var SymbolTag;\n    (function (SymbolTag) {\n        /**\n         * Render a symbol as obsolete, usually using a strike-out.\n         */\n        SymbolTag.Deprecated = 1;\n    })(SymbolTag || (exports.SymbolTag = SymbolTag = {}));\n    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            var result = {\n                name: name,\n                kind: kind,\n                location: { uri: uri, range: range }\n            };\n            if (containerName) {\n                result.containerName = containerName;\n            }\n            return result;\n        }\n        SymbolInformation.create = create;\n    })(SymbolInformation || (exports.SymbolInformation = SymbolInformation = {}));\n    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: name, kind: kind, location: { uri: uri, range: range } }\n                : { name: name, kind: kind, location: { uri: uri } };\n        }\n        WorkspaceSymbol.create = create;\n    })(WorkspaceSymbol || (exports.WorkspaceSymbol = WorkspaceSymbol = {}));\n    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            var result = {\n                name: name,\n                detail: detail,\n                kind: kind,\n                range: range,\n                selectionRange: 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            var 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 || (exports.DocumentSymbol = DocumentSymbol = {}));\n    /**\n     * A set of predefined code action kinds\n     */\n    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 || (exports.CodeActionKind = CodeActionKind = {}));\n    /**\n     * The reason why code actions were requested.\n     *\n     * @since 3.17.0\n     */\n    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 || (exports.CodeActionTriggerKind = CodeActionTriggerKind = {}));\n    /**\n     * The CodeActionContext namespace provides helper functions to work with\n     * {@link CodeActionContext} literals.\n     */\n    var CodeActionContext;\n    (function (CodeActionContext) {\n        /**\n         * Creates a new CodeActionContext literal.\n         */\n        function create(diagnostics, only, triggerKind) {\n            var result = { diagnostics: 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            var 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 || (exports.CodeActionContext = CodeActionContext = {}));\n    var CodeAction;\n    (function (CodeAction) {\n        function create(title, kindOrCommandOrEdit, kind) {\n            var result = { title: title };\n            var 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            var 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 || (exports.CodeAction = CodeAction = {}));\n    /**\n     * The CodeLens namespace provides helper functions to work with\n     * {@link CodeLens} literals.\n     */\n    var CodeLens;\n    (function (CodeLens) {\n        /**\n         * Creates a new CodeLens literal.\n         */\n        function create(range, data) {\n            var result = { range: 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            var 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 || (exports.CodeLens = CodeLens = {}));\n    /**\n     * The FormattingOptions namespace provides helper functions to work with\n     * {@link FormattingOptions} literals.\n     */\n    var FormattingOptions;\n    (function (FormattingOptions) {\n        /**\n         * Creates a new FormattingOptions literal.\n         */\n        function create(tabSize, insertSpaces) {\n            return { tabSize: tabSize, insertSpaces: 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            var candidate = value;\n            return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n        }\n        FormattingOptions.is = is;\n    })(FormattingOptions || (exports.FormattingOptions = FormattingOptions = {}));\n    /**\n     * The DocumentLink namespace provides helper functions to work with\n     * {@link DocumentLink} literals.\n     */\n    var DocumentLink;\n    (function (DocumentLink) {\n        /**\n         * Creates a new DocumentLink literal.\n         */\n        function create(range, target, data) {\n            return { range: range, target: target, data: 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            var 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 || (exports.DocumentLink = DocumentLink = {}));\n    /**\n     * The SelectionRange namespace provides helper function to work with\n     * SelectionRange literals.\n     */\n    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: range, parent: parent };\n        }\n        SelectionRange.create = create;\n        function is(value) {\n            var 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 || (exports.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     */\n    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 || (exports.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     */\n    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 || (exports.SemanticTokenModifiers = SemanticTokenModifiers = {}));\n    /**\n     * @since 3.16.0\n     */\n    var SemanticTokens;\n    (function (SemanticTokens) {\n        function is(value) {\n            var 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 || (exports.SemanticTokens = SemanticTokens = {}));\n    /**\n     * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n     *\n     * @since 3.17.0\n     */\n    var InlineValueText;\n    (function (InlineValueText) {\n        /**\n         * Creates a new InlineValueText literal.\n         */\n        function create(range, text) {\n            return { range: range, text: text };\n        }\n        InlineValueText.create = create;\n        function is(value) {\n            var candidate = value;\n            return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n        }\n        InlineValueText.is = is;\n    })(InlineValueText || (exports.InlineValueText = InlineValueText = {}));\n    /**\n     * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n     *\n     * @since 3.17.0\n     */\n    var InlineValueVariableLookup;\n    (function (InlineValueVariableLookup) {\n        /**\n         * Creates a new InlineValueText literal.\n         */\n        function create(range, variableName, caseSensitiveLookup) {\n            return { range: range, variableName: variableName, caseSensitiveLookup: caseSensitiveLookup };\n        }\n        InlineValueVariableLookup.create = create;\n        function is(value) {\n            var 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 || (exports.InlineValueVariableLookup = InlineValueVariableLookup = {}));\n    /**\n     * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n     *\n     * @since 3.17.0\n     */\n    var InlineValueEvaluatableExpression;\n    (function (InlineValueEvaluatableExpression) {\n        /**\n         * Creates a new InlineValueEvaluatableExpression literal.\n         */\n        function create(range, expression) {\n            return { range: range, expression: expression };\n        }\n        InlineValueEvaluatableExpression.create = create;\n        function is(value) {\n            var 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 || (exports.InlineValueEvaluatableExpression = InlineValueEvaluatableExpression = {}));\n    /**\n     * The InlineValueContext namespace provides helper functions to work with\n     * {@link InlineValueContext} literals.\n     *\n     * @since 3.17.0\n     */\n    var InlineValueContext;\n    (function (InlineValueContext) {\n        /**\n         * Creates a new InlineValueContext literal.\n         */\n        function create(frameId, stoppedLocation) {\n            return { frameId: frameId, stoppedLocation: 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            var candidate = value;\n            return Is.defined(candidate) && Range.is(value.stoppedLocation);\n        }\n        InlineValueContext.is = is;\n    })(InlineValueContext || (exports.InlineValueContext = InlineValueContext = {}));\n    /**\n     * Inlay hint kinds.\n     *\n     * @since 3.17.0\n     */\n    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 || (exports.InlayHintKind = InlayHintKind = {}));\n    var InlayHintLabelPart;\n    (function (InlayHintLabelPart) {\n        function create(value) {\n            return { value: value };\n        }\n        InlayHintLabelPart.create = create;\n        function is(value) {\n            var 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 || (exports.InlayHintLabelPart = InlayHintLabelPart = {}));\n    var InlayHint;\n    (function (InlayHint) {\n        function create(position, label, kind) {\n            var result = { position: position, label: label };\n            if (kind !== undefined) {\n                result.kind = kind;\n            }\n            return result;\n        }\n        InlayHint.create = create;\n        function is(value) {\n            var 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 || (exports.InlayHint = InlayHint = {}));\n    var StringValue;\n    (function (StringValue) {\n        function createSnippet(value) {\n            return { kind: 'snippet', value: value };\n        }\n        StringValue.createSnippet = createSnippet;\n    })(StringValue || (exports.StringValue = StringValue = {}));\n    var InlineCompletionItem;\n    (function (InlineCompletionItem) {\n        function create(insertText, filterText, range, command) {\n            return { insertText: insertText, filterText: filterText, range: range, command: command };\n        }\n        InlineCompletionItem.create = create;\n    })(InlineCompletionItem || (exports.InlineCompletionItem = InlineCompletionItem = {}));\n    var InlineCompletionList;\n    (function (InlineCompletionList) {\n        function create(items) {\n            return { items: items };\n        }\n        InlineCompletionList.create = create;\n    })(InlineCompletionList || (exports.InlineCompletionList = InlineCompletionList = {}));\n    /**\n     * Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered.\n     *\n     * @since 3.18.0\n     * @proposed\n     */\n    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 || (exports.InlineCompletionTriggerKind = InlineCompletionTriggerKind = {}));\n    var SelectedCompletionInfo;\n    (function (SelectedCompletionInfo) {\n        function create(range, text) {\n            return { range: range, text: text };\n        }\n        SelectedCompletionInfo.create = create;\n    })(SelectedCompletionInfo || (exports.SelectedCompletionInfo = SelectedCompletionInfo = {}));\n    var InlineCompletionContext;\n    (function (InlineCompletionContext) {\n        function create(triggerKind, selectedCompletionInfo) {\n            return { triggerKind: triggerKind, selectedCompletionInfo: selectedCompletionInfo };\n        }\n        InlineCompletionContext.create = create;\n    })(InlineCompletionContext || (exports.InlineCompletionContext = InlineCompletionContext = {}));\n    var WorkspaceFolder;\n    (function (WorkspaceFolder) {\n        function is(value) {\n            var candidate = value;\n            return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n        }\n        WorkspaceFolder.is = is;\n    })(WorkspaceFolder || (exports.WorkspaceFolder = WorkspaceFolder = {}));\n    exports.EOL = ['\\n', '\\r\\n', '\\r'];\n    /**\n     * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n     */\n    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            var 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            var text = document.getText();\n            var sortedEdits = mergeSort(edits, function (a, b) {\n                var 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            var lastModifiedOffset = text.length;\n            for (var i = sortedEdits.length - 1; i >= 0; i--) {\n                var e = sortedEdits[i];\n                var startOffset = document.offsetAt(e.range.start);\n                var 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            var p = (data.length / 2) | 0;\n            var left = data.slice(0, p);\n            var right = data.slice(p);\n            mergeSort(left, compare);\n            mergeSort(right, compare);\n            var leftIdx = 0;\n            var rightIdx = 0;\n            var i = 0;\n            while (leftIdx < left.length && rightIdx < right.length) {\n                var 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 || (exports.TextDocument = TextDocument = {}));\n    /**\n     * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n     */\n    var FullTextDocument = /** @class */ (function () {\n        function FullTextDocument(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        Object.defineProperty(FullTextDocument.prototype, \"uri\", {\n            get: function () {\n                return this._uri;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\n            get: function () {\n                return this._languageId;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        Object.defineProperty(FullTextDocument.prototype, \"version\", {\n            get: function () {\n                return this._version;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        FullTextDocument.prototype.getText = function (range) {\n            if (range) {\n                var start = this.offsetAt(range.start);\n                var end = this.offsetAt(range.end);\n                return this._content.substring(start, end);\n            }\n            return this._content;\n        };\n        FullTextDocument.prototype.update = function (event, version) {\n            this._content = event.text;\n            this._version = version;\n            this._lineOffsets = undefined;\n        };\n        FullTextDocument.prototype.getLineOffsets = function () {\n            if (this._lineOffsets === undefined) {\n                var lineOffsets = [];\n                var text = this._content;\n                var isLineStart = true;\n                for (var i = 0; i < text.length; i++) {\n                    if (isLineStart) {\n                        lineOffsets.push(i);\n                        isLineStart = false;\n                    }\n                    var 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        FullTextDocument.prototype.positionAt = function (offset) {\n            offset = Math.max(Math.min(offset, this._content.length), 0);\n            var lineOffsets = this.getLineOffsets();\n            var low = 0, high = lineOffsets.length;\n            if (high === 0) {\n                return Position.create(0, offset);\n            }\n            while (low < high) {\n                var 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            var line = low - 1;\n            return Position.create(line, offset - lineOffsets[line]);\n        };\n        FullTextDocument.prototype.offsetAt = function (position) {\n            var 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            var lineOffset = lineOffsets[position.line];\n            var 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        Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\n            get: function () {\n                return this.getLineOffsets().length;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        return FullTextDocument;\n    }());\n    var Is;\n    (function (Is) {\n        var 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","\"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.ProtocolNotificationType = exports.ProtocolNotificationType0 = exports.ProtocolRequestType = exports.ProtocolRequestType0 = exports.RegistrationType = exports.MessageDirection = void 0;\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\nvar MessageDirection;\n(function (MessageDirection) {\n    MessageDirection[\"clientToServer\"] = \"clientToServer\";\n    MessageDirection[\"serverToClient\"] = \"serverToClient\";\n    MessageDirection[\"both\"] = \"both\";\n})(MessageDirection || (exports.MessageDirection = MessageDirection = {}));\nclass RegistrationType {\n    constructor(method) {\n        this.method = method;\n    }\n}\nexports.RegistrationType = RegistrationType;\nclass ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {\n    constructor(method) {\n        super(method);\n    }\n}\nexports.ProtocolRequestType0 = ProtocolRequestType0;\nclass ProtocolRequestType extends vscode_jsonrpc_1.RequestType {\n    constructor(method) {\n        super(method, vscode_jsonrpc_1.ParameterStructures.byName);\n    }\n}\nexports.ProtocolRequestType = ProtocolRequestType;\nclass ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {\n    constructor(method) {\n        super(method);\n    }\n}\nexports.ProtocolNotificationType0 = ProtocolNotificationType0;\nclass ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {\n    constructor(method) {\n        super(method, vscode_jsonrpc_1.ParameterStructures.byName);\n    }\n}\nexports.ProtocolNotificationType = ProtocolNotificationType;\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 * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.objectLiteral = exports.typedArray = exports.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;\nfunction typedArray(value, check) {\n    return Array.isArray(value) && value.every(check);\n}\nexports.typedArray = typedArray;\nfunction 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}\nexports.objectLiteral = objectLiteral;\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.ImplementationRequest = void 0;\nconst messages_1 = require(\"./messages\");\n// @ts-ignore: to avoid inlining LocationLink as dynamic import\nlet __noDynamicImport;\n/**\n * A request to resolve the implementation locations of a symbol at a given text\n * document position. The request's parameter is of type {@link TextDocumentPositionParams}\n * the response is of type {@link Definition} or a Thenable that resolves to such.\n */\nvar ImplementationRequest;\n(function (ImplementationRequest) {\n    ImplementationRequest.method = 'textDocument/implementation';\n    ImplementationRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);\n})(ImplementationRequest || (exports.ImplementationRequest = ImplementationRequest = {}));\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.TypeDefinitionRequest = void 0;\nconst messages_1 = require(\"./messages\");\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\nlet __noDynamicImport;\n/**\n * A request to resolve the type definition locations of a symbol at a given text\n * document position. The request's parameter is of type {@link TextDocumentPositionParams}\n * the response is of type {@link Definition} or a Thenable that resolves to such.\n */\nvar TypeDefinitionRequest;\n(function (TypeDefinitionRequest) {\n    TypeDefinitionRequest.method = 'textDocument/typeDefinition';\n    TypeDefinitionRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);\n})(TypeDefinitionRequest || (exports.TypeDefinitionRequest = TypeDefinitionRequest = {}));\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.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.\n */\nvar WorkspaceFoldersRequest;\n(function (WorkspaceFoldersRequest) {\n    WorkspaceFoldersRequest.method = 'workspace/workspaceFolders';\n    WorkspaceFoldersRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0(WorkspaceFoldersRequest.method);\n})(WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = WorkspaceFoldersRequest = {}));\n/**\n * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace\n * folder configuration changes.\n */\nvar DidChangeWorkspaceFoldersNotification;\n(function (DidChangeWorkspaceFoldersNotification) {\n    DidChangeWorkspaceFoldersNotification.method = 'workspace/didChangeWorkspaceFolders';\n    DidChangeWorkspaceFoldersNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType(DidChangeWorkspaceFoldersNotification.method);\n})(DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = DidChangeWorkspaceFoldersNotification = {}));\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.ConfigurationRequest = void 0;\nconst messages_1 = require(\"./messages\");\n//---- Get Configuration request ----\n/**\n * The 'workspace/configuration' request is sent from the server to the client to fetch a certain\n * configuration setting.\n *\n * This pull model replaces the old push model were the client signaled configuration change via an\n * event. If the server still needs to react to configuration changes (since the server caches the\n * result of `workspace/configuration` requests) the server should register for an empty configuration\n * change event and empty the cache if such an event is received.\n */\nvar ConfigurationRequest;\n(function (ConfigurationRequest) {\n    ConfigurationRequest.method = 'workspace/configuration';\n    ConfigurationRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    ConfigurationRequest.type = new messages_1.ProtocolRequestType(ConfigurationRequest.method);\n})(ConfigurationRequest || (exports.ConfigurationRequest = ConfigurationRequest = {}));\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.ColorPresentationRequest = exports.DocumentColorRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to list all color symbols found in a given text document. The request's\n * parameter is of type {@link DocumentColorParams} the\n * response is of type {@link ColorInformation ColorInformation[]} or a Thenable\n * that resolves to such.\n */\nvar DocumentColorRequest;\n(function (DocumentColorRequest) {\n    DocumentColorRequest.method = 'textDocument/documentColor';\n    DocumentColorRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);\n})(DocumentColorRequest || (exports.DocumentColorRequest = DocumentColorRequest = {}));\n/**\n * A request to list all presentation for a color. The request's\n * parameter is of type {@link ColorPresentationParams} the\n * response is of type {@link ColorInformation ColorInformation[]} or a Thenable\n * that resolves to such.\n */\nvar ColorPresentationRequest;\n(function (ColorPresentationRequest) {\n    ColorPresentationRequest.method = 'textDocument/colorPresentation';\n    ColorPresentationRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    ColorPresentationRequest.type = new messages_1.ProtocolRequestType(ColorPresentationRequest.method);\n})(ColorPresentationRequest || (exports.ColorPresentationRequest = ColorPresentationRequest = {}));\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.FoldingRangeRefreshRequest = exports.FoldingRangeRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to provide folding ranges in a document. The request's\n * parameter is of type {@link FoldingRangeParams}, the\n * response is of type {@link FoldingRangeList} or a Thenable\n * that resolves to such.\n */\nvar FoldingRangeRequest;\n(function (FoldingRangeRequest) {\n    FoldingRangeRequest.method = 'textDocument/foldingRange';\n    FoldingRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);\n})(FoldingRangeRequest || (exports.FoldingRangeRequest = FoldingRangeRequest = {}));\n/**\n * @since 3.18.0\n * @proposed\n */\nvar FoldingRangeRefreshRequest;\n(function (FoldingRangeRefreshRequest) {\n    FoldingRangeRefreshRequest.method = `workspace/foldingRange/refresh`;\n    FoldingRangeRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    FoldingRangeRefreshRequest.type = new messages_1.ProtocolRequestType0(FoldingRangeRefreshRequest.method);\n})(FoldingRangeRefreshRequest || (exports.FoldingRangeRefreshRequest = FoldingRangeRefreshRequest = {}));\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.DeclarationRequest = void 0;\nconst messages_1 = require(\"./messages\");\n// @ts-ignore: to avoid inlining LocationLink as dynamic import\nlet __noDynamicImport;\n/**\n * A request to resolve the type definition locations of a symbol at a given text\n * document position. The request's parameter is of type {@link TextDocumentPositionParams}\n * the response is of type {@link Declaration} or a typed array of {@link DeclarationLink}\n * or a Thenable that resolves to such.\n */\nvar DeclarationRequest;\n(function (DeclarationRequest) {\n    DeclarationRequest.method = 'textDocument/declaration';\n    DeclarationRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);\n})(DeclarationRequest || (exports.DeclarationRequest = DeclarationRequest = {}));\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.SelectionRangeRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to provide selection ranges in a document. The request's\n * parameter is of type {@link SelectionRangeParams}, the\n * response is of type {@link SelectionRange SelectionRange[]} or a Thenable\n * that resolves to such.\n */\nvar SelectionRangeRequest;\n(function (SelectionRangeRequest) {\n    SelectionRangeRequest.method = 'textDocument/selectionRange';\n    SelectionRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);\n})(SelectionRangeRequest || (exports.SelectionRangeRequest = SelectionRangeRequest = {}));\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.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = void 0;\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\nconst messages_1 = require(\"./messages\");\nvar WorkDoneProgress;\n(function (WorkDoneProgress) {\n    WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();\n    function is(value) {\n        return value === WorkDoneProgress.type;\n    }\n    WorkDoneProgress.is = is;\n})(WorkDoneProgress || (exports.WorkDoneProgress = WorkDoneProgress = {}));\n/**\n * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress\n * reporting from the server.\n */\nvar WorkDoneProgressCreateRequest;\n(function (WorkDoneProgressCreateRequest) {\n    WorkDoneProgressCreateRequest.method = 'window/workDoneProgress/create';\n    WorkDoneProgressCreateRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType(WorkDoneProgressCreateRequest.method);\n})(WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = WorkDoneProgressCreateRequest = {}));\n/**\n * The `window/workDoneProgress/cancel` notification is sent from  the client to the server to cancel a progress\n * initiated on the server side.\n */\nvar WorkDoneProgressCancelNotification;\n(function (WorkDoneProgressCancelNotification) {\n    WorkDoneProgressCancelNotification.method = 'window/workDoneProgress/cancel';\n    WorkDoneProgressCancelNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType(WorkDoneProgressCancelNotification.method);\n})(WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = WorkDoneProgressCancelNotification = {}));\n","\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) TypeFox, Microsoft and others. 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.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.CallHierarchyPrepareRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to result a `CallHierarchyItem` in a document at a given position.\n * Can be used as an input to an incoming or outgoing call hierarchy.\n *\n * @since 3.16.0\n */\nvar CallHierarchyPrepareRequest;\n(function (CallHierarchyPrepareRequest) {\n    CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';\n    CallHierarchyPrepareRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);\n})(CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = CallHierarchyPrepareRequest = {}));\n/**\n * A request to resolve the incoming calls for a given `CallHierarchyItem`.\n *\n * @since 3.16.0\n */\nvar CallHierarchyIncomingCallsRequest;\n(function (CallHierarchyIncomingCallsRequest) {\n    CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';\n    CallHierarchyIncomingCallsRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);\n})(CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = CallHierarchyIncomingCallsRequest = {}));\n/**\n * A request to resolve the outgoing calls for a given `CallHierarchyItem`.\n *\n * @since 3.16.0\n */\nvar CallHierarchyOutgoingCallsRequest;\n(function (CallHierarchyOutgoingCallsRequest) {\n    CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';\n    CallHierarchyOutgoingCallsRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);\n})(CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = CallHierarchyOutgoingCallsRequest = {}));\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.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.SemanticTokensRegistrationType = exports.TokenFormat = void 0;\nconst messages_1 = require(\"./messages\");\n//------- 'textDocument/semanticTokens' -----\nvar TokenFormat;\n(function (TokenFormat) {\n    TokenFormat.Relative = 'relative';\n})(TokenFormat || (exports.TokenFormat = TokenFormat = {}));\nvar SemanticTokensRegistrationType;\n(function (SemanticTokensRegistrationType) {\n    SemanticTokensRegistrationType.method = 'textDocument/semanticTokens';\n    SemanticTokensRegistrationType.type = new messages_1.RegistrationType(SemanticTokensRegistrationType.method);\n})(SemanticTokensRegistrationType || (exports.SemanticTokensRegistrationType = SemanticTokensRegistrationType = {}));\n/**\n * @since 3.16.0\n */\nvar SemanticTokensRequest;\n(function (SemanticTokensRequest) {\n    SemanticTokensRequest.method = 'textDocument/semanticTokens/full';\n    SemanticTokensRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);\n    SemanticTokensRequest.registrationMethod = SemanticTokensRegistrationType.method;\n})(SemanticTokensRequest || (exports.SemanticTokensRequest = SemanticTokensRequest = {}));\n/**\n * @since 3.16.0\n */\nvar SemanticTokensDeltaRequest;\n(function (SemanticTokensDeltaRequest) {\n    SemanticTokensDeltaRequest.method = 'textDocument/semanticTokens/full/delta';\n    SemanticTokensDeltaRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    SemanticTokensDeltaRequest.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest.method);\n    SemanticTokensDeltaRequest.registrationMethod = SemanticTokensRegistrationType.method;\n})(SemanticTokensDeltaRequest || (exports.SemanticTokensDeltaRequest = SemanticTokensDeltaRequest = {}));\n/**\n * @since 3.16.0\n */\nvar SemanticTokensRangeRequest;\n(function (SemanticTokensRangeRequest) {\n    SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';\n    SemanticTokensRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);\n    SemanticTokensRangeRequest.registrationMethod = SemanticTokensRegistrationType.method;\n})(SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = SemanticTokensRangeRequest = {}));\n/**\n * @since 3.16.0\n */\nvar SemanticTokensRefreshRequest;\n(function (SemanticTokensRefreshRequest) {\n    SemanticTokensRefreshRequest.method = `workspace/semanticTokens/refresh`;\n    SemanticTokensRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    SemanticTokensRefreshRequest.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest.method);\n})(SemanticTokensRefreshRequest || (exports.SemanticTokensRefreshRequest = SemanticTokensRefreshRequest = {}));\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.ShowDocumentRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to show a document. This request might open an\n * external program depending on the value of the URI to open.\n * For example a request to open `https://code.visualstudio.com/`\n * will very likely open the URI in a WEB browser.\n *\n * @since 3.16.0\n*/\nvar ShowDocumentRequest;\n(function (ShowDocumentRequest) {\n    ShowDocumentRequest.method = 'window/showDocument';\n    ShowDocumentRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    ShowDocumentRequest.type = new messages_1.ProtocolRequestType(ShowDocumentRequest.method);\n})(ShowDocumentRequest || (exports.ShowDocumentRequest = ShowDocumentRequest = {}));\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.LinkedEditingRangeRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to provide ranges that can be edited together.\n *\n * @since 3.16.0\n */\nvar LinkedEditingRangeRequest;\n(function (LinkedEditingRangeRequest) {\n    LinkedEditingRangeRequest.method = 'textDocument/linkedEditingRange';\n    LinkedEditingRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    LinkedEditingRangeRequest.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest.method);\n})(LinkedEditingRangeRequest || (exports.LinkedEditingRangeRequest = LinkedEditingRangeRequest = {}));\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.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.DidRenameFilesNotification = exports.WillRenameFilesRequest = exports.DidCreateFilesNotification = exports.WillCreateFilesRequest = exports.FileOperationPatternKind = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A pattern kind describing if a glob pattern matches a file a folder or\n * both.\n *\n * @since 3.16.0\n */\nvar FileOperationPatternKind;\n(function (FileOperationPatternKind) {\n    /**\n     * The pattern matches a file only.\n     */\n    FileOperationPatternKind.file = 'file';\n    /**\n     * The pattern matches a folder only.\n     */\n    FileOperationPatternKind.folder = 'folder';\n})(FileOperationPatternKind || (exports.FileOperationPatternKind = FileOperationPatternKind = {}));\n/**\n * The will create files request is sent from the client to the server before files are actually\n * created as long as the creation is triggered from within the client.\n *\n * The request can return a `WorkspaceEdit` which will be applied to workspace before the\n * files are created. Hence the `WorkspaceEdit` can not manipulate the content of the file\n * to be created.\n *\n * @since 3.16.0\n */\nvar WillCreateFilesRequest;\n(function (WillCreateFilesRequest) {\n    WillCreateFilesRequest.method = 'workspace/willCreateFiles';\n    WillCreateFilesRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WillCreateFilesRequest.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest.method);\n})(WillCreateFilesRequest || (exports.WillCreateFilesRequest = WillCreateFilesRequest = {}));\n/**\n * The did create files notification is sent from the client to the server when\n * files were created from within the client.\n *\n * @since 3.16.0\n */\nvar DidCreateFilesNotification;\n(function (DidCreateFilesNotification) {\n    DidCreateFilesNotification.method = 'workspace/didCreateFiles';\n    DidCreateFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidCreateFilesNotification.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification.method);\n})(DidCreateFilesNotification || (exports.DidCreateFilesNotification = DidCreateFilesNotification = {}));\n/**\n * The will rename files request is sent from the client to the server before files are actually\n * renamed as long as the rename is triggered from within the client.\n *\n * @since 3.16.0\n */\nvar WillRenameFilesRequest;\n(function (WillRenameFilesRequest) {\n    WillRenameFilesRequest.method = 'workspace/willRenameFiles';\n    WillRenameFilesRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WillRenameFilesRequest.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest.method);\n})(WillRenameFilesRequest || (exports.WillRenameFilesRequest = WillRenameFilesRequest = {}));\n/**\n * The did rename files notification is sent from the client to the server when\n * files were renamed from within the client.\n *\n * @since 3.16.0\n */\nvar DidRenameFilesNotification;\n(function (DidRenameFilesNotification) {\n    DidRenameFilesNotification.method = 'workspace/didRenameFiles';\n    DidRenameFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidRenameFilesNotification.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification.method);\n})(DidRenameFilesNotification || (exports.DidRenameFilesNotification = DidRenameFilesNotification = {}));\n/**\n * The will delete files request is sent from the client to the server before files are actually\n * deleted as long as the deletion is triggered from within the client.\n *\n * @since 3.16.0\n */\nvar DidDeleteFilesNotification;\n(function (DidDeleteFilesNotification) {\n    DidDeleteFilesNotification.method = 'workspace/didDeleteFiles';\n    DidDeleteFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidDeleteFilesNotification.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification.method);\n})(DidDeleteFilesNotification || (exports.DidDeleteFilesNotification = DidDeleteFilesNotification = {}));\n/**\n * The did delete files notification is sent from the client to the server when\n * files were deleted from within the client.\n *\n * @since 3.16.0\n */\nvar WillDeleteFilesRequest;\n(function (WillDeleteFilesRequest) {\n    WillDeleteFilesRequest.method = 'workspace/willDeleteFiles';\n    WillDeleteFilesRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WillDeleteFilesRequest.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest.method);\n})(WillDeleteFilesRequest || (exports.WillDeleteFilesRequest = WillDeleteFilesRequest = {}));\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.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * Moniker uniqueness level to define scope of the moniker.\n *\n * @since 3.16.0\n */\nvar UniquenessLevel;\n(function (UniquenessLevel) {\n    /**\n     * The moniker is only unique inside a document\n     */\n    UniquenessLevel.document = 'document';\n    /**\n     * The moniker is unique inside a project for which a dump got created\n     */\n    UniquenessLevel.project = 'project';\n    /**\n     * The moniker is unique inside the group to which a project belongs\n     */\n    UniquenessLevel.group = 'group';\n    /**\n     * The moniker is unique inside the moniker scheme.\n     */\n    UniquenessLevel.scheme = 'scheme';\n    /**\n     * The moniker is globally unique\n     */\n    UniquenessLevel.global = 'global';\n})(UniquenessLevel || (exports.UniquenessLevel = UniquenessLevel = {}));\n/**\n * The moniker kind.\n *\n * @since 3.16.0\n */\nvar MonikerKind;\n(function (MonikerKind) {\n    /**\n     * The moniker represent a symbol that is imported into a project\n     */\n    MonikerKind.$import = 'import';\n    /**\n     * The moniker represents a symbol that is exported from a project\n     */\n    MonikerKind.$export = 'export';\n    /**\n     * The moniker represents a symbol that is local to a project (e.g. a local\n     * variable of a function, a class not visible outside the project, ...)\n     */\n    MonikerKind.local = 'local';\n})(MonikerKind || (exports.MonikerKind = MonikerKind = {}));\n/**\n * A request to get the moniker of a symbol at a given text document position.\n * The request parameter is of type {@link TextDocumentPositionParams}.\n * The response is of type {@link Moniker Moniker[]} or `null`.\n */\nvar MonikerRequest;\n(function (MonikerRequest) {\n    MonikerRequest.method = 'textDocument/moniker';\n    MonikerRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    MonikerRequest.type = new messages_1.ProtocolRequestType(MonikerRequest.method);\n})(MonikerRequest || (exports.MonikerRequest = MonikerRequest = {}));\n","\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) TypeFox, Microsoft and others. 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.TypeHierarchySubtypesRequest = exports.TypeHierarchySupertypesRequest = exports.TypeHierarchyPrepareRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to result a `TypeHierarchyItem` in a document at a given position.\n * Can be used as an input to a subtypes or supertypes type hierarchy.\n *\n * @since 3.17.0\n */\nvar TypeHierarchyPrepareRequest;\n(function (TypeHierarchyPrepareRequest) {\n    TypeHierarchyPrepareRequest.method = 'textDocument/prepareTypeHierarchy';\n    TypeHierarchyPrepareRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    TypeHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(TypeHierarchyPrepareRequest.method);\n})(TypeHierarchyPrepareRequest || (exports.TypeHierarchyPrepareRequest = TypeHierarchyPrepareRequest = {}));\n/**\n * A request to resolve the supertypes for a given `TypeHierarchyItem`.\n *\n * @since 3.17.0\n */\nvar TypeHierarchySupertypesRequest;\n(function (TypeHierarchySupertypesRequest) {\n    TypeHierarchySupertypesRequest.method = 'typeHierarchy/supertypes';\n    TypeHierarchySupertypesRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    TypeHierarchySupertypesRequest.type = new messages_1.ProtocolRequestType(TypeHierarchySupertypesRequest.method);\n})(TypeHierarchySupertypesRequest || (exports.TypeHierarchySupertypesRequest = TypeHierarchySupertypesRequest = {}));\n/**\n * A request to resolve the subtypes for a given `TypeHierarchyItem`.\n *\n * @since 3.17.0\n */\nvar TypeHierarchySubtypesRequest;\n(function (TypeHierarchySubtypesRequest) {\n    TypeHierarchySubtypesRequest.method = 'typeHierarchy/subtypes';\n    TypeHierarchySubtypesRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    TypeHierarchySubtypesRequest.type = new messages_1.ProtocolRequestType(TypeHierarchySubtypesRequest.method);\n})(TypeHierarchySubtypesRequest || (exports.TypeHierarchySubtypesRequest = TypeHierarchySubtypesRequest = {}));\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.InlineValueRefreshRequest = exports.InlineValueRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to provide inline values in a document. The request's parameter is of\n * type {@link InlineValueParams}, the response is of type\n * {@link InlineValue InlineValue[]} or a Thenable that resolves to such.\n *\n * @since 3.17.0\n */\nvar InlineValueRequest;\n(function (InlineValueRequest) {\n    InlineValueRequest.method = 'textDocument/inlineValue';\n    InlineValueRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    InlineValueRequest.type = new messages_1.ProtocolRequestType(InlineValueRequest.method);\n})(InlineValueRequest || (exports.InlineValueRequest = InlineValueRequest = {}));\n/**\n * @since 3.17.0\n */\nvar InlineValueRefreshRequest;\n(function (InlineValueRefreshRequest) {\n    InlineValueRefreshRequest.method = `workspace/inlineValue/refresh`;\n    InlineValueRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    InlineValueRefreshRequest.type = new messages_1.ProtocolRequestType0(InlineValueRefreshRequest.method);\n})(InlineValueRefreshRequest || (exports.InlineValueRefreshRequest = InlineValueRefreshRequest = {}));\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.InlayHintRefreshRequest = exports.InlayHintResolveRequest = exports.InlayHintRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to provide inlay hints in a document. The request's parameter is of\n * type {@link InlayHintsParams}, the response is of type\n * {@link InlayHint InlayHint[]} or a Thenable that resolves to such.\n *\n * @since 3.17.0\n */\nvar InlayHintRequest;\n(function (InlayHintRequest) {\n    InlayHintRequest.method = 'textDocument/inlayHint';\n    InlayHintRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    InlayHintRequest.type = new messages_1.ProtocolRequestType(InlayHintRequest.method);\n})(InlayHintRequest || (exports.InlayHintRequest = InlayHintRequest = {}));\n/**\n * A request to resolve additional properties for an inlay hint.\n * The request's parameter is of type {@link InlayHint}, the response is\n * of type {@link InlayHint} or a Thenable that resolves to such.\n *\n * @since 3.17.0\n */\nvar InlayHintResolveRequest;\n(function (InlayHintResolveRequest) {\n    InlayHintResolveRequest.method = 'inlayHint/resolve';\n    InlayHintResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    InlayHintResolveRequest.type = new messages_1.ProtocolRequestType(InlayHintResolveRequest.method);\n})(InlayHintResolveRequest || (exports.InlayHintResolveRequest = InlayHintResolveRequest = {}));\n/**\n * @since 3.17.0\n */\nvar InlayHintRefreshRequest;\n(function (InlayHintRefreshRequest) {\n    InlayHintRefreshRequest.method = `workspace/inlayHint/refresh`;\n    InlayHintRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    InlayHintRefreshRequest.type = new messages_1.ProtocolRequestType0(InlayHintRefreshRequest.method);\n})(InlayHintRefreshRequest || (exports.InlayHintRefreshRequest = InlayHintRefreshRequest = {}));\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.DiagnosticRefreshRequest = exports.WorkspaceDiagnosticRequest = exports.DocumentDiagnosticRequest = exports.DocumentDiagnosticReportKind = exports.DiagnosticServerCancellationData = void 0;\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\nconst Is = require(\"./utils/is\");\nconst messages_1 = require(\"./messages\");\n/**\n * @since 3.17.0\n */\nvar DiagnosticServerCancellationData;\n(function (DiagnosticServerCancellationData) {\n    function is(value) {\n        const candidate = value;\n        return candidate && Is.boolean(candidate.retriggerRequest);\n    }\n    DiagnosticServerCancellationData.is = is;\n})(DiagnosticServerCancellationData || (exports.DiagnosticServerCancellationData = DiagnosticServerCancellationData = {}));\n/**\n * The document diagnostic report kinds.\n *\n * @since 3.17.0\n */\nvar DocumentDiagnosticReportKind;\n(function (DocumentDiagnosticReportKind) {\n    /**\n     * A diagnostic report with a full\n     * set of problems.\n     */\n    DocumentDiagnosticReportKind.Full = 'full';\n    /**\n     * A report indicating that the last\n     * returned report is still accurate.\n     */\n    DocumentDiagnosticReportKind.Unchanged = 'unchanged';\n})(DocumentDiagnosticReportKind || (exports.DocumentDiagnosticReportKind = DocumentDiagnosticReportKind = {}));\n/**\n * The document diagnostic request definition.\n *\n * @since 3.17.0\n */\nvar DocumentDiagnosticRequest;\n(function (DocumentDiagnosticRequest) {\n    DocumentDiagnosticRequest.method = 'textDocument/diagnostic';\n    DocumentDiagnosticRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentDiagnosticRequest.type = new messages_1.ProtocolRequestType(DocumentDiagnosticRequest.method);\n    DocumentDiagnosticRequest.partialResult = new vscode_jsonrpc_1.ProgressType();\n})(DocumentDiagnosticRequest || (exports.DocumentDiagnosticRequest = DocumentDiagnosticRequest = {}));\n/**\n * The workspace diagnostic request definition.\n *\n * @since 3.17.0\n */\nvar WorkspaceDiagnosticRequest;\n(function (WorkspaceDiagnosticRequest) {\n    WorkspaceDiagnosticRequest.method = 'workspace/diagnostic';\n    WorkspaceDiagnosticRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WorkspaceDiagnosticRequest.type = new messages_1.ProtocolRequestType(WorkspaceDiagnosticRequest.method);\n    WorkspaceDiagnosticRequest.partialResult = new vscode_jsonrpc_1.ProgressType();\n})(WorkspaceDiagnosticRequest || (exports.WorkspaceDiagnosticRequest = WorkspaceDiagnosticRequest = {}));\n/**\n * The diagnostic refresh request definition.\n *\n * @since 3.17.0\n */\nvar DiagnosticRefreshRequest;\n(function (DiagnosticRefreshRequest) {\n    DiagnosticRefreshRequest.method = `workspace/diagnostic/refresh`;\n    DiagnosticRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    DiagnosticRefreshRequest.type = new messages_1.ProtocolRequestType0(DiagnosticRefreshRequest.method);\n})(DiagnosticRefreshRequest || (exports.DiagnosticRefreshRequest = DiagnosticRefreshRequest = {}));\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.DidCloseNotebookDocumentNotification = exports.DidSaveNotebookDocumentNotification = exports.DidChangeNotebookDocumentNotification = exports.NotebookCellArrayChange = exports.DidOpenNotebookDocumentNotification = exports.NotebookDocumentSyncRegistrationType = exports.NotebookDocument = exports.NotebookCell = exports.ExecutionSummary = exports.NotebookCellKind = void 0;\nconst vscode_languageserver_types_1 = require(\"vscode-languageserver-types\");\nconst Is = require(\"./utils/is\");\nconst messages_1 = require(\"./messages\");\n/**\n * A notebook cell kind.\n *\n * @since 3.17.0\n */\nvar NotebookCellKind;\n(function (NotebookCellKind) {\n    /**\n     * A markup-cell is formatted source that is used for display.\n     */\n    NotebookCellKind.Markup = 1;\n    /**\n     * A code-cell is source code.\n     */\n    NotebookCellKind.Code = 2;\n    function is(value) {\n        return value === 1 || value === 2;\n    }\n    NotebookCellKind.is = is;\n})(NotebookCellKind || (exports.NotebookCellKind = NotebookCellKind = {}));\nvar ExecutionSummary;\n(function (ExecutionSummary) {\n    function create(executionOrder, success) {\n        const result = { executionOrder };\n        if (success === true || success === false) {\n            result.success = success;\n        }\n        return result;\n    }\n    ExecutionSummary.create = create;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.executionOrder) && (candidate.success === undefined || Is.boolean(candidate.success));\n    }\n    ExecutionSummary.is = is;\n    function equals(one, other) {\n        if (one === other) {\n            return true;\n        }\n        if (one === null || one === undefined || other === null || other === undefined) {\n            return false;\n        }\n        return one.executionOrder === other.executionOrder && one.success === other.success;\n    }\n    ExecutionSummary.equals = equals;\n})(ExecutionSummary || (exports.ExecutionSummary = ExecutionSummary = {}));\nvar NotebookCell;\n(function (NotebookCell) {\n    function create(kind, document) {\n        return { kind, document };\n    }\n    NotebookCell.create = create;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && NotebookCellKind.is(candidate.kind) && vscode_languageserver_types_1.DocumentUri.is(candidate.document) &&\n            (candidate.metadata === undefined || Is.objectLiteral(candidate.metadata));\n    }\n    NotebookCell.is = is;\n    function diff(one, two) {\n        const result = new Set();\n        if (one.document !== two.document) {\n            result.add('document');\n        }\n        if (one.kind !== two.kind) {\n            result.add('kind');\n        }\n        if (one.executionSummary !== two.executionSummary) {\n            result.add('executionSummary');\n        }\n        if ((one.metadata !== undefined || two.metadata !== undefined) && !equalsMetadata(one.metadata, two.metadata)) {\n            result.add('metadata');\n        }\n        if ((one.executionSummary !== undefined || two.executionSummary !== undefined) && !ExecutionSummary.equals(one.executionSummary, two.executionSummary)) {\n            result.add('executionSummary');\n        }\n        return result;\n    }\n    NotebookCell.diff = diff;\n    function equalsMetadata(one, other) {\n        if (one === other) {\n            return true;\n        }\n        if (one === null || one === undefined || other === null || other === undefined) {\n            return false;\n        }\n        if (typeof one !== typeof other) {\n            return false;\n        }\n        if (typeof one !== 'object') {\n            return false;\n        }\n        const oneArray = Array.isArray(one);\n        const otherArray = Array.isArray(other);\n        if (oneArray !== otherArray) {\n            return false;\n        }\n        if (oneArray && otherArray) {\n            if (one.length !== other.length) {\n                return false;\n            }\n            for (let i = 0; i < one.length; i++) {\n                if (!equalsMetadata(one[i], other[i])) {\n                    return false;\n                }\n            }\n        }\n        if (Is.objectLiteral(one) && Is.objectLiteral(other)) {\n            const oneKeys = Object.keys(one);\n            const otherKeys = Object.keys(other);\n            if (oneKeys.length !== otherKeys.length) {\n                return false;\n            }\n            oneKeys.sort();\n            otherKeys.sort();\n            if (!equalsMetadata(oneKeys, otherKeys)) {\n                return false;\n            }\n            for (let i = 0; i < oneKeys.length; i++) {\n                const prop = oneKeys[i];\n                if (!equalsMetadata(one[prop], other[prop])) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n})(NotebookCell || (exports.NotebookCell = NotebookCell = {}));\nvar NotebookDocument;\n(function (NotebookDocument) {\n    function create(uri, notebookType, version, cells) {\n        return { uri, notebookType, version, cells };\n    }\n    NotebookDocument.create = create;\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && Is.string(candidate.uri) && vscode_languageserver_types_1.integer.is(candidate.version) && Is.typedArray(candidate.cells, NotebookCell.is);\n    }\n    NotebookDocument.is = is;\n})(NotebookDocument || (exports.NotebookDocument = NotebookDocument = {}));\nvar NotebookDocumentSyncRegistrationType;\n(function (NotebookDocumentSyncRegistrationType) {\n    NotebookDocumentSyncRegistrationType.method = 'notebookDocument/sync';\n    NotebookDocumentSyncRegistrationType.messageDirection = messages_1.MessageDirection.clientToServer;\n    NotebookDocumentSyncRegistrationType.type = new messages_1.RegistrationType(NotebookDocumentSyncRegistrationType.method);\n})(NotebookDocumentSyncRegistrationType || (exports.NotebookDocumentSyncRegistrationType = NotebookDocumentSyncRegistrationType = {}));\n/**\n * A notification sent when a notebook opens.\n *\n * @since 3.17.0\n */\nvar DidOpenNotebookDocumentNotification;\n(function (DidOpenNotebookDocumentNotification) {\n    DidOpenNotebookDocumentNotification.method = 'notebookDocument/didOpen';\n    DidOpenNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidOpenNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenNotebookDocumentNotification.method);\n    DidOpenNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;\n})(DidOpenNotebookDocumentNotification || (exports.DidOpenNotebookDocumentNotification = DidOpenNotebookDocumentNotification = {}));\nvar NotebookCellArrayChange;\n(function (NotebookCellArrayChange) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.start) && vscode_languageserver_types_1.uinteger.is(candidate.deleteCount) && (candidate.cells === undefined || Is.typedArray(candidate.cells, NotebookCell.is));\n    }\n    NotebookCellArrayChange.is = is;\n    function create(start, deleteCount, cells) {\n        const result = { start, deleteCount };\n        if (cells !== undefined) {\n            result.cells = cells;\n        }\n        return result;\n    }\n    NotebookCellArrayChange.create = create;\n})(NotebookCellArrayChange || (exports.NotebookCellArrayChange = NotebookCellArrayChange = {}));\nvar DidChangeNotebookDocumentNotification;\n(function (DidChangeNotebookDocumentNotification) {\n    DidChangeNotebookDocumentNotification.method = 'notebookDocument/didChange';\n    DidChangeNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidChangeNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeNotebookDocumentNotification.method);\n    DidChangeNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;\n})(DidChangeNotebookDocumentNotification || (exports.DidChangeNotebookDocumentNotification = DidChangeNotebookDocumentNotification = {}));\n/**\n * A notification sent when a notebook document is saved.\n *\n * @since 3.17.0\n */\nvar DidSaveNotebookDocumentNotification;\n(function (DidSaveNotebookDocumentNotification) {\n    DidSaveNotebookDocumentNotification.method = 'notebookDocument/didSave';\n    DidSaveNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidSaveNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveNotebookDocumentNotification.method);\n    DidSaveNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;\n})(DidSaveNotebookDocumentNotification || (exports.DidSaveNotebookDocumentNotification = DidSaveNotebookDocumentNotification = {}));\n/**\n * A notification sent when a notebook closes.\n *\n * @since 3.17.0\n */\nvar DidCloseNotebookDocumentNotification;\n(function (DidCloseNotebookDocumentNotification) {\n    DidCloseNotebookDocumentNotification.method = 'notebookDocument/didClose';\n    DidCloseNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidCloseNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseNotebookDocumentNotification.method);\n    DidCloseNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;\n})(DidCloseNotebookDocumentNotification || (exports.DidCloseNotebookDocumentNotification = DidCloseNotebookDocumentNotification = {}));\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.InlineCompletionRequest = void 0;\nconst messages_1 = require(\"./messages\");\n/**\n * A request to provide inline completions in a document. The request's parameter is of\n * type {@link InlineCompletionParams}, the response is of type\n * {@link InlineCompletion InlineCompletion[]} or a Thenable that resolves to such.\n *\n * @since 3.18.0\n * @proposed\n */\nvar InlineCompletionRequest;\n(function (InlineCompletionRequest) {\n    InlineCompletionRequest.method = 'textDocument/inlineCompletion';\n    InlineCompletionRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    InlineCompletionRequest.type = new messages_1.ProtocolRequestType(InlineCompletionRequest.method);\n})(InlineCompletionRequest || (exports.InlineCompletionRequest = InlineCompletionRequest = {}));\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.WorkspaceSymbolRequest = exports.CodeActionResolveRequest = exports.CodeActionRequest = exports.DocumentSymbolRequest = exports.DocumentHighlightRequest = exports.ReferencesRequest = exports.DefinitionRequest = exports.SignatureHelpRequest = exports.SignatureHelpTriggerKind = exports.HoverRequest = exports.CompletionResolveRequest = exports.CompletionRequest = exports.CompletionTriggerKind = exports.PublishDiagnosticsNotification = exports.WatchKind = exports.RelativePattern = exports.FileChangeType = exports.DidChangeWatchedFilesNotification = exports.WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentNotification = exports.TextDocumentSaveReason = exports.DidSaveTextDocumentNotification = exports.DidCloseTextDocumentNotification = exports.DidChangeTextDocumentNotification = exports.TextDocumentContentChangeEvent = exports.DidOpenTextDocumentNotification = exports.TextDocumentSyncKind = exports.TelemetryEventNotification = exports.LogMessageNotification = exports.ShowMessageRequest = exports.ShowMessageNotification = exports.MessageType = exports.DidChangeConfigurationNotification = exports.ExitNotification = exports.ShutdownRequest = exports.InitializedNotification = exports.InitializeErrorCodes = exports.InitializeRequest = exports.WorkDoneProgressOptions = exports.TextDocumentRegistrationOptions = exports.StaticRegistrationOptions = exports.PositionEncodingKind = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.UnregistrationRequest = exports.RegistrationRequest = exports.DocumentSelector = exports.NotebookCellTextDocumentFilter = exports.NotebookDocumentFilter = exports.TextDocumentFilter = void 0;\nexports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.WillRenameFilesRequest = exports.DidRenameFilesNotification = exports.WillCreateFilesRequest = exports.DidCreateFilesNotification = exports.FileOperationPatternKind = exports.LinkedEditingRangeRequest = exports.ShowDocumentRequest = exports.SemanticTokensRegistrationType = exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.TokenFormat = exports.CallHierarchyPrepareRequest = exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = exports.SelectionRangeRequest = exports.DeclarationRequest = exports.FoldingRangeRefreshRequest = exports.FoldingRangeRequest = exports.ColorPresentationRequest = exports.DocumentColorRequest = exports.ConfigurationRequest = exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = exports.TypeDefinitionRequest = exports.ImplementationRequest = exports.ApplyWorkspaceEditRequest = exports.ExecuteCommandRequest = exports.PrepareRenameRequest = exports.RenameRequest = exports.PrepareSupportDefaultBehavior = exports.DocumentOnTypeFormattingRequest = exports.DocumentRangesFormattingRequest = exports.DocumentRangeFormattingRequest = exports.DocumentFormattingRequest = exports.DocumentLinkResolveRequest = exports.DocumentLinkRequest = exports.CodeLensRefreshRequest = exports.CodeLensResolveRequest = exports.CodeLensRequest = exports.WorkspaceSymbolResolveRequest = void 0;\nexports.InlineCompletionRequest = exports.DidCloseNotebookDocumentNotification = exports.DidSaveNotebookDocumentNotification = exports.DidChangeNotebookDocumentNotification = exports.NotebookCellArrayChange = exports.DidOpenNotebookDocumentNotification = exports.NotebookDocumentSyncRegistrationType = exports.NotebookDocument = exports.NotebookCell = exports.ExecutionSummary = exports.NotebookCellKind = exports.DiagnosticRefreshRequest = exports.WorkspaceDiagnosticRequest = exports.DocumentDiagnosticRequest = exports.DocumentDiagnosticReportKind = exports.DiagnosticServerCancellationData = exports.InlayHintRefreshRequest = exports.InlayHintResolveRequest = exports.InlayHintRequest = exports.InlineValueRefreshRequest = exports.InlineValueRequest = exports.TypeHierarchySupertypesRequest = exports.TypeHierarchySubtypesRequest = exports.TypeHierarchyPrepareRequest = void 0;\nconst messages_1 = require(\"./messages\");\nconst vscode_languageserver_types_1 = require(\"vscode-languageserver-types\");\nconst Is = require(\"./utils/is\");\nconst protocol_implementation_1 = require(\"./protocol.implementation\");\nObject.defineProperty(exports, \"ImplementationRequest\", { enumerable: true, get: function () { return protocol_implementation_1.ImplementationRequest; } });\nconst protocol_typeDefinition_1 = require(\"./protocol.typeDefinition\");\nObject.defineProperty(exports, \"TypeDefinitionRequest\", { enumerable: true, get: function () { return protocol_typeDefinition_1.TypeDefinitionRequest; } });\nconst protocol_workspaceFolder_1 = require(\"./protocol.workspaceFolder\");\nObject.defineProperty(exports, \"WorkspaceFoldersRequest\", { enumerable: true, get: function () { return protocol_workspaceFolder_1.WorkspaceFoldersRequest; } });\nObject.defineProperty(exports, \"DidChangeWorkspaceFoldersNotification\", { enumerable: true, get: function () { return protocol_workspaceFolder_1.DidChangeWorkspaceFoldersNotification; } });\nconst protocol_configuration_1 = require(\"./protocol.configuration\");\nObject.defineProperty(exports, \"ConfigurationRequest\", { enumerable: true, get: function () { return protocol_configuration_1.ConfigurationRequest; } });\nconst protocol_colorProvider_1 = require(\"./protocol.colorProvider\");\nObject.defineProperty(exports, \"DocumentColorRequest\", { enumerable: true, get: function () { return protocol_colorProvider_1.DocumentColorRequest; } });\nObject.defineProperty(exports, \"ColorPresentationRequest\", { enumerable: true, get: function () { return protocol_colorProvider_1.ColorPresentationRequest; } });\nconst protocol_foldingRange_1 = require(\"./protocol.foldingRange\");\nObject.defineProperty(exports, \"FoldingRangeRequest\", { enumerable: true, get: function () { return protocol_foldingRange_1.FoldingRangeRequest; } });\nObject.defineProperty(exports, \"FoldingRangeRefreshRequest\", { enumerable: true, get: function () { return protocol_foldingRange_1.FoldingRangeRefreshRequest; } });\nconst protocol_declaration_1 = require(\"./protocol.declaration\");\nObject.defineProperty(exports, \"DeclarationRequest\", { enumerable: true, get: function () { return protocol_declaration_1.DeclarationRequest; } });\nconst protocol_selectionRange_1 = require(\"./protocol.selectionRange\");\nObject.defineProperty(exports, \"SelectionRangeRequest\", { enumerable: true, get: function () { return protocol_selectionRange_1.SelectionRangeRequest; } });\nconst protocol_progress_1 = require(\"./protocol.progress\");\nObject.defineProperty(exports, \"WorkDoneProgress\", { enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgress; } });\nObject.defineProperty(exports, \"WorkDoneProgressCreateRequest\", { enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgressCreateRequest; } });\nObject.defineProperty(exports, \"WorkDoneProgressCancelNotification\", { enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgressCancelNotification; } });\nconst protocol_callHierarchy_1 = require(\"./protocol.callHierarchy\");\nObject.defineProperty(exports, \"CallHierarchyIncomingCallsRequest\", { enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest; } });\nObject.defineProperty(exports, \"CallHierarchyOutgoingCallsRequest\", { enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest; } });\nObject.defineProperty(exports, \"CallHierarchyPrepareRequest\", { enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyPrepareRequest; } });\nconst protocol_semanticTokens_1 = require(\"./protocol.semanticTokens\");\nObject.defineProperty(exports, \"TokenFormat\", { enumerable: true, get: function () { return protocol_semanticTokens_1.TokenFormat; } });\nObject.defineProperty(exports, \"SemanticTokensRequest\", { enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRequest; } });\nObject.defineProperty(exports, \"SemanticTokensDeltaRequest\", { enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensDeltaRequest; } });\nObject.defineProperty(exports, \"SemanticTokensRangeRequest\", { enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRangeRequest; } });\nObject.defineProperty(exports, \"SemanticTokensRefreshRequest\", { enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRefreshRequest; } });\nObject.defineProperty(exports, \"SemanticTokensRegistrationType\", { enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRegistrationType; } });\nconst protocol_showDocument_1 = require(\"./protocol.showDocument\");\nObject.defineProperty(exports, \"ShowDocumentRequest\", { enumerable: true, get: function () { return protocol_showDocument_1.ShowDocumentRequest; } });\nconst protocol_linkedEditingRange_1 = require(\"./protocol.linkedEditingRange\");\nObject.defineProperty(exports, \"LinkedEditingRangeRequest\", { enumerable: true, get: function () { return protocol_linkedEditingRange_1.LinkedEditingRangeRequest; } });\nconst protocol_fileOperations_1 = require(\"./protocol.fileOperations\");\nObject.defineProperty(exports, \"FileOperationPatternKind\", { enumerable: true, get: function () { return protocol_fileOperations_1.FileOperationPatternKind; } });\nObject.defineProperty(exports, \"DidCreateFilesNotification\", { enumerable: true, get: function () { return protocol_fileOperations_1.DidCreateFilesNotification; } });\nObject.defineProperty(exports, \"WillCreateFilesRequest\", { enumerable: true, get: function () { return protocol_fileOperations_1.WillCreateFilesRequest; } });\nObject.defineProperty(exports, \"DidRenameFilesNotification\", { enumerable: true, get: function () { return protocol_fileOperations_1.DidRenameFilesNotification; } });\nObject.defineProperty(exports, \"WillRenameFilesRequest\", { enumerable: true, get: function () { return protocol_fileOperations_1.WillRenameFilesRequest; } });\nObject.defineProperty(exports, \"DidDeleteFilesNotification\", { enumerable: true, get: function () { return protocol_fileOperations_1.DidDeleteFilesNotification; } });\nObject.defineProperty(exports, \"WillDeleteFilesRequest\", { enumerable: true, get: function () { return protocol_fileOperations_1.WillDeleteFilesRequest; } });\nconst protocol_moniker_1 = require(\"./protocol.moniker\");\nObject.defineProperty(exports, \"UniquenessLevel\", { enumerable: true, get: function () { return protocol_moniker_1.UniquenessLevel; } });\nObject.defineProperty(exports, \"MonikerKind\", { enumerable: true, get: function () { return protocol_moniker_1.MonikerKind; } });\nObject.defineProperty(exports, \"MonikerRequest\", { enumerable: true, get: function () { return protocol_moniker_1.MonikerRequest; } });\nconst protocol_typeHierarchy_1 = require(\"./protocol.typeHierarchy\");\nObject.defineProperty(exports, \"TypeHierarchyPrepareRequest\", { enumerable: true, get: function () { return protocol_typeHierarchy_1.TypeHierarchyPrepareRequest; } });\nObject.defineProperty(exports, \"TypeHierarchySubtypesRequest\", { enumerable: true, get: function () { return protocol_typeHierarchy_1.TypeHierarchySubtypesRequest; } });\nObject.defineProperty(exports, \"TypeHierarchySupertypesRequest\", { enumerable: true, get: function () { return protocol_typeHierarchy_1.TypeHierarchySupertypesRequest; } });\nconst protocol_inlineValue_1 = require(\"./protocol.inlineValue\");\nObject.defineProperty(exports, \"InlineValueRequest\", { enumerable: true, get: function () { return protocol_inlineValue_1.InlineValueRequest; } });\nObject.defineProperty(exports, \"InlineValueRefreshRequest\", { enumerable: true, get: function () { return protocol_inlineValue_1.InlineValueRefreshRequest; } });\nconst protocol_inlayHint_1 = require(\"./protocol.inlayHint\");\nObject.defineProperty(exports, \"InlayHintRequest\", { enumerable: true, get: function () { return protocol_inlayHint_1.InlayHintRequest; } });\nObject.defineProperty(exports, \"InlayHintResolveRequest\", { enumerable: true, get: function () { return protocol_inlayHint_1.InlayHintResolveRequest; } });\nObject.defineProperty(exports, \"InlayHintRefreshRequest\", { enumerable: true, get: function () { return protocol_inlayHint_1.InlayHintRefreshRequest; } });\nconst protocol_diagnostic_1 = require(\"./protocol.diagnostic\");\nObject.defineProperty(exports, \"DiagnosticServerCancellationData\", { enumerable: true, get: function () { return protocol_diagnostic_1.DiagnosticServerCancellationData; } });\nObject.defineProperty(exports, \"DocumentDiagnosticReportKind\", { enumerable: true, get: function () { return protocol_diagnostic_1.DocumentDiagnosticReportKind; } });\nObject.defineProperty(exports, \"DocumentDiagnosticRequest\", { enumerable: true, get: function () { return protocol_diagnostic_1.DocumentDiagnosticRequest; } });\nObject.defineProperty(exports, \"WorkspaceDiagnosticRequest\", { enumerable: true, get: function () { return protocol_diagnostic_1.WorkspaceDiagnosticRequest; } });\nObject.defineProperty(exports, \"DiagnosticRefreshRequest\", { enumerable: true, get: function () { return protocol_diagnostic_1.DiagnosticRefreshRequest; } });\nconst protocol_notebook_1 = require(\"./protocol.notebook\");\nObject.defineProperty(exports, \"NotebookCellKind\", { enumerable: true, get: function () { return protocol_notebook_1.NotebookCellKind; } });\nObject.defineProperty(exports, \"ExecutionSummary\", { enumerable: true, get: function () { return protocol_notebook_1.ExecutionSummary; } });\nObject.defineProperty(exports, \"NotebookCell\", { enumerable: true, get: function () { return protocol_notebook_1.NotebookCell; } });\nObject.defineProperty(exports, \"NotebookDocument\", { enumerable: true, get: function () { return protocol_notebook_1.NotebookDocument; } });\nObject.defineProperty(exports, \"NotebookDocumentSyncRegistrationType\", { enumerable: true, get: function () { return protocol_notebook_1.NotebookDocumentSyncRegistrationType; } });\nObject.defineProperty(exports, \"DidOpenNotebookDocumentNotification\", { enumerable: true, get: function () { return protocol_notebook_1.DidOpenNotebookDocumentNotification; } });\nObject.defineProperty(exports, \"NotebookCellArrayChange\", { enumerable: true, get: function () { return protocol_notebook_1.NotebookCellArrayChange; } });\nObject.defineProperty(exports, \"DidChangeNotebookDocumentNotification\", { enumerable: true, get: function () { return protocol_notebook_1.DidChangeNotebookDocumentNotification; } });\nObject.defineProperty(exports, \"DidSaveNotebookDocumentNotification\", { enumerable: true, get: function () { return protocol_notebook_1.DidSaveNotebookDocumentNotification; } });\nObject.defineProperty(exports, \"DidCloseNotebookDocumentNotification\", { enumerable: true, get: function () { return protocol_notebook_1.DidCloseNotebookDocumentNotification; } });\nconst protocol_inlineCompletion_1 = require(\"./protocol.inlineCompletion\");\nObject.defineProperty(exports, \"InlineCompletionRequest\", { enumerable: true, get: function () { return protocol_inlineCompletion_1.InlineCompletionRequest; } });\n// @ts-ignore: to avoid inlining LocationLink as dynamic import\nlet __noDynamicImport;\n/**\n * The TextDocumentFilter namespace provides helper functions to work with\n * {@link TextDocumentFilter} literals.\n *\n * @since 3.17.0\n */\nvar TextDocumentFilter;\n(function (TextDocumentFilter) {\n    function is(value) {\n        const candidate = value;\n        return Is.string(candidate) || (Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern));\n    }\n    TextDocumentFilter.is = is;\n})(TextDocumentFilter || (exports.TextDocumentFilter = TextDocumentFilter = {}));\n/**\n * The NotebookDocumentFilter namespace provides helper functions to work with\n * {@link NotebookDocumentFilter} literals.\n *\n * @since 3.17.0\n */\nvar NotebookDocumentFilter;\n(function (NotebookDocumentFilter) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && (Is.string(candidate.notebookType) || Is.string(candidate.scheme) || Is.string(candidate.pattern));\n    }\n    NotebookDocumentFilter.is = is;\n})(NotebookDocumentFilter || (exports.NotebookDocumentFilter = NotebookDocumentFilter = {}));\n/**\n * The NotebookCellTextDocumentFilter namespace provides helper functions to work with\n * {@link NotebookCellTextDocumentFilter} literals.\n *\n * @since 3.17.0\n */\nvar NotebookCellTextDocumentFilter;\n(function (NotebookCellTextDocumentFilter) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate)\n            && (Is.string(candidate.notebook) || NotebookDocumentFilter.is(candidate.notebook))\n            && (candidate.language === undefined || Is.string(candidate.language));\n    }\n    NotebookCellTextDocumentFilter.is = is;\n})(NotebookCellTextDocumentFilter || (exports.NotebookCellTextDocumentFilter = NotebookCellTextDocumentFilter = {}));\n/**\n * The DocumentSelector namespace provides helper functions to work with\n * {@link DocumentSelector}s.\n */\nvar DocumentSelector;\n(function (DocumentSelector) {\n    function is(value) {\n        if (!Array.isArray(value)) {\n            return false;\n        }\n        for (let elem of value) {\n            if (!Is.string(elem) && !TextDocumentFilter.is(elem) && !NotebookCellTextDocumentFilter.is(elem)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    DocumentSelector.is = is;\n})(DocumentSelector || (exports.DocumentSelector = DocumentSelector = {}));\n/**\n * The `client/registerCapability` request is sent from the server to the client to register a new capability\n * handler on the client side.\n */\nvar RegistrationRequest;\n(function (RegistrationRequest) {\n    RegistrationRequest.method = 'client/registerCapability';\n    RegistrationRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    RegistrationRequest.type = new messages_1.ProtocolRequestType(RegistrationRequest.method);\n})(RegistrationRequest || (exports.RegistrationRequest = RegistrationRequest = {}));\n/**\n * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability\n * handler on the client side.\n */\nvar UnregistrationRequest;\n(function (UnregistrationRequest) {\n    UnregistrationRequest.method = 'client/unregisterCapability';\n    UnregistrationRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    UnregistrationRequest.type = new messages_1.ProtocolRequestType(UnregistrationRequest.method);\n})(UnregistrationRequest || (exports.UnregistrationRequest = UnregistrationRequest = {}));\nvar ResourceOperationKind;\n(function (ResourceOperationKind) {\n    /**\n     * Supports creating new files and folders.\n     */\n    ResourceOperationKind.Create = 'create';\n    /**\n     * Supports renaming existing files and folders.\n     */\n    ResourceOperationKind.Rename = 'rename';\n    /**\n     * Supports deleting existing files and folders.\n     */\n    ResourceOperationKind.Delete = 'delete';\n})(ResourceOperationKind || (exports.ResourceOperationKind = ResourceOperationKind = {}));\nvar FailureHandlingKind;\n(function (FailureHandlingKind) {\n    /**\n     * Applying the workspace change is simply aborted if one of the changes provided\n     * fails. All operations executed before the failing operation stay executed.\n     */\n    FailureHandlingKind.Abort = 'abort';\n    /**\n     * All operations are executed transactional. That means they either all\n     * succeed or no changes at all are applied to the workspace.\n     */\n    FailureHandlingKind.Transactional = 'transactional';\n    /**\n     * If the workspace edit contains only textual file changes they are executed transactional.\n     * If resource changes (create, rename or delete file) are part of the change the failure\n     * handling strategy is abort.\n     */\n    FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';\n    /**\n     * The client tries to undo the operations already executed. But there is no\n     * guarantee that this is succeeding.\n     */\n    FailureHandlingKind.Undo = 'undo';\n})(FailureHandlingKind || (exports.FailureHandlingKind = FailureHandlingKind = {}));\n/**\n * A set of predefined position encoding kinds.\n *\n * @since 3.17.0\n */\nvar PositionEncodingKind;\n(function (PositionEncodingKind) {\n    /**\n     * Character offsets count UTF-8 code units (e.g. bytes).\n     */\n    PositionEncodingKind.UTF8 = 'utf-8';\n    /**\n     * Character offsets count UTF-16 code units.\n     *\n     * This is the default and must always be supported\n     * by servers\n     */\n    PositionEncodingKind.UTF16 = 'utf-16';\n    /**\n     * Character offsets count UTF-32 code units.\n     *\n     * Implementation note: these are the same as Unicode codepoints,\n     * so this `PositionEncodingKind` may also be used for an\n     * encoding-agnostic representation of character offsets.\n     */\n    PositionEncodingKind.UTF32 = 'utf-32';\n})(PositionEncodingKind || (exports.PositionEncodingKind = PositionEncodingKind = {}));\n/**\n * The StaticRegistrationOptions namespace provides helper functions to work with\n * {@link StaticRegistrationOptions} literals.\n */\nvar StaticRegistrationOptions;\n(function (StaticRegistrationOptions) {\n    function hasId(value) {\n        const candidate = value;\n        return candidate && Is.string(candidate.id) && candidate.id.length > 0;\n    }\n    StaticRegistrationOptions.hasId = hasId;\n})(StaticRegistrationOptions || (exports.StaticRegistrationOptions = StaticRegistrationOptions = {}));\n/**\n * The TextDocumentRegistrationOptions namespace provides helper functions to work with\n * {@link TextDocumentRegistrationOptions} literals.\n */\nvar TextDocumentRegistrationOptions;\n(function (TextDocumentRegistrationOptions) {\n    function is(value) {\n        const candidate = value;\n        return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));\n    }\n    TextDocumentRegistrationOptions.is = is;\n})(TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = TextDocumentRegistrationOptions = {}));\n/**\n * The WorkDoneProgressOptions namespace provides helper functions to work with\n * {@link WorkDoneProgressOptions} literals.\n */\nvar WorkDoneProgressOptions;\n(function (WorkDoneProgressOptions) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));\n    }\n    WorkDoneProgressOptions.is = is;\n    function hasWorkDoneProgress(value) {\n        const candidate = value;\n        return candidate && Is.boolean(candidate.workDoneProgress);\n    }\n    WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;\n})(WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = WorkDoneProgressOptions = {}));\n/**\n * The initialize request is sent from the client to the server.\n * It is sent once as the request after starting up the server.\n * The requests parameter is of type {@link InitializeParams}\n * the response if of type {@link InitializeResult} of a Thenable that\n * resolves to such.\n */\nvar InitializeRequest;\n(function (InitializeRequest) {\n    InitializeRequest.method = 'initialize';\n    InitializeRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    InitializeRequest.type = new messages_1.ProtocolRequestType(InitializeRequest.method);\n})(InitializeRequest || (exports.InitializeRequest = InitializeRequest = {}));\n/**\n * Known error codes for an `InitializeErrorCodes`;\n */\nvar InitializeErrorCodes;\n(function (InitializeErrorCodes) {\n    /**\n     * If the protocol version provided by the client can't be handled by the server.\n     *\n     * @deprecated This initialize error got replaced by client capabilities. There is\n     * no version handshake in version 3.0x\n     */\n    InitializeErrorCodes.unknownProtocolVersion = 1;\n})(InitializeErrorCodes || (exports.InitializeErrorCodes = InitializeErrorCodes = {}));\n/**\n * The initialized notification is sent from the client to the\n * server after the client is fully initialized and the server\n * is allowed to send requests from the server to the client.\n */\nvar InitializedNotification;\n(function (InitializedNotification) {\n    InitializedNotification.method = 'initialized';\n    InitializedNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    InitializedNotification.type = new messages_1.ProtocolNotificationType(InitializedNotification.method);\n})(InitializedNotification || (exports.InitializedNotification = InitializedNotification = {}));\n//---- Shutdown Method ----\n/**\n * A shutdown request is sent from the client to the server.\n * It is sent once when the client decides to shutdown the\n * server. The only notification that is sent after a shutdown request\n * is the exit event.\n */\nvar ShutdownRequest;\n(function (ShutdownRequest) {\n    ShutdownRequest.method = 'shutdown';\n    ShutdownRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    ShutdownRequest.type = new messages_1.ProtocolRequestType0(ShutdownRequest.method);\n})(ShutdownRequest || (exports.ShutdownRequest = ShutdownRequest = {}));\n//---- Exit Notification ----\n/**\n * The exit event is sent from the client to the server to\n * ask the server to exit its process.\n */\nvar ExitNotification;\n(function (ExitNotification) {\n    ExitNotification.method = 'exit';\n    ExitNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    ExitNotification.type = new messages_1.ProtocolNotificationType0(ExitNotification.method);\n})(ExitNotification || (exports.ExitNotification = ExitNotification = {}));\n/**\n * The configuration change notification is sent from the client to the server\n * when the client's configuration has changed. The notification contains\n * the changed configuration as defined by the language client.\n */\nvar DidChangeConfigurationNotification;\n(function (DidChangeConfigurationNotification) {\n    DidChangeConfigurationNotification.method = 'workspace/didChangeConfiguration';\n    DidChangeConfigurationNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType(DidChangeConfigurationNotification.method);\n})(DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = DidChangeConfigurationNotification = {}));\n//---- Message show and log notifications ----\n/**\n * The message type\n */\nvar MessageType;\n(function (MessageType) {\n    /**\n     * An error message.\n     */\n    MessageType.Error = 1;\n    /**\n     * A warning message.\n     */\n    MessageType.Warning = 2;\n    /**\n     * An information message.\n     */\n    MessageType.Info = 3;\n    /**\n     * A log message.\n     */\n    MessageType.Log = 4;\n    /**\n     * A debug message.\n     *\n     * @since 3.18.0\n     */\n    MessageType.Debug = 5;\n})(MessageType || (exports.MessageType = MessageType = {}));\n/**\n * The show message notification is sent from a server to a client to ask\n * the client to display a particular message in the user interface.\n */\nvar ShowMessageNotification;\n(function (ShowMessageNotification) {\n    ShowMessageNotification.method = 'window/showMessage';\n    ShowMessageNotification.messageDirection = messages_1.MessageDirection.serverToClient;\n    ShowMessageNotification.type = new messages_1.ProtocolNotificationType(ShowMessageNotification.method);\n})(ShowMessageNotification || (exports.ShowMessageNotification = ShowMessageNotification = {}));\n/**\n * The show message request is sent from the server to the client to show a message\n * and a set of options actions to the user.\n */\nvar ShowMessageRequest;\n(function (ShowMessageRequest) {\n    ShowMessageRequest.method = 'window/showMessageRequest';\n    ShowMessageRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    ShowMessageRequest.type = new messages_1.ProtocolRequestType(ShowMessageRequest.method);\n})(ShowMessageRequest || (exports.ShowMessageRequest = ShowMessageRequest = {}));\n/**\n * The log message notification is sent from the server to the client to ask\n * the client to log a particular message.\n */\nvar LogMessageNotification;\n(function (LogMessageNotification) {\n    LogMessageNotification.method = 'window/logMessage';\n    LogMessageNotification.messageDirection = messages_1.MessageDirection.serverToClient;\n    LogMessageNotification.type = new messages_1.ProtocolNotificationType(LogMessageNotification.method);\n})(LogMessageNotification || (exports.LogMessageNotification = LogMessageNotification = {}));\n//---- Telemetry notification\n/**\n * The telemetry event notification is sent from the server to the client to ask\n * the client to log telemetry data.\n */\nvar TelemetryEventNotification;\n(function (TelemetryEventNotification) {\n    TelemetryEventNotification.method = 'telemetry/event';\n    TelemetryEventNotification.messageDirection = messages_1.MessageDirection.serverToClient;\n    TelemetryEventNotification.type = new messages_1.ProtocolNotificationType(TelemetryEventNotification.method);\n})(TelemetryEventNotification || (exports.TelemetryEventNotification = TelemetryEventNotification = {}));\n/**\n * Defines how the host (editor) should sync\n * document changes to the language server.\n */\nvar TextDocumentSyncKind;\n(function (TextDocumentSyncKind) {\n    /**\n     * Documents should not be synced at all.\n     */\n    TextDocumentSyncKind.None = 0;\n    /**\n     * Documents are synced by always sending the full content\n     * of the document.\n     */\n    TextDocumentSyncKind.Full = 1;\n    /**\n     * Documents are synced by sending the full content on open.\n     * After that only incremental updates to the document are\n     * send.\n     */\n    TextDocumentSyncKind.Incremental = 2;\n})(TextDocumentSyncKind || (exports.TextDocumentSyncKind = TextDocumentSyncKind = {}));\n/**\n * The document open notification is sent from the client to the server to signal\n * newly opened text documents. The document's truth is now managed by the client\n * and the server must not try to read the document's truth using the document's\n * uri. Open in this sense means it is managed by the client. It doesn't necessarily\n * mean that its content is presented in an editor. An open notification must not\n * be sent more than once without a corresponding close notification send before.\n * This means open and close notification must be balanced and the max open count\n * is one.\n */\nvar DidOpenTextDocumentNotification;\n(function (DidOpenTextDocumentNotification) {\n    DidOpenTextDocumentNotification.method = 'textDocument/didOpen';\n    DidOpenTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);\n})(DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = DidOpenTextDocumentNotification = {}));\nvar TextDocumentContentChangeEvent;\n(function (TextDocumentContentChangeEvent) {\n    /**\n     * Checks whether the information describes a delta event.\n     */\n    function isIncremental(event) {\n        let 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    TextDocumentContentChangeEvent.isIncremental = isIncremental;\n    /**\n     * Checks whether the information describes a full replacement event.\n     */\n    function isFull(event) {\n        let candidate = event;\n        return candidate !== undefined && candidate !== null &&\n            typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n    }\n    TextDocumentContentChangeEvent.isFull = isFull;\n})(TextDocumentContentChangeEvent || (exports.TextDocumentContentChangeEvent = TextDocumentContentChangeEvent = {}));\n/**\n * The document change notification is sent from the client to the server to signal\n * changes to a text document.\n */\nvar DidChangeTextDocumentNotification;\n(function (DidChangeTextDocumentNotification) {\n    DidChangeTextDocumentNotification.method = 'textDocument/didChange';\n    DidChangeTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);\n})(DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = DidChangeTextDocumentNotification = {}));\n/**\n * The document close notification is sent from the client to the server when\n * the document got closed in the client. The document's truth now exists where\n * the document's uri points to (e.g. if the document's uri is a file uri the\n * truth now exists on disk). As with the open notification the close notification\n * is about managing the document's content. Receiving a close notification\n * doesn't mean that the document was open in an editor before. A close\n * notification requires a previous open notification to be sent.\n */\nvar DidCloseTextDocumentNotification;\n(function (DidCloseTextDocumentNotification) {\n    DidCloseTextDocumentNotification.method = 'textDocument/didClose';\n    DidCloseTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);\n})(DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = DidCloseTextDocumentNotification = {}));\n/**\n * The document save notification is sent from the client to the server when\n * the document got saved in the client.\n */\nvar DidSaveTextDocumentNotification;\n(function (DidSaveTextDocumentNotification) {\n    DidSaveTextDocumentNotification.method = 'textDocument/didSave';\n    DidSaveTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);\n})(DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = DidSaveTextDocumentNotification = {}));\n/**\n * Represents reasons why a text document is saved.\n */\nvar TextDocumentSaveReason;\n(function (TextDocumentSaveReason) {\n    /**\n     * Manually triggered, e.g. by the user pressing save, by starting debugging,\n     * or by an API call.\n     */\n    TextDocumentSaveReason.Manual = 1;\n    /**\n     * Automatic after a delay.\n     */\n    TextDocumentSaveReason.AfterDelay = 2;\n    /**\n     * When the editor lost focus.\n     */\n    TextDocumentSaveReason.FocusOut = 3;\n})(TextDocumentSaveReason || (exports.TextDocumentSaveReason = TextDocumentSaveReason = {}));\n/**\n * A document will save notification is sent from the client to the server before\n * the document is actually saved.\n */\nvar WillSaveTextDocumentNotification;\n(function (WillSaveTextDocumentNotification) {\n    WillSaveTextDocumentNotification.method = 'textDocument/willSave';\n    WillSaveTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);\n})(WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = WillSaveTextDocumentNotification = {}));\n/**\n * A document will save request is sent from the client to the server before\n * the document is actually saved. The request can return an array of TextEdits\n * which will be applied to the text document before it is saved. Please note that\n * clients might drop results if computing the text edits took too long or if a\n * server constantly fails on this request. This is done to keep the save fast and\n * reliable.\n */\nvar WillSaveTextDocumentWaitUntilRequest;\n(function (WillSaveTextDocumentWaitUntilRequest) {\n    WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';\n    WillSaveTextDocumentWaitUntilRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);\n})(WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = WillSaveTextDocumentWaitUntilRequest = {}));\n/**\n * The watched files notification is sent from the client to the server when\n * the client detects changes to file watched by the language client.\n */\nvar DidChangeWatchedFilesNotification;\n(function (DidChangeWatchedFilesNotification) {\n    DidChangeWatchedFilesNotification.method = 'workspace/didChangeWatchedFiles';\n    DidChangeWatchedFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;\n    DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType(DidChangeWatchedFilesNotification.method);\n})(DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = DidChangeWatchedFilesNotification = {}));\n/**\n * The file event type\n */\nvar FileChangeType;\n(function (FileChangeType) {\n    /**\n     * The file got created.\n     */\n    FileChangeType.Created = 1;\n    /**\n     * The file got changed.\n     */\n    FileChangeType.Changed = 2;\n    /**\n     * The file got deleted.\n     */\n    FileChangeType.Deleted = 3;\n})(FileChangeType || (exports.FileChangeType = FileChangeType = {}));\nvar RelativePattern;\n(function (RelativePattern) {\n    function is(value) {\n        const candidate = value;\n        return Is.objectLiteral(candidate) && (vscode_languageserver_types_1.URI.is(candidate.baseUri) || vscode_languageserver_types_1.WorkspaceFolder.is(candidate.baseUri)) && Is.string(candidate.pattern);\n    }\n    RelativePattern.is = is;\n})(RelativePattern || (exports.RelativePattern = RelativePattern = {}));\nvar WatchKind;\n(function (WatchKind) {\n    /**\n     * Interested in create events.\n     */\n    WatchKind.Create = 1;\n    /**\n     * Interested in change events\n     */\n    WatchKind.Change = 2;\n    /**\n     * Interested in delete events\n     */\n    WatchKind.Delete = 4;\n})(WatchKind || (exports.WatchKind = WatchKind = {}));\n/**\n * Diagnostics notification are sent from the server to the client to signal\n * results of validation runs.\n */\nvar PublishDiagnosticsNotification;\n(function (PublishDiagnosticsNotification) {\n    PublishDiagnosticsNotification.method = 'textDocument/publishDiagnostics';\n    PublishDiagnosticsNotification.messageDirection = messages_1.MessageDirection.serverToClient;\n    PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType(PublishDiagnosticsNotification.method);\n})(PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = PublishDiagnosticsNotification = {}));\n/**\n * How a completion was triggered\n */\nvar CompletionTriggerKind;\n(function (CompletionTriggerKind) {\n    /**\n     * Completion was triggered by typing an identifier (24x7 code\n     * complete), manual invocation (e.g Ctrl+Space) or via API.\n     */\n    CompletionTriggerKind.Invoked = 1;\n    /**\n     * Completion was triggered by a trigger character specified by\n     * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.\n     */\n    CompletionTriggerKind.TriggerCharacter = 2;\n    /**\n     * Completion was re-triggered as current completion list is incomplete\n     */\n    CompletionTriggerKind.TriggerForIncompleteCompletions = 3;\n})(CompletionTriggerKind || (exports.CompletionTriggerKind = CompletionTriggerKind = {}));\n/**\n * Request to request completion at a given text document position. The request's\n * parameter is of type {@link TextDocumentPosition} the response\n * is of type {@link CompletionItem CompletionItem[]} or {@link CompletionList}\n * or a Thenable that resolves to such.\n *\n * The request can delay the computation of the {@link CompletionItem.detail `detail`}\n * and {@link CompletionItem.documentation `documentation`} properties to the `completionItem/resolve`\n * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,\n * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.\n */\nvar CompletionRequest;\n(function (CompletionRequest) {\n    CompletionRequest.method = 'textDocument/completion';\n    CompletionRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);\n})(CompletionRequest || (exports.CompletionRequest = CompletionRequest = {}));\n/**\n * Request to resolve additional information for a given completion item.The request's\n * parameter is of type {@link CompletionItem} the response\n * is of type {@link CompletionItem} or a Thenable that resolves to such.\n */\nvar CompletionResolveRequest;\n(function (CompletionResolveRequest) {\n    CompletionResolveRequest.method = 'completionItem/resolve';\n    CompletionResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);\n})(CompletionResolveRequest || (exports.CompletionResolveRequest = CompletionResolveRequest = {}));\n/**\n * Request to request hover information at a given text document position. The request's\n * parameter is of type {@link TextDocumentPosition} the response is of\n * type {@link Hover} or a Thenable that resolves to such.\n */\nvar HoverRequest;\n(function (HoverRequest) {\n    HoverRequest.method = 'textDocument/hover';\n    HoverRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);\n})(HoverRequest || (exports.HoverRequest = HoverRequest = {}));\n/**\n * How a signature help was triggered.\n *\n * @since 3.15.0\n */\nvar SignatureHelpTriggerKind;\n(function (SignatureHelpTriggerKind) {\n    /**\n     * Signature help was invoked manually by the user or by a command.\n     */\n    SignatureHelpTriggerKind.Invoked = 1;\n    /**\n     * Signature help was triggered by a trigger character.\n     */\n    SignatureHelpTriggerKind.TriggerCharacter = 2;\n    /**\n     * Signature help was triggered by the cursor moving or by the document content changing.\n     */\n    SignatureHelpTriggerKind.ContentChange = 3;\n})(SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {}));\nvar SignatureHelpRequest;\n(function (SignatureHelpRequest) {\n    SignatureHelpRequest.method = 'textDocument/signatureHelp';\n    SignatureHelpRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);\n})(SignatureHelpRequest || (exports.SignatureHelpRequest = SignatureHelpRequest = {}));\n/**\n * A request to resolve the definition location of a symbol at a given text\n * document position. The request's parameter is of type {@link TextDocumentPosition}\n * the response is of either type {@link Definition} or a typed array of\n * {@link DefinitionLink} or a Thenable that resolves to such.\n */\nvar DefinitionRequest;\n(function (DefinitionRequest) {\n    DefinitionRequest.method = 'textDocument/definition';\n    DefinitionRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);\n})(DefinitionRequest || (exports.DefinitionRequest = DefinitionRequest = {}));\n/**\n * A request to resolve project-wide references for the symbol denoted\n * by the given text document position. The request's parameter is of\n * type {@link ReferenceParams} the response is of type\n * {@link Location Location[]} or a Thenable that resolves to such.\n */\nvar ReferencesRequest;\n(function (ReferencesRequest) {\n    ReferencesRequest.method = 'textDocument/references';\n    ReferencesRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);\n})(ReferencesRequest || (exports.ReferencesRequest = ReferencesRequest = {}));\n/**\n * Request to resolve a {@link DocumentHighlight} for a given\n * text document position. The request's parameter is of type {@link TextDocumentPosition}\n * the request response is an array of type {@link DocumentHighlight}\n * or a Thenable that resolves to such.\n */\nvar DocumentHighlightRequest;\n(function (DocumentHighlightRequest) {\n    DocumentHighlightRequest.method = 'textDocument/documentHighlight';\n    DocumentHighlightRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);\n})(DocumentHighlightRequest || (exports.DocumentHighlightRequest = DocumentHighlightRequest = {}));\n/**\n * A request to list all symbols found in a given text document. The request's\n * parameter is of type {@link TextDocumentIdentifier} the\n * response is of type {@link SymbolInformation SymbolInformation[]} or a Thenable\n * that resolves to such.\n */\nvar DocumentSymbolRequest;\n(function (DocumentSymbolRequest) {\n    DocumentSymbolRequest.method = 'textDocument/documentSymbol';\n    DocumentSymbolRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);\n})(DocumentSymbolRequest || (exports.DocumentSymbolRequest = DocumentSymbolRequest = {}));\n/**\n * A request to provide commands for the given text document and range.\n */\nvar CodeActionRequest;\n(function (CodeActionRequest) {\n    CodeActionRequest.method = 'textDocument/codeAction';\n    CodeActionRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);\n})(CodeActionRequest || (exports.CodeActionRequest = CodeActionRequest = {}));\n/**\n * Request to resolve additional information for a given code action.The request's\n * parameter is of type {@link CodeAction} the response\n * is of type {@link CodeAction} or a Thenable that resolves to such.\n */\nvar CodeActionResolveRequest;\n(function (CodeActionResolveRequest) {\n    CodeActionResolveRequest.method = 'codeAction/resolve';\n    CodeActionResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CodeActionResolveRequest.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest.method);\n})(CodeActionResolveRequest || (exports.CodeActionResolveRequest = CodeActionResolveRequest = {}));\n/**\n * A request to list project-wide symbols matching the query string given\n * by the {@link WorkspaceSymbolParams}. The response is\n * of type {@link SymbolInformation SymbolInformation[]} or a Thenable that\n * resolves to such.\n *\n * @since 3.17.0 - support for WorkspaceSymbol in the returned data. Clients\n *  need to advertise support for WorkspaceSymbols via the client capability\n *  `workspace.symbol.resolveSupport`.\n *\n */\nvar WorkspaceSymbolRequest;\n(function (WorkspaceSymbolRequest) {\n    WorkspaceSymbolRequest.method = 'workspace/symbol';\n    WorkspaceSymbolRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);\n})(WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = WorkspaceSymbolRequest = {}));\n/**\n * A request to resolve the range inside the workspace\n * symbol's location.\n *\n * @since 3.17.0\n */\nvar WorkspaceSymbolResolveRequest;\n(function (WorkspaceSymbolResolveRequest) {\n    WorkspaceSymbolResolveRequest.method = 'workspaceSymbol/resolve';\n    WorkspaceSymbolResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    WorkspaceSymbolResolveRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolResolveRequest.method);\n})(WorkspaceSymbolResolveRequest || (exports.WorkspaceSymbolResolveRequest = WorkspaceSymbolResolveRequest = {}));\n/**\n * A request to provide code lens for the given text document.\n */\nvar CodeLensRequest;\n(function (CodeLensRequest) {\n    CodeLensRequest.method = 'textDocument/codeLens';\n    CodeLensRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CodeLensRequest.type = new messages_1.ProtocolRequestType(CodeLensRequest.method);\n})(CodeLensRequest || (exports.CodeLensRequest = CodeLensRequest = {}));\n/**\n * A request to resolve a command for a given code lens.\n */\nvar CodeLensResolveRequest;\n(function (CodeLensResolveRequest) {\n    CodeLensResolveRequest.method = 'codeLens/resolve';\n    CodeLensResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    CodeLensResolveRequest.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest.method);\n})(CodeLensResolveRequest || (exports.CodeLensResolveRequest = CodeLensResolveRequest = {}));\n/**\n * A request to refresh all code actions\n *\n * @since 3.16.0\n */\nvar CodeLensRefreshRequest;\n(function (CodeLensRefreshRequest) {\n    CodeLensRefreshRequest.method = `workspace/codeLens/refresh`;\n    CodeLensRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    CodeLensRefreshRequest.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest.method);\n})(CodeLensRefreshRequest || (exports.CodeLensRefreshRequest = CodeLensRefreshRequest = {}));\n/**\n * A request to provide document links\n */\nvar DocumentLinkRequest;\n(function (DocumentLinkRequest) {\n    DocumentLinkRequest.method = 'textDocument/documentLink';\n    DocumentLinkRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);\n})(DocumentLinkRequest || (exports.DocumentLinkRequest = DocumentLinkRequest = {}));\n/**\n * Request to resolve additional information for a given document link. The request's\n * parameter is of type {@link DocumentLink} the response\n * is of type {@link DocumentLink} or a Thenable that resolves to such.\n */\nvar DocumentLinkResolveRequest;\n(function (DocumentLinkResolveRequest) {\n    DocumentLinkResolveRequest.method = 'documentLink/resolve';\n    DocumentLinkResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest.method);\n})(DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = DocumentLinkResolveRequest = {}));\n/**\n * A request to format a whole document.\n */\nvar DocumentFormattingRequest;\n(function (DocumentFormattingRequest) {\n    DocumentFormattingRequest.method = 'textDocument/formatting';\n    DocumentFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);\n})(DocumentFormattingRequest || (exports.DocumentFormattingRequest = DocumentFormattingRequest = {}));\n/**\n * A request to format a range in a document.\n */\nvar DocumentRangeFormattingRequest;\n(function (DocumentRangeFormattingRequest) {\n    DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';\n    DocumentRangeFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);\n})(DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = DocumentRangeFormattingRequest = {}));\n/**\n * A request to format ranges in a document.\n *\n * @since 3.18.0\n * @proposed\n */\nvar DocumentRangesFormattingRequest;\n(function (DocumentRangesFormattingRequest) {\n    DocumentRangesFormattingRequest.method = 'textDocument/rangesFormatting';\n    DocumentRangesFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentRangesFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangesFormattingRequest.method);\n})(DocumentRangesFormattingRequest || (exports.DocumentRangesFormattingRequest = DocumentRangesFormattingRequest = {}));\n/**\n * A request to format a document on type.\n */\nvar DocumentOnTypeFormattingRequest;\n(function (DocumentOnTypeFormattingRequest) {\n    DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';\n    DocumentOnTypeFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);\n})(DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = DocumentOnTypeFormattingRequest = {}));\n//---- Rename ----------------------------------------------\nvar PrepareSupportDefaultBehavior;\n(function (PrepareSupportDefaultBehavior) {\n    /**\n     * The client's default behavior is to select the identifier\n     * according the to language's syntax rule.\n     */\n    PrepareSupportDefaultBehavior.Identifier = 1;\n})(PrepareSupportDefaultBehavior || (exports.PrepareSupportDefaultBehavior = PrepareSupportDefaultBehavior = {}));\n/**\n * A request to rename a symbol.\n */\nvar RenameRequest;\n(function (RenameRequest) {\n    RenameRequest.method = 'textDocument/rename';\n    RenameRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);\n})(RenameRequest || (exports.RenameRequest = RenameRequest = {}));\n/**\n * A request to test and perform the setup necessary for a rename.\n *\n * @since 3.16 - support for default behavior\n */\nvar PrepareRenameRequest;\n(function (PrepareRenameRequest) {\n    PrepareRenameRequest.method = 'textDocument/prepareRename';\n    PrepareRenameRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);\n})(PrepareRenameRequest || (exports.PrepareRenameRequest = PrepareRenameRequest = {}));\n/**\n * A request send from the client to the server to execute a command. The request might return\n * a workspace edit which the client will apply to the workspace.\n */\nvar ExecuteCommandRequest;\n(function (ExecuteCommandRequest) {\n    ExecuteCommandRequest.method = 'workspace/executeCommand';\n    ExecuteCommandRequest.messageDirection = messages_1.MessageDirection.clientToServer;\n    ExecuteCommandRequest.type = new messages_1.ProtocolRequestType(ExecuteCommandRequest.method);\n})(ExecuteCommandRequest || (exports.ExecuteCommandRequest = ExecuteCommandRequest = {}));\n/**\n * A request sent from the server to the client to modified certain resources.\n */\nvar ApplyWorkspaceEditRequest;\n(function (ApplyWorkspaceEditRequest) {\n    ApplyWorkspaceEditRequest.method = 'workspace/applyEdit';\n    ApplyWorkspaceEditRequest.messageDirection = messages_1.MessageDirection.serverToClient;\n    ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');\n})(ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = ApplyWorkspaceEditRequest = {}));\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.createProtocolConnection = void 0;\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\nfunction createProtocolConnection(input, output, logger, options) {\n    if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) {\n        options = { connectionStrategy: options };\n    }\n    return (0, vscode_jsonrpc_1.createMessageConnection)(input, output, logger, options);\n}\nexports.createProtocolConnection = createProtocolConnection;\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 * ------------------------------------------------------------------------------------------ */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LSPErrorCodes = exports.createProtocolConnection = void 0;\n__exportStar(require(\"vscode-jsonrpc\"), exports);\n__exportStar(require(\"vscode-languageserver-types\"), exports);\n__exportStar(require(\"./messages\"), exports);\n__exportStar(require(\"./protocol\"), exports);\nvar connection_1 = require(\"./connection\");\nObject.defineProperty(exports, \"createProtocolConnection\", { enumerable: true, get: function () { return connection_1.createProtocolConnection; } });\nvar LSPErrorCodes;\n(function (LSPErrorCodes) {\n    /**\n    * This is the start range of LSP reserved error codes.\n    * It doesn't denote a real error code.\n    *\n    * @since 3.16.0\n    */\n    LSPErrorCodes.lspReservedErrorRangeStart = -32899;\n    /**\n     * A request failed but it was syntactically correct, e.g the\n     * method name was known and the parameters were valid. The error\n     * message should contain human readable information about why\n     * the request failed.\n     *\n     * @since 3.17.0\n     */\n    LSPErrorCodes.RequestFailed = -32803;\n    /**\n     * The server cancelled the request. This error code should\n     * only be used for requests that explicitly support being\n     * server cancellable.\n     *\n     * @since 3.17.0\n     */\n    LSPErrorCodes.ServerCancelled = -32802;\n    /**\n     * The server detected that the content of a document got\n     * modified outside normal conditions. A server should\n     * NOT send this error code if it detects a content change\n     * in it unprocessed messages. The result even computed\n     * on an older state might still be useful for the client.\n     *\n     * If a client decides that a result is not of any use anymore\n     * the client should cancel the request.\n     */\n    LSPErrorCodes.ContentModified = -32801;\n    /**\n     * The client has canceled a request and a server as detected\n     * the cancel.\n     */\n    LSPErrorCodes.RequestCancelled = -32800;\n    /**\n    * This is the end range of LSP reserved error codes.\n    * It doesn't denote a real error code.\n    *\n    * @since 3.16.0\n    */\n    LSPErrorCodes.lspReservedErrorRangeEnd = -32800;\n})(LSPErrorCodes || (exports.LSPErrorCodes = LSPErrorCodes = {}));\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 * ------------------------------------------------------------------------------------------ */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createProtocolConnection = void 0;\nconst node_1 = require(\"vscode-jsonrpc/node\");\n__exportStar(require(\"vscode-jsonrpc/node\"), exports);\n__exportStar(require(\"../common/api\"), exports);\nfunction createProtocolConnection(input, output, logger, options) {\n    return (0, node_1.createMessageConnection)(input, output, logger, options);\n}\nexports.createProtocolConnection = createProtocolConnection;\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.forEach = exports.mapAsync = exports.map = exports.clearTestMode = exports.setTestMode = exports.Semaphore = exports.Delayer = void 0;\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nclass Delayer {\n    constructor(defaultDelay) {\n        this.defaultDelay = defaultDelay;\n        this.timeout = undefined;\n        this.completionPromise = undefined;\n        this.onSuccess = undefined;\n        this.task = undefined;\n    }\n    trigger(task, delay = this.defaultDelay) {\n        this.task = task;\n        if (delay >= 0) {\n            this.cancelTimeout();\n        }\n        if (!this.completionPromise) {\n            this.completionPromise = new Promise((resolve) => {\n                this.onSuccess = resolve;\n            }).then(() => {\n                this.completionPromise = undefined;\n                this.onSuccess = undefined;\n                var result = this.task();\n                this.task = undefined;\n                return result;\n            });\n        }\n        if (delay >= 0 || this.timeout === void 0) {\n            this.timeout = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {\n                this.timeout = undefined;\n                this.onSuccess(undefined);\n            }, delay >= 0 ? delay : this.defaultDelay);\n        }\n        return this.completionPromise;\n    }\n    forceDelivery() {\n        if (!this.completionPromise) {\n            return undefined;\n        }\n        this.cancelTimeout();\n        let result = this.task();\n        this.completionPromise = undefined;\n        this.onSuccess = undefined;\n        this.task = undefined;\n        return result;\n    }\n    isTriggered() {\n        return this.timeout !== undefined;\n    }\n    cancel() {\n        this.cancelTimeout();\n        this.completionPromise = undefined;\n    }\n    cancelTimeout() {\n        if (this.timeout !== undefined) {\n            this.timeout.dispose();\n            this.timeout = undefined;\n        }\n    }\n}\nexports.Delayer = Delayer;\nclass Semaphore {\n    constructor(capacity = 1) {\n        if (capacity <= 0) {\n            throw new Error('Capacity must be greater than 0');\n        }\n        this._capacity = capacity;\n        this._active = 0;\n        this._waiting = [];\n    }\n    lock(thunk) {\n        return new Promise((resolve, reject) => {\n            this._waiting.push({ thunk, resolve, reject });\n            this.runNext();\n        });\n    }\n    get active() {\n        return this._active;\n    }\n    runNext() {\n        if (this._waiting.length === 0 || this._active === this._capacity) {\n            return;\n        }\n        (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => this.doRunNext());\n    }\n    doRunNext() {\n        if (this._waiting.length === 0 || this._active === this._capacity) {\n            return;\n        }\n        const next = this._waiting.shift();\n        this._active++;\n        if (this._active > this._capacity) {\n            throw new Error(`To many thunks active`);\n        }\n        try {\n            const result = next.thunk();\n            if (result instanceof Promise) {\n                result.then((value) => {\n                    this._active--;\n                    next.resolve(value);\n                    this.runNext();\n                }, (err) => {\n                    this._active--;\n                    next.reject(err);\n                    this.runNext();\n                });\n            }\n            else {\n                this._active--;\n                next.resolve(result);\n                this.runNext();\n            }\n        }\n        catch (err) {\n            this._active--;\n            next.reject(err);\n            this.runNext();\n        }\n    }\n}\nexports.Semaphore = Semaphore;\nlet $test = false;\nfunction setTestMode() {\n    $test = true;\n}\nexports.setTestMode = setTestMode;\nfunction clearTestMode() {\n    $test = false;\n}\nexports.clearTestMode = clearTestMode;\nconst defaultYieldTimeout = 15 /*ms*/;\nclass Timer {\n    constructor(yieldAfter = defaultYieldTimeout) {\n        this.yieldAfter = $test === true ? Math.max(yieldAfter, 2) : Math.max(yieldAfter, defaultYieldTimeout);\n        this.startTime = Date.now();\n        this.counter = 0;\n        this.total = 0;\n        // start with a counter interval of 1.\n        this.counterInterval = 1;\n    }\n    start() {\n        this.counter = 0;\n        this.total = 0;\n        this.counterInterval = 1;\n        this.startTime = Date.now();\n    }\n    shouldYield() {\n        if (++this.counter >= this.counterInterval) {\n            const timeTaken = Date.now() - this.startTime;\n            const timeLeft = Math.max(0, this.yieldAfter - timeTaken);\n            this.total += this.counter;\n            this.counter = 0;\n            if (timeTaken >= this.yieldAfter || timeLeft <= 1) {\n                // Yield also if time left <= 1 since we compute the counter\n                // for max < 2 ms.\n                // Start with interval 1 again. We could do some calculation\n                // with using 80% of the last counter however other things (GC)\n                // affect the timing heavily since we have small timings (1 - 15ms).\n                this.counterInterval = 1;\n                this.total = 0;\n                return true;\n            }\n            else {\n                // Only increase the counter until we have spent <= 2 ms. Increasing\n                // the counter further is very fragile since timing is influenced\n                // by other things and can increase the counter too much. This will result\n                // that we yield in average after [14 - 16]ms.\n                switch (timeTaken) {\n                    case 0:\n                    case 1:\n                        this.counterInterval = this.total * 2;\n                        break;\n                }\n            }\n        }\n        return false;\n    }\n}\nasync function map(items, func, token, options) {\n    if (items.length === 0) {\n        return [];\n    }\n    const result = new Array(items.length);\n    const timer = new Timer(options?.yieldAfter);\n    function convertBatch(start) {\n        timer.start();\n        for (let i = start; i < items.length; i++) {\n            result[i] = func(items[i]);\n            if (timer.shouldYield()) {\n                options?.yieldCallback && options.yieldCallback();\n                return i + 1;\n            }\n        }\n        return -1;\n    }\n    // Convert the first batch sync on the same frame.\n    let index = convertBatch(0);\n    while (index !== -1) {\n        if (token !== undefined && token.isCancellationRequested) {\n            break;\n        }\n        index = await new Promise((resolve) => {\n            (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {\n                resolve(convertBatch(index));\n            });\n        });\n    }\n    return result;\n}\nexports.map = map;\nasync function mapAsync(items, func, token, options) {\n    if (items.length === 0) {\n        return [];\n    }\n    const result = new Array(items.length);\n    const timer = new Timer(options?.yieldAfter);\n    async function convertBatch(start) {\n        timer.start();\n        for (let i = start; i < items.length; i++) {\n            result[i] = await func(items[i], token);\n            if (timer.shouldYield()) {\n                options?.yieldCallback && options.yieldCallback();\n                return i + 1;\n            }\n        }\n        return -1;\n    }\n    let index = await convertBatch(0);\n    while (index !== -1) {\n        if (token !== undefined && token.isCancellationRequested) {\n            break;\n        }\n        index = await new Promise((resolve) => {\n            (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {\n                resolve(convertBatch(index));\n            });\n        });\n    }\n    return result;\n}\nexports.mapAsync = mapAsync;\nasync function forEach(items, func, token, options) {\n    if (items.length === 0) {\n        return;\n    }\n    const timer = new Timer(options?.yieldAfter);\n    function runBatch(start) {\n        timer.start();\n        for (let i = start; i < items.length; i++) {\n            func(items[i]);\n            if (timer.shouldYield()) {\n                options?.yieldCallback && options.yieldCallback();\n                return i + 1;\n            }\n        }\n        return -1;\n    }\n    // Convert the first batch sync on the same frame.\n    let index = runBatch(0);\n    while (index !== -1) {\n        if (token !== undefined && token.isCancellationRequested) {\n            break;\n        }\n        index = await new Promise((resolve) => {\n            (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {\n                resolve(runBatch(index));\n            });\n        });\n    }\n}\nexports.forEach = forEach;\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 });\nconst code = require(\"vscode\");\nclass ProtocolCompletionItem extends code.CompletionItem {\n    constructor(label) {\n        super(label);\n    }\n}\nexports.default = ProtocolCompletionItem;\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 });\nconst code = require(\"vscode\");\nclass ProtocolCodeLens extends code.CodeLens {\n    constructor(range) {\n        super(range);\n    }\n}\nexports.default = ProtocolCodeLens;\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 });\nconst code = require(\"vscode\");\nclass ProtocolDocumentLink extends code.DocumentLink {\n    constructor(range, target) {\n        super(range, target);\n    }\n}\nexports.default = ProtocolDocumentLink;\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 });\nconst vscode = require(\"vscode\");\nclass ProtocolCodeAction extends vscode.CodeAction {\n    constructor(title, data) {\n        super(title);\n        this.data = data;\n    }\n}\nexports.default = ProtocolCodeAction;\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.ProtocolDiagnostic = exports.DiagnosticCode = void 0;\nconst vscode = require(\"vscode\");\nconst Is = require(\"./utils/is\");\nvar DiagnosticCode;\n(function (DiagnosticCode) {\n    function is(value) {\n        const candidate = value;\n        return candidate !== undefined && candidate !== null && (Is.number(candidate.value) || Is.string(candidate.value)) && Is.string(candidate.target);\n    }\n    DiagnosticCode.is = is;\n})(DiagnosticCode || (exports.DiagnosticCode = DiagnosticCode = {}));\nclass ProtocolDiagnostic extends vscode.Diagnostic {\n    constructor(range, message, severity, data) {\n        super(range, message, severity);\n        this.data = data;\n        this.hasDiagnosticCode = false;\n    }\n}\nexports.ProtocolDiagnostic = ProtocolDiagnostic;\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 });\nconst code = require(\"vscode\");\nclass ProtocolCallHierarchyItem extends code.CallHierarchyItem {\n    constructor(kind, name, detail, uri, range, selectionRange, data) {\n        super(kind, name, detail, uri, range, selectionRange);\n        if (data !== undefined) {\n            this.data = data;\n        }\n    }\n}\nexports.default = ProtocolCallHierarchyItem;\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 });\nconst code = require(\"vscode\");\nclass ProtocolTypeHierarchyItem extends code.TypeHierarchyItem {\n    constructor(kind, name, detail, uri, range, selectionRange, data) {\n        super(kind, name, detail, uri, range, selectionRange);\n        if (data !== undefined) {\n            this.data = data;\n        }\n    }\n}\nexports.default = ProtocolTypeHierarchyItem;\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 });\nconst code = require(\"vscode\");\nclass WorkspaceSymbol extends code.SymbolInformation {\n    constructor(name, kind, containerName, locationOrUri, data) {\n        const hasRange = !(locationOrUri instanceof code.Uri);\n        super(name, kind, containerName, hasRange ? locationOrUri : new code.Location(locationOrUri, new code.Range(0, 0, 0, 0)));\n        this.hasRange = hasRange;\n        if (data !== undefined) {\n            this.data = data;\n        }\n    }\n}\nexports.default = WorkspaceSymbol;\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 });\nconst code = require(\"vscode\");\nclass ProtocolInlayHint extends code.InlayHint {\n    constructor(position, label, kind) {\n        super(position, label, kind);\n    }\n}\nexports.default = ProtocolInlayHint;\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.createConverter = void 0;\nconst code = require(\"vscode\");\nconst proto = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst async = require(\"./utils/async\");\nconst protocolCompletionItem_1 = require(\"./protocolCompletionItem\");\nconst protocolCodeLens_1 = require(\"./protocolCodeLens\");\nconst protocolDocumentLink_1 = require(\"./protocolDocumentLink\");\nconst protocolCodeAction_1 = require(\"./protocolCodeAction\");\nconst protocolDiagnostic_1 = require(\"./protocolDiagnostic\");\nconst protocolCallHierarchyItem_1 = require(\"./protocolCallHierarchyItem\");\nconst protocolTypeHierarchyItem_1 = require(\"./protocolTypeHierarchyItem\");\nconst protocolWorkspaceSymbol_1 = require(\"./protocolWorkspaceSymbol\");\nconst protocolInlayHint_1 = require(\"./protocolInlayHint\");\nvar InsertReplaceRange;\n(function (InsertReplaceRange) {\n    function is(value) {\n        const candidate = value;\n        return candidate && !!candidate.inserting && !!candidate.replacing;\n    }\n    InsertReplaceRange.is = is;\n})(InsertReplaceRange || (InsertReplaceRange = {}));\nfunction createConverter(uriConverter) {\n    const nullConverter = (value) => value.toString();\n    const _uriConverter = uriConverter || nullConverter;\n    function asUri(value) {\n        return _uriConverter(value);\n    }\n    function asTextDocumentIdentifier(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri)\n        };\n    }\n    function asTextDocumentItem(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri),\n            languageId: textDocument.languageId,\n            version: textDocument.version,\n            text: textDocument.getText()\n        };\n    }\n    function asVersionedTextDocumentIdentifier(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri),\n            version: textDocument.version\n        };\n    }\n    function asOpenTextDocumentParams(textDocument) {\n        return {\n            textDocument: asTextDocumentItem(textDocument)\n        };\n    }\n    function isTextDocumentChangeEvent(value) {\n        const candidate = value;\n        return !!candidate.document && !!candidate.contentChanges;\n    }\n    function isTextDocument(value) {\n        const candidate = value;\n        return !!candidate.uri && !!candidate.version;\n    }\n    function asChangeTextDocumentParams(arg0, arg1, arg2) {\n        if (isTextDocument(arg0)) {\n            const result = {\n                textDocument: {\n                    uri: _uriConverter(arg0.uri),\n                    version: arg0.version\n                },\n                contentChanges: [{ text: arg0.getText() }]\n            };\n            return result;\n        }\n        else if (isTextDocumentChangeEvent(arg0)) {\n            const uri = arg1;\n            const version = arg2;\n            const result = {\n                textDocument: {\n                    uri: _uriConverter(uri),\n                    version: version\n                },\n                contentChanges: arg0.contentChanges.map((change) => {\n                    const range = change.range;\n                    return {\n                        range: {\n                            start: { line: range.start.line, character: range.start.character },\n                            end: { line: range.end.line, character: range.end.character }\n                        },\n                        rangeLength: change.rangeLength,\n                        text: change.text\n                    };\n                })\n            };\n            return result;\n        }\n        else {\n            throw Error('Unsupported text document change parameter');\n        }\n    }\n    function asCloseTextDocumentParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asSaveTextDocumentParams(textDocument, includeContent = false) {\n        let result = {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n        if (includeContent) {\n            result.text = textDocument.getText();\n        }\n        return result;\n    }\n    function asTextDocumentSaveReason(reason) {\n        switch (reason) {\n            case code.TextDocumentSaveReason.Manual:\n                return proto.TextDocumentSaveReason.Manual;\n            case code.TextDocumentSaveReason.AfterDelay:\n                return proto.TextDocumentSaveReason.AfterDelay;\n            case code.TextDocumentSaveReason.FocusOut:\n                return proto.TextDocumentSaveReason.FocusOut;\n        }\n        return proto.TextDocumentSaveReason.Manual;\n    }\n    function asWillSaveTextDocumentParams(event) {\n        return {\n            textDocument: asTextDocumentIdentifier(event.document),\n            reason: asTextDocumentSaveReason(event.reason)\n        };\n    }\n    function asDidCreateFilesParams(event) {\n        return {\n            files: event.files.map((fileUri) => ({\n                uri: _uriConverter(fileUri),\n            })),\n        };\n    }\n    function asDidRenameFilesParams(event) {\n        return {\n            files: event.files.map((file) => ({\n                oldUri: _uriConverter(file.oldUri),\n                newUri: _uriConverter(file.newUri),\n            })),\n        };\n    }\n    function asDidDeleteFilesParams(event) {\n        return {\n            files: event.files.map((fileUri) => ({\n                uri: _uriConverter(fileUri),\n            })),\n        };\n    }\n    function asWillCreateFilesParams(event) {\n        return {\n            files: event.files.map((fileUri) => ({\n                uri: _uriConverter(fileUri),\n            })),\n        };\n    }\n    function asWillRenameFilesParams(event) {\n        return {\n            files: event.files.map((file) => ({\n                oldUri: _uriConverter(file.oldUri),\n                newUri: _uriConverter(file.newUri),\n            })),\n        };\n    }\n    function asWillDeleteFilesParams(event) {\n        return {\n            files: event.files.map((fileUri) => ({\n                uri: _uriConverter(fileUri),\n            })),\n        };\n    }\n    function asTextDocumentPositionParams(textDocument, position) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position)\n        };\n    }\n    function asCompletionTriggerKind(triggerKind) {\n        switch (triggerKind) {\n            case code.CompletionTriggerKind.TriggerCharacter:\n                return proto.CompletionTriggerKind.TriggerCharacter;\n            case code.CompletionTriggerKind.TriggerForIncompleteCompletions:\n                return proto.CompletionTriggerKind.TriggerForIncompleteCompletions;\n            default:\n                return proto.CompletionTriggerKind.Invoked;\n        }\n    }\n    function asCompletionParams(textDocument, position, context) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: {\n                triggerKind: asCompletionTriggerKind(context.triggerKind),\n                triggerCharacter: context.triggerCharacter\n            }\n        };\n    }\n    function asSignatureHelpTriggerKind(triggerKind) {\n        switch (triggerKind) {\n            case code.SignatureHelpTriggerKind.Invoke:\n                return proto.SignatureHelpTriggerKind.Invoked;\n            case code.SignatureHelpTriggerKind.TriggerCharacter:\n                return proto.SignatureHelpTriggerKind.TriggerCharacter;\n            case code.SignatureHelpTriggerKind.ContentChange:\n                return proto.SignatureHelpTriggerKind.ContentChange;\n        }\n    }\n    function asParameterInformation(value) {\n        // We leave the documentation out on purpose since it usually adds no\n        // value for the server.\n        return {\n            label: value.label\n        };\n    }\n    function asParameterInformations(values) {\n        return values.map(asParameterInformation);\n    }\n    function asSignatureInformation(value) {\n        // We leave the documentation out on purpose since it usually adds no\n        // value for the server.\n        return {\n            label: value.label,\n            parameters: asParameterInformations(value.parameters)\n        };\n    }\n    function asSignatureInformations(values) {\n        return values.map(asSignatureInformation);\n    }\n    function asSignatureHelp(value) {\n        if (value === undefined) {\n            return value;\n        }\n        return {\n            signatures: asSignatureInformations(value.signatures),\n            activeSignature: value.activeSignature,\n            activeParameter: value.activeParameter\n        };\n    }\n    function asSignatureHelpParams(textDocument, position, context) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: {\n                isRetrigger: context.isRetrigger,\n                triggerCharacter: context.triggerCharacter,\n                triggerKind: asSignatureHelpTriggerKind(context.triggerKind),\n                activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp)\n            }\n        };\n    }\n    function asWorkerPosition(position) {\n        return { line: position.line, character: position.character };\n    }\n    function asPosition(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return { line: value.line > proto.uinteger.MAX_VALUE ? proto.uinteger.MAX_VALUE : value.line, character: value.character > proto.uinteger.MAX_VALUE ? proto.uinteger.MAX_VALUE : value.character };\n    }\n    function asPositions(values, token) {\n        return async.map(values, asPosition, token);\n    }\n    function asPositionsSync(values) {\n        return values.map(asPosition);\n    }\n    function asRange(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return { start: asPosition(value.start), end: asPosition(value.end) };\n    }\n    function asRanges(values) {\n        return values.map(asRange);\n    }\n    function asLocation(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return proto.Location.create(asUri(value.uri), asRange(value.range));\n    }\n    function asDiagnosticSeverity(value) {\n        switch (value) {\n            case code.DiagnosticSeverity.Error:\n                return proto.DiagnosticSeverity.Error;\n            case code.DiagnosticSeverity.Warning:\n                return proto.DiagnosticSeverity.Warning;\n            case code.DiagnosticSeverity.Information:\n                return proto.DiagnosticSeverity.Information;\n            case code.DiagnosticSeverity.Hint:\n                return proto.DiagnosticSeverity.Hint;\n        }\n    }\n    function asDiagnosticTags(tags) {\n        if (!tags) {\n            return undefined;\n        }\n        let result = [];\n        for (let tag of tags) {\n            let converted = asDiagnosticTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length > 0 ? result : undefined;\n    }\n    function asDiagnosticTag(tag) {\n        switch (tag) {\n            case code.DiagnosticTag.Unnecessary:\n                return proto.DiagnosticTag.Unnecessary;\n            case code.DiagnosticTag.Deprecated:\n                return proto.DiagnosticTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asRelatedInformation(item) {\n        return {\n            message: item.message,\n            location: asLocation(item.location)\n        };\n    }\n    function asRelatedInformations(items) {\n        return items.map(asRelatedInformation);\n    }\n    function asDiagnosticCode(value) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        if (Is.number(value) || Is.string(value)) {\n            return value;\n        }\n        return { value: value.value, target: asUri(value.target) };\n    }\n    function asDiagnostic(item) {\n        const result = proto.Diagnostic.create(asRange(item.range), item.message);\n        const protocolDiagnostic = item instanceof protocolDiagnostic_1.ProtocolDiagnostic ? item : undefined;\n        if (protocolDiagnostic !== undefined && protocolDiagnostic.data !== undefined) {\n            result.data = protocolDiagnostic.data;\n        }\n        const code = asDiagnosticCode(item.code);\n        if (protocolDiagnostic_1.DiagnosticCode.is(code)) {\n            if (protocolDiagnostic !== undefined && protocolDiagnostic.hasDiagnosticCode) {\n                result.code = code;\n            }\n            else {\n                result.code = code.value;\n                result.codeDescription = { href: code.target };\n            }\n        }\n        else {\n            result.code = code;\n        }\n        if (Is.number(item.severity)) {\n            result.severity = asDiagnosticSeverity(item.severity);\n        }\n        if (Array.isArray(item.tags)) {\n            result.tags = asDiagnosticTags(item.tags);\n        }\n        if (item.relatedInformation) {\n            result.relatedInformation = asRelatedInformations(item.relatedInformation);\n        }\n        if (item.source) {\n            result.source = item.source;\n        }\n        return result;\n    }\n    function asDiagnostics(items, token) {\n        if (items === undefined || items === null) {\n            return items;\n        }\n        return async.map(items, asDiagnostic, token);\n    }\n    function asDiagnosticsSync(items) {\n        if (items === undefined || items === null) {\n            return items;\n        }\n        return items.map(asDiagnostic);\n    }\n    function asDocumentation(format, documentation) {\n        switch (format) {\n            case '$string':\n                return documentation;\n            case proto.MarkupKind.PlainText:\n                return { kind: format, value: documentation };\n            case proto.MarkupKind.Markdown:\n                return { kind: format, value: documentation.value };\n            default:\n                return `Unsupported Markup content received. Kind is: ${format}`;\n        }\n    }\n    function asCompletionItemTag(tag) {\n        switch (tag) {\n            case code.CompletionItemTag.Deprecated:\n                return proto.CompletionItemTag.Deprecated;\n        }\n        return undefined;\n    }\n    function asCompletionItemTags(tags) {\n        if (tags === undefined) {\n            return tags;\n        }\n        const result = [];\n        for (let tag of tags) {\n            const converted = asCompletionItemTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result;\n    }\n    function asCompletionItemKind(value, original) {\n        if (original !== undefined) {\n            return original;\n        }\n        return value + 1;\n    }\n    function asCompletionItem(item, labelDetailsSupport = false) {\n        let label;\n        let labelDetails;\n        if (Is.string(item.label)) {\n            label = item.label;\n        }\n        else {\n            label = item.label.label;\n            if (labelDetailsSupport && (item.label.detail !== undefined || item.label.description !== undefined)) {\n                labelDetails = { detail: item.label.detail, description: item.label.description };\n            }\n        }\n        let result = { label: label };\n        if (labelDetails !== undefined) {\n            result.labelDetails = labelDetails;\n        }\n        let protocolItem = item instanceof protocolCompletionItem_1.default ? item : undefined;\n        if (item.detail) {\n            result.detail = item.detail;\n        }\n        // We only send items back we created. So this can't be something else than\n        // a string right now.\n        if (item.documentation) {\n            if (!protocolItem || protocolItem.documentationFormat === '$string') {\n                result.documentation = item.documentation;\n            }\n            else {\n                result.documentation = asDocumentation(protocolItem.documentationFormat, item.documentation);\n            }\n        }\n        if (item.filterText) {\n            result.filterText = item.filterText;\n        }\n        fillPrimaryInsertText(result, item);\n        if (Is.number(item.kind)) {\n            result.kind = asCompletionItemKind(item.kind, protocolItem && protocolItem.originalItemKind);\n        }\n        if (item.sortText) {\n            result.sortText = item.sortText;\n        }\n        if (item.additionalTextEdits) {\n            result.additionalTextEdits = asTextEdits(item.additionalTextEdits);\n        }\n        if (item.commitCharacters) {\n            result.commitCharacters = item.commitCharacters.slice();\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.preselect === true || item.preselect === false) {\n            result.preselect = item.preselect;\n        }\n        const tags = asCompletionItemTags(item.tags);\n        if (protocolItem) {\n            if (protocolItem.data !== undefined) {\n                result.data = protocolItem.data;\n            }\n            if (protocolItem.deprecated === true || protocolItem.deprecated === false) {\n                if (protocolItem.deprecated === true && tags !== undefined && tags.length > 0) {\n                    const index = tags.indexOf(code.CompletionItemTag.Deprecated);\n                    if (index !== -1) {\n                        tags.splice(index, 1);\n                    }\n                }\n                result.deprecated = protocolItem.deprecated;\n            }\n            if (protocolItem.insertTextMode !== undefined) {\n                result.insertTextMode = protocolItem.insertTextMode;\n            }\n        }\n        if (tags !== undefined && tags.length > 0) {\n            result.tags = tags;\n        }\n        if (result.insertTextMode === undefined && item.keepWhitespace === true) {\n            result.insertTextMode = proto.InsertTextMode.adjustIndentation;\n        }\n        return result;\n    }\n    function fillPrimaryInsertText(target, source) {\n        let format = proto.InsertTextFormat.PlainText;\n        let text = undefined;\n        let range = undefined;\n        if (source.textEdit) {\n            text = source.textEdit.newText;\n            range = source.textEdit.range;\n        }\n        else if (source.insertText instanceof code.SnippetString) {\n            format = proto.InsertTextFormat.Snippet;\n            text = source.insertText.value;\n        }\n        else {\n            text = source.insertText;\n        }\n        if (source.range) {\n            range = source.range;\n        }\n        target.insertTextFormat = format;\n        if (source.fromEdit && text !== undefined && range !== undefined) {\n            target.textEdit = asCompletionTextEdit(text, range);\n        }\n        else {\n            target.insertText = text;\n        }\n    }\n    function asCompletionTextEdit(newText, range) {\n        if (InsertReplaceRange.is(range)) {\n            return proto.InsertReplaceEdit.create(newText, asRange(range.inserting), asRange(range.replacing));\n        }\n        else {\n            return { newText, range: asRange(range) };\n        }\n    }\n    function asTextEdit(edit) {\n        return { range: asRange(edit.range), newText: edit.newText };\n    }\n    function asTextEdits(edits) {\n        if (edits === undefined || edits === null) {\n            return edits;\n        }\n        return edits.map(asTextEdit);\n    }\n    function asSymbolKind(item) {\n        if (item <= code.SymbolKind.TypeParameter) {\n            // Symbol kind is one based in the protocol and zero based in code.\n            return (item + 1);\n        }\n        return proto.SymbolKind.Property;\n    }\n    function asSymbolTag(item) {\n        return item;\n    }\n    function asSymbolTags(items) {\n        return items.map(asSymbolTag);\n    }\n    function asReferenceParams(textDocument, position, options) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: { includeDeclaration: options.includeDeclaration }\n        };\n    }\n    async function asCodeAction(item, token) {\n        let result = proto.CodeAction.create(item.title);\n        if (item instanceof protocolCodeAction_1.default && item.data !== undefined) {\n            result.data = item.data;\n        }\n        if (item.kind !== undefined) {\n            result.kind = asCodeActionKind(item.kind);\n        }\n        if (item.diagnostics !== undefined) {\n            result.diagnostics = await asDiagnostics(item.diagnostics, token);\n        }\n        if (item.edit !== undefined) {\n            throw new Error(`VS Code code actions can only be converted to a protocol code action without an edit.`);\n        }\n        if (item.command !== undefined) {\n            result.command = asCommand(item.command);\n        }\n        if (item.isPreferred !== undefined) {\n            result.isPreferred = item.isPreferred;\n        }\n        if (item.disabled !== undefined) {\n            result.disabled = { reason: item.disabled.reason };\n        }\n        return result;\n    }\n    function asCodeActionSync(item) {\n        let result = proto.CodeAction.create(item.title);\n        if (item instanceof protocolCodeAction_1.default && item.data !== undefined) {\n            result.data = item.data;\n        }\n        if (item.kind !== undefined) {\n            result.kind = asCodeActionKind(item.kind);\n        }\n        if (item.diagnostics !== undefined) {\n            result.diagnostics = asDiagnosticsSync(item.diagnostics);\n        }\n        if (item.edit !== undefined) {\n            throw new Error(`VS Code code actions can only be converted to a protocol code action without an edit.`);\n        }\n        if (item.command !== undefined) {\n            result.command = asCommand(item.command);\n        }\n        if (item.isPreferred !== undefined) {\n            result.isPreferred = item.isPreferred;\n        }\n        if (item.disabled !== undefined) {\n            result.disabled = { reason: item.disabled.reason };\n        }\n        return result;\n    }\n    async function asCodeActionContext(context, token) {\n        if (context === undefined || context === null) {\n            return context;\n        }\n        let only;\n        if (context.only && Is.string(context.only.value)) {\n            only = [context.only.value];\n        }\n        return proto.CodeActionContext.create(await asDiagnostics(context.diagnostics, token), only, asCodeActionTriggerKind(context.triggerKind));\n    }\n    function asCodeActionContextSync(context) {\n        if (context === undefined || context === null) {\n            return context;\n        }\n        let only;\n        if (context.only && Is.string(context.only.value)) {\n            only = [context.only.value];\n        }\n        return proto.CodeActionContext.create(asDiagnosticsSync(context.diagnostics), only, asCodeActionTriggerKind(context.triggerKind));\n    }\n    function asCodeActionTriggerKind(kind) {\n        switch (kind) {\n            case code.CodeActionTriggerKind.Invoke:\n                return proto.CodeActionTriggerKind.Invoked;\n            case code.CodeActionTriggerKind.Automatic:\n                return proto.CodeActionTriggerKind.Automatic;\n            default:\n                return undefined;\n        }\n    }\n    function asCodeActionKind(item) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        return item.value;\n    }\n    function asInlineValueContext(context) {\n        if (context === undefined || context === null) {\n            return context;\n        }\n        return proto.InlineValueContext.create(context.frameId, asRange(context.stoppedLocation));\n    }\n    function asInlineCompletionParams(document, position, context) {\n        return { context: proto.InlineCompletionContext.create(context.triggerKind, context.selectedCompletionInfo),\n            textDocument: asTextDocumentIdentifier(document), position: asPosition(position) };\n    }\n    function asCommand(item) {\n        let result = proto.Command.create(item.title, item.command);\n        if (item.arguments) {\n            result.arguments = item.arguments;\n        }\n        return result;\n    }\n    function asCodeLens(item) {\n        let result = proto.CodeLens.create(asRange(item.range));\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item instanceof protocolCodeLens_1.default) {\n            if (item.data) {\n                result.data = item.data;\n            }\n        }\n        return result;\n    }\n    function asFormattingOptions(options, fileOptions) {\n        const result = { tabSize: options.tabSize, insertSpaces: options.insertSpaces };\n        if (fileOptions.trimTrailingWhitespace) {\n            result.trimTrailingWhitespace = true;\n        }\n        if (fileOptions.trimFinalNewlines) {\n            result.trimFinalNewlines = true;\n        }\n        if (fileOptions.insertFinalNewline) {\n            result.insertFinalNewline = true;\n        }\n        return result;\n    }\n    function asDocumentSymbolParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asCodeLensParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asDocumentLink(item) {\n        let result = proto.DocumentLink.create(asRange(item.range));\n        if (item.target) {\n            result.target = asUri(item.target);\n        }\n        if (item.tooltip !== undefined) {\n            result.tooltip = item.tooltip;\n        }\n        let protocolItem = item instanceof protocolDocumentLink_1.default ? item : undefined;\n        if (protocolItem && protocolItem.data) {\n            result.data = protocolItem.data;\n        }\n        return result;\n    }\n    function asDocumentLinkParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asCallHierarchyItem(value) {\n        const result = {\n            name: value.name,\n            kind: asSymbolKind(value.kind),\n            uri: asUri(value.uri),\n            range: asRange(value.range),\n            selectionRange: asRange(value.selectionRange)\n        };\n        if (value.detail !== undefined && value.detail.length > 0) {\n            result.detail = value.detail;\n        }\n        if (value.tags !== undefined) {\n            result.tags = asSymbolTags(value.tags);\n        }\n        if (value instanceof protocolCallHierarchyItem_1.default && value.data !== undefined) {\n            result.data = value.data;\n        }\n        return result;\n    }\n    function asTypeHierarchyItem(value) {\n        const result = {\n            name: value.name,\n            kind: asSymbolKind(value.kind),\n            uri: asUri(value.uri),\n            range: asRange(value.range),\n            selectionRange: asRange(value.selectionRange),\n        };\n        if (value.detail !== undefined && value.detail.length > 0) {\n            result.detail = value.detail;\n        }\n        if (value.tags !== undefined) {\n            result.tags = asSymbolTags(value.tags);\n        }\n        if (value instanceof protocolTypeHierarchyItem_1.default && value.data !== undefined) {\n            result.data = value.data;\n        }\n        return result;\n    }\n    function asWorkspaceSymbol(item) {\n        const result = item instanceof protocolWorkspaceSymbol_1.default\n            ? { name: item.name, kind: asSymbolKind(item.kind), location: item.hasRange ? asLocation(item.location) : { uri: _uriConverter(item.location.uri) }, data: item.data }\n            : { name: item.name, kind: asSymbolKind(item.kind), location: asLocation(item.location) };\n        if (item.tags !== undefined) {\n            result.tags = asSymbolTags(item.tags);\n        }\n        if (item.containerName !== '') {\n            result.containerName = item.containerName;\n        }\n        return result;\n    }\n    function asInlayHint(item) {\n        const label = typeof item.label === 'string'\n            ? item.label\n            : item.label.map(asInlayHintLabelPart);\n        const result = proto.InlayHint.create(asPosition(item.position), label);\n        if (item.kind !== undefined) {\n            result.kind = item.kind;\n        }\n        if (item.textEdits !== undefined) {\n            result.textEdits = asTextEdits(item.textEdits);\n        }\n        if (item.tooltip !== undefined) {\n            result.tooltip = asTooltip(item.tooltip);\n        }\n        if (item.paddingLeft !== undefined) {\n            result.paddingLeft = item.paddingLeft;\n        }\n        if (item.paddingRight !== undefined) {\n            result.paddingRight = item.paddingRight;\n        }\n        if (item instanceof protocolInlayHint_1.default && item.data !== undefined) {\n            result.data = item.data;\n        }\n        return result;\n    }\n    function asInlayHintLabelPart(item) {\n        const result = proto.InlayHintLabelPart.create(item.value);\n        if (item.location !== undefined) {\n            result.location = asLocation(item.location);\n        }\n        if (item.command !== undefined) {\n            result.command = asCommand(item.command);\n        }\n        if (item.tooltip !== undefined) {\n            result.tooltip = asTooltip(item.tooltip);\n        }\n        return result;\n    }\n    function asTooltip(value) {\n        if (typeof value === 'string') {\n            return value;\n        }\n        const result = {\n            kind: proto.MarkupKind.Markdown,\n            value: value.value\n        };\n        return result;\n    }\n    return {\n        asUri,\n        asTextDocumentIdentifier,\n        asTextDocumentItem,\n        asVersionedTextDocumentIdentifier,\n        asOpenTextDocumentParams,\n        asChangeTextDocumentParams,\n        asCloseTextDocumentParams,\n        asSaveTextDocumentParams,\n        asWillSaveTextDocumentParams,\n        asDidCreateFilesParams,\n        asDidRenameFilesParams,\n        asDidDeleteFilesParams,\n        asWillCreateFilesParams,\n        asWillRenameFilesParams,\n        asWillDeleteFilesParams,\n        asTextDocumentPositionParams,\n        asCompletionParams,\n        asSignatureHelpParams,\n        asWorkerPosition,\n        asRange,\n        asRanges,\n        asPosition,\n        asPositions,\n        asPositionsSync,\n        asLocation,\n        asDiagnosticSeverity,\n        asDiagnosticTag,\n        asDiagnostic,\n        asDiagnostics,\n        asDiagnosticsSync,\n        asCompletionItem,\n        asTextEdit,\n        asSymbolKind,\n        asSymbolTag,\n        asSymbolTags,\n        asReferenceParams,\n        asCodeAction,\n        asCodeActionSync,\n        asCodeActionContext,\n        asCodeActionContextSync,\n        asInlineValueContext,\n        asCommand,\n        asCodeLens,\n        asFormattingOptions,\n        asDocumentSymbolParams,\n        asCodeLensParams,\n        asDocumentLink,\n        asDocumentLinkParams,\n        asCallHierarchyItem,\n        asTypeHierarchyItem,\n        asInlayHint,\n        asWorkspaceSymbol,\n        asInlineCompletionParams\n    };\n}\nexports.createConverter = createConverter;\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.createConverter = void 0;\nconst code = require(\"vscode\");\nconst ls = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst async = require(\"./utils/async\");\nconst protocolCompletionItem_1 = require(\"./protocolCompletionItem\");\nconst protocolCodeLens_1 = require(\"./protocolCodeLens\");\nconst protocolDocumentLink_1 = require(\"./protocolDocumentLink\");\nconst protocolCodeAction_1 = require(\"./protocolCodeAction\");\nconst protocolDiagnostic_1 = require(\"./protocolDiagnostic\");\nconst protocolCallHierarchyItem_1 = require(\"./protocolCallHierarchyItem\");\nconst protocolTypeHierarchyItem_1 = require(\"./protocolTypeHierarchyItem\");\nconst protocolWorkspaceSymbol_1 = require(\"./protocolWorkspaceSymbol\");\nconst protocolInlayHint_1 = require(\"./protocolInlayHint\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nvar CodeBlock;\n(function (CodeBlock) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.string(candidate.language) && Is.string(candidate.value);\n    }\n    CodeBlock.is = is;\n})(CodeBlock || (CodeBlock = {}));\nfunction createConverter(uriConverter, trustMarkdown, supportHtml) {\n    const nullConverter = (value) => code.Uri.parse(value);\n    const _uriConverter = uriConverter || nullConverter;\n    function asUri(value) {\n        return _uriConverter(value);\n    }\n    function asDocumentSelector(selector) {\n        const result = [];\n        for (const filter of selector) {\n            if (typeof filter === 'string') {\n                result.push(filter);\n            }\n            else if (vscode_languageserver_protocol_1.NotebookCellTextDocumentFilter.is(filter)) {\n                // We first need to check for the notebook cell filter since a TextDocumentFilter would\n                // match both (e.g. the notebook is optional).\n                if (typeof filter.notebook === 'string') {\n                    result.push({ notebookType: filter.notebook, language: filter.language });\n                }\n                else {\n                    const notebookType = filter.notebook.notebookType ?? '*';\n                    result.push({ notebookType: notebookType, scheme: filter.notebook.scheme, pattern: filter.notebook.pattern, language: filter.language });\n                }\n            }\n            else if (vscode_languageserver_protocol_1.TextDocumentFilter.is(filter)) {\n                result.push({ language: filter.language, scheme: filter.scheme, pattern: filter.pattern });\n            }\n        }\n        return result;\n    }\n    async function asDiagnostics(diagnostics, token) {\n        return async.map(diagnostics, asDiagnostic, token);\n    }\n    function asDiagnosticsSync(diagnostics) {\n        const result = new Array(diagnostics.length);\n        for (let i = 0; i < diagnostics.length; i++) {\n            result[i] = asDiagnostic(diagnostics[i]);\n        }\n        return result;\n    }\n    function asDiagnostic(diagnostic) {\n        let result = new protocolDiagnostic_1.ProtocolDiagnostic(asRange(diagnostic.range), diagnostic.message, asDiagnosticSeverity(diagnostic.severity), diagnostic.data);\n        if (diagnostic.code !== undefined) {\n            if (typeof diagnostic.code === 'string' || typeof diagnostic.code === 'number') {\n                if (ls.CodeDescription.is(diagnostic.codeDescription)) {\n                    result.code = {\n                        value: diagnostic.code,\n                        target: asUri(diagnostic.codeDescription.href)\n                    };\n                }\n                else {\n                    result.code = diagnostic.code;\n                }\n            }\n            else if (protocolDiagnostic_1.DiagnosticCode.is(diagnostic.code)) {\n                // This is for backwards compatibility of a proposed API.\n                // We should remove this at some point.\n                result.hasDiagnosticCode = true;\n                const diagnosticCode = diagnostic.code;\n                result.code = {\n                    value: diagnosticCode.value,\n                    target: asUri(diagnosticCode.target)\n                };\n            }\n        }\n        if (diagnostic.source) {\n            result.source = diagnostic.source;\n        }\n        if (diagnostic.relatedInformation) {\n            result.relatedInformation = asRelatedInformation(diagnostic.relatedInformation);\n        }\n        if (Array.isArray(diagnostic.tags)) {\n            result.tags = asDiagnosticTags(diagnostic.tags);\n        }\n        return result;\n    }\n    function asRelatedInformation(relatedInformation) {\n        const result = new Array(relatedInformation.length);\n        for (let i = 0; i < relatedInformation.length; i++) {\n            const info = relatedInformation[i];\n            result[i] = new code.DiagnosticRelatedInformation(asLocation(info.location), info.message);\n        }\n        return result;\n    }\n    function asDiagnosticTags(tags) {\n        if (!tags) {\n            return undefined;\n        }\n        let result = [];\n        for (let tag of tags) {\n            let converted = asDiagnosticTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length > 0 ? result : undefined;\n    }\n    function asDiagnosticTag(tag) {\n        switch (tag) {\n            case ls.DiagnosticTag.Unnecessary:\n                return code.DiagnosticTag.Unnecessary;\n            case ls.DiagnosticTag.Deprecated:\n                return code.DiagnosticTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asPosition(value) {\n        return value ? new code.Position(value.line, value.character) : undefined;\n    }\n    function asRange(value) {\n        return value ? new code.Range(value.start.line, value.start.character, value.end.line, value.end.character) : undefined;\n    }\n    async function asRanges(items, token) {\n        return async.map(items, (range) => {\n            return new code.Range(range.start.line, range.start.character, range.end.line, range.end.character);\n        }, token);\n    }\n    function asDiagnosticSeverity(value) {\n        if (value === undefined || value === null) {\n            return code.DiagnosticSeverity.Error;\n        }\n        switch (value) {\n            case ls.DiagnosticSeverity.Error:\n                return code.DiagnosticSeverity.Error;\n            case ls.DiagnosticSeverity.Warning:\n                return code.DiagnosticSeverity.Warning;\n            case ls.DiagnosticSeverity.Information:\n                return code.DiagnosticSeverity.Information;\n            case ls.DiagnosticSeverity.Hint:\n                return code.DiagnosticSeverity.Hint;\n        }\n        return code.DiagnosticSeverity.Error;\n    }\n    function asHoverContent(value) {\n        if (Is.string(value)) {\n            return asMarkdownString(value);\n        }\n        else if (CodeBlock.is(value)) {\n            let result = asMarkdownString();\n            return result.appendCodeblock(value.value, value.language);\n        }\n        else if (Array.isArray(value)) {\n            let result = [];\n            for (let element of value) {\n                let item = asMarkdownString();\n                if (CodeBlock.is(element)) {\n                    item.appendCodeblock(element.value, element.language);\n                }\n                else {\n                    item.appendMarkdown(element);\n                }\n                result.push(item);\n            }\n            return result;\n        }\n        else {\n            return asMarkdownString(value);\n        }\n    }\n    function asDocumentation(value) {\n        if (Is.string(value)) {\n            return value;\n        }\n        else {\n            switch (value.kind) {\n                case ls.MarkupKind.Markdown:\n                    return asMarkdownString(value.value);\n                case ls.MarkupKind.PlainText:\n                    return value.value;\n                default:\n                    return `Unsupported Markup content received. Kind is: ${value.kind}`;\n            }\n        }\n    }\n    function asMarkdownString(value) {\n        let result;\n        if (value === undefined || typeof value === 'string') {\n            result = new code.MarkdownString(value);\n        }\n        else {\n            switch (value.kind) {\n                case ls.MarkupKind.Markdown:\n                    result = new code.MarkdownString(value.value);\n                    break;\n                case ls.MarkupKind.PlainText:\n                    result = new code.MarkdownString();\n                    result.appendText(value.value);\n                    break;\n                default:\n                    result = new code.MarkdownString();\n                    result.appendText(`Unsupported Markup content received. Kind is: ${value.kind}`);\n                    break;\n            }\n        }\n        result.isTrusted = trustMarkdown;\n        result.supportHtml = supportHtml;\n        return result;\n    }\n    function asHover(hover) {\n        if (!hover) {\n            return undefined;\n        }\n        return new code.Hover(asHoverContent(hover.contents), asRange(hover.range));\n    }\n    async function asCompletionResult(value, allCommitCharacters, token) {\n        if (!value) {\n            return undefined;\n        }\n        if (Array.isArray(value)) {\n            return async.map(value, (item) => asCompletionItem(item, allCommitCharacters), token);\n        }\n        const list = value;\n        const { defaultRange, commitCharacters } = getCompletionItemDefaults(list, allCommitCharacters);\n        const converted = await async.map(list.items, (item) => {\n            return asCompletionItem(item, commitCharacters, defaultRange, list.itemDefaults?.insertTextMode, list.itemDefaults?.insertTextFormat, list.itemDefaults?.data);\n        }, token);\n        return new code.CompletionList(converted, list.isIncomplete);\n    }\n    function getCompletionItemDefaults(list, allCommitCharacters) {\n        const rangeDefaults = list.itemDefaults?.editRange;\n        const commitCharacters = list.itemDefaults?.commitCharacters ?? allCommitCharacters;\n        return ls.Range.is(rangeDefaults)\n            ? { defaultRange: asRange(rangeDefaults), commitCharacters }\n            : rangeDefaults !== undefined\n                ? { defaultRange: { inserting: asRange(rangeDefaults.insert), replacing: asRange(rangeDefaults.replace) }, commitCharacters }\n                : { defaultRange: undefined, commitCharacters };\n    }\n    function asCompletionItemKind(value) {\n        // Protocol item kind is 1 based, codes item kind is zero based.\n        if (ls.CompletionItemKind.Text <= value && value <= ls.CompletionItemKind.TypeParameter) {\n            return [value - 1, undefined];\n        }\n        return [code.CompletionItemKind.Text, value];\n    }\n    function asCompletionItemTag(tag) {\n        switch (tag) {\n            case ls.CompletionItemTag.Deprecated:\n                return code.CompletionItemTag.Deprecated;\n        }\n        return undefined;\n    }\n    function asCompletionItemTags(tags) {\n        if (tags === undefined || tags === null) {\n            return [];\n        }\n        const result = [];\n        for (const tag of tags) {\n            const converted = asCompletionItemTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result;\n    }\n    function asCompletionItem(item, defaultCommitCharacters, defaultRange, defaultInsertTextMode, defaultInsertTextFormat, defaultData) {\n        const tags = asCompletionItemTags(item.tags);\n        const label = asCompletionItemLabel(item);\n        const result = new protocolCompletionItem_1.default(label);\n        if (item.detail) {\n            result.detail = item.detail;\n        }\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n            result.documentationFormat = Is.string(item.documentation) ? '$string' : item.documentation.kind;\n        }\n        if (item.filterText) {\n            result.filterText = item.filterText;\n        }\n        const insertText = asCompletionInsertText(item, defaultRange, defaultInsertTextFormat);\n        if (insertText) {\n            result.insertText = insertText.text;\n            result.range = insertText.range;\n            result.fromEdit = insertText.fromEdit;\n        }\n        if (Is.number(item.kind)) {\n            let [itemKind, original] = asCompletionItemKind(item.kind);\n            result.kind = itemKind;\n            if (original) {\n                result.originalItemKind = original;\n            }\n        }\n        if (item.sortText) {\n            result.sortText = item.sortText;\n        }\n        if (item.additionalTextEdits) {\n            result.additionalTextEdits = asTextEditsSync(item.additionalTextEdits);\n        }\n        const commitCharacters = item.commitCharacters !== undefined\n            ? Is.stringArray(item.commitCharacters) ? item.commitCharacters : undefined\n            : defaultCommitCharacters;\n        if (commitCharacters) {\n            result.commitCharacters = commitCharacters.slice();\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.deprecated === true || item.deprecated === false) {\n            result.deprecated = item.deprecated;\n            if (item.deprecated === true) {\n                tags.push(code.CompletionItemTag.Deprecated);\n            }\n        }\n        if (item.preselect === true || item.preselect === false) {\n            result.preselect = item.preselect;\n        }\n        const data = item.data ?? defaultData;\n        if (data !== undefined) {\n            result.data = data;\n        }\n        if (tags.length > 0) {\n            result.tags = tags;\n        }\n        const insertTextMode = item.insertTextMode ?? defaultInsertTextMode;\n        if (insertTextMode !== undefined) {\n            result.insertTextMode = insertTextMode;\n            if (insertTextMode === ls.InsertTextMode.asIs) {\n                result.keepWhitespace = true;\n            }\n        }\n        return result;\n    }\n    function asCompletionItemLabel(item) {\n        if (ls.CompletionItemLabelDetails.is(item.labelDetails)) {\n            return {\n                label: item.label,\n                detail: item.labelDetails.detail,\n                description: item.labelDetails.description\n            };\n        }\n        else {\n            return item.label;\n        }\n    }\n    function asCompletionInsertText(item, defaultRange, defaultInsertTextFormat) {\n        const insertTextFormat = item.insertTextFormat ?? defaultInsertTextFormat;\n        if (item.textEdit !== undefined || defaultRange !== undefined) {\n            const [range, newText] = item.textEdit !== undefined\n                ? getCompletionRangeAndText(item.textEdit)\n                : [defaultRange, item.textEditText ?? item.label];\n            if (insertTextFormat === ls.InsertTextFormat.Snippet) {\n                return { text: new code.SnippetString(newText), range: range, fromEdit: true };\n            }\n            else {\n                return { text: newText, range: range, fromEdit: true };\n            }\n        }\n        else if (item.insertText) {\n            if (insertTextFormat === ls.InsertTextFormat.Snippet) {\n                return { text: new code.SnippetString(item.insertText), fromEdit: false };\n            }\n            else {\n                return { text: item.insertText, fromEdit: false };\n            }\n        }\n        else {\n            return undefined;\n        }\n    }\n    function getCompletionRangeAndText(value) {\n        if (ls.InsertReplaceEdit.is(value)) {\n            return [{ inserting: asRange(value.insert), replacing: asRange(value.replace) }, value.newText];\n        }\n        else {\n            return [asRange(value.range), value.newText];\n        }\n    }\n    function asTextEdit(edit) {\n        if (!edit) {\n            return undefined;\n        }\n        return new code.TextEdit(asRange(edit.range), edit.newText);\n    }\n    async function asTextEdits(items, token) {\n        if (!items) {\n            return undefined;\n        }\n        return async.map(items, asTextEdit, token);\n    }\n    function asTextEditsSync(items) {\n        if (!items) {\n            return undefined;\n        }\n        const result = new Array(items.length);\n        for (let i = 0; i < items.length; i++) {\n            result[i] = asTextEdit(items[i]);\n        }\n        return result;\n    }\n    async function asSignatureHelp(item, token) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new code.SignatureHelp();\n        if (Is.number(item.activeSignature)) {\n            result.activeSignature = item.activeSignature;\n        }\n        else {\n            // activeSignature was optional in the past\n            result.activeSignature = 0;\n        }\n        if (Is.number(item.activeParameter)) {\n            result.activeParameter = item.activeParameter;\n        }\n        else {\n            // activeParameter was optional in the past\n            result.activeParameter = 0;\n        }\n        if (item.signatures) {\n            result.signatures = await asSignatureInformations(item.signatures, token);\n        }\n        return result;\n    }\n    async function asSignatureInformations(items, token) {\n        return async.mapAsync(items, asSignatureInformation, token);\n    }\n    async function asSignatureInformation(item, token) {\n        let result = new code.SignatureInformation(item.label);\n        if (item.documentation !== undefined) {\n            result.documentation = asDocumentation(item.documentation);\n        }\n        if (item.parameters !== undefined) {\n            result.parameters = await asParameterInformations(item.parameters, token);\n        }\n        if (item.activeParameter !== undefined) {\n            result.activeParameter = item.activeParameter;\n        }\n        {\n            return result;\n        }\n    }\n    function asParameterInformations(items, token) {\n        return async.map(items, asParameterInformation, token);\n    }\n    function asParameterInformation(item) {\n        let result = new code.ParameterInformation(item.label);\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n        }\n        return result;\n    }\n    function asLocation(item) {\n        return item ? new code.Location(_uriConverter(item.uri), asRange(item.range)) : undefined;\n    }\n    async function asDeclarationResult(item, token) {\n        if (!item) {\n            return undefined;\n        }\n        return asLocationResult(item, token);\n    }\n    async function asDefinitionResult(item, token) {\n        if (!item) {\n            return undefined;\n        }\n        return asLocationResult(item, token);\n    }\n    function asLocationLink(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = {\n            targetUri: _uriConverter(item.targetUri),\n            targetRange: asRange(item.targetRange),\n            originSelectionRange: asRange(item.originSelectionRange),\n            targetSelectionRange: asRange(item.targetSelectionRange)\n        };\n        if (!result.targetSelectionRange) {\n            throw new Error(`targetSelectionRange must not be undefined or null`);\n        }\n        return result;\n    }\n    async function asLocationResult(item, token) {\n        if (!item) {\n            return undefined;\n        }\n        if (Is.array(item)) {\n            if (item.length === 0) {\n                return [];\n            }\n            else if (ls.LocationLink.is(item[0])) {\n                const links = item;\n                return async.map(links, asLocationLink, token);\n            }\n            else {\n                const locations = item;\n                return async.map(locations, asLocation, token);\n            }\n        }\n        else if (ls.LocationLink.is(item)) {\n            return [asLocationLink(item)];\n        }\n        else {\n            return asLocation(item);\n        }\n    }\n    async function asReferences(values, token) {\n        if (!values) {\n            return undefined;\n        }\n        return async.map(values, asLocation, token);\n    }\n    async function asDocumentHighlights(values, token) {\n        if (!values) {\n            return undefined;\n        }\n        return async.map(values, asDocumentHighlight, token);\n    }\n    function asDocumentHighlight(item) {\n        let result = new code.DocumentHighlight(asRange(item.range));\n        if (Is.number(item.kind)) {\n            result.kind = asDocumentHighlightKind(item.kind);\n        }\n        return result;\n    }\n    function asDocumentHighlightKind(item) {\n        switch (item) {\n            case ls.DocumentHighlightKind.Text:\n                return code.DocumentHighlightKind.Text;\n            case ls.DocumentHighlightKind.Read:\n                return code.DocumentHighlightKind.Read;\n            case ls.DocumentHighlightKind.Write:\n                return code.DocumentHighlightKind.Write;\n        }\n        return code.DocumentHighlightKind.Text;\n    }\n    async function asSymbolInformations(values, token) {\n        if (!values) {\n            return undefined;\n        }\n        return async.map(values, asSymbolInformation, token);\n    }\n    function asSymbolKind(item) {\n        if (item <= ls.SymbolKind.TypeParameter) {\n            // Symbol kind is one based in the protocol and zero based in code.\n            return item - 1;\n        }\n        return code.SymbolKind.Property;\n    }\n    function asSymbolTag(value) {\n        switch (value) {\n            case ls.SymbolTag.Deprecated:\n                return code.SymbolTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asSymbolTags(items) {\n        if (items === undefined || items === null) {\n            return undefined;\n        }\n        const result = [];\n        for (const item of items) {\n            const converted = asSymbolTag(item);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length === 0 ? undefined : result;\n    }\n    function asSymbolInformation(item) {\n        const data = item.data;\n        const location = item.location;\n        const result = location.range === undefined || data !== undefined\n            ? new protocolWorkspaceSymbol_1.default(item.name, asSymbolKind(item.kind), item.containerName ?? '', location.range === undefined ? _uriConverter(location.uri) : new code.Location(_uriConverter(item.location.uri), asRange(location.range)), data)\n            : new code.SymbolInformation(item.name, asSymbolKind(item.kind), item.containerName ?? '', new code.Location(_uriConverter(item.location.uri), asRange(location.range)));\n        fillTags(result, item);\n        return result;\n    }\n    async function asDocumentSymbols(values, token) {\n        if (values === undefined || values === null) {\n            return undefined;\n        }\n        return async.map(values, asDocumentSymbol, token);\n    }\n    function asDocumentSymbol(value) {\n        let result = new code.DocumentSymbol(value.name, value.detail || '', asSymbolKind(value.kind), asRange(value.range), asRange(value.selectionRange));\n        fillTags(result, value);\n        if (value.children !== undefined && value.children.length > 0) {\n            let children = [];\n            for (let child of value.children) {\n                children.push(asDocumentSymbol(child));\n            }\n            result.children = children;\n        }\n        return result;\n    }\n    function fillTags(result, value) {\n        result.tags = asSymbolTags(value.tags);\n        if (value.deprecated) {\n            if (!result.tags) {\n                result.tags = [code.SymbolTag.Deprecated];\n            }\n            else {\n                if (!result.tags.includes(code.SymbolTag.Deprecated)) {\n                    result.tags = result.tags.concat(code.SymbolTag.Deprecated);\n                }\n            }\n        }\n    }\n    function asCommand(item) {\n        let result = { title: item.title, command: item.command };\n        if (item.arguments) {\n            result.arguments = item.arguments;\n        }\n        return result;\n    }\n    async function asCommands(items, token) {\n        if (!items) {\n            return undefined;\n        }\n        return async.map(items, asCommand, token);\n    }\n    const kindMapping = new Map();\n    kindMapping.set(ls.CodeActionKind.Empty, code.CodeActionKind.Empty);\n    kindMapping.set(ls.CodeActionKind.QuickFix, code.CodeActionKind.QuickFix);\n    kindMapping.set(ls.CodeActionKind.Refactor, code.CodeActionKind.Refactor);\n    kindMapping.set(ls.CodeActionKind.RefactorExtract, code.CodeActionKind.RefactorExtract);\n    kindMapping.set(ls.CodeActionKind.RefactorInline, code.CodeActionKind.RefactorInline);\n    kindMapping.set(ls.CodeActionKind.RefactorRewrite, code.CodeActionKind.RefactorRewrite);\n    kindMapping.set(ls.CodeActionKind.Source, code.CodeActionKind.Source);\n    kindMapping.set(ls.CodeActionKind.SourceOrganizeImports, code.CodeActionKind.SourceOrganizeImports);\n    function asCodeActionKind(item) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        let result = kindMapping.get(item);\n        if (result) {\n            return result;\n        }\n        let parts = item.split('.');\n        result = code.CodeActionKind.Empty;\n        for (let part of parts) {\n            result = result.append(part);\n        }\n        return result;\n    }\n    function asCodeActionKinds(items) {\n        if (items === undefined || items === null) {\n            return undefined;\n        }\n        return items.map(kind => asCodeActionKind(kind));\n    }\n    async function asCodeAction(item, token) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        let result = new protocolCodeAction_1.default(item.title, item.data);\n        if (item.kind !== undefined) {\n            result.kind = asCodeActionKind(item.kind);\n        }\n        if (item.diagnostics !== undefined) {\n            result.diagnostics = asDiagnosticsSync(item.diagnostics);\n        }\n        if (item.edit !== undefined) {\n            result.edit = await asWorkspaceEdit(item.edit, token);\n        }\n        if (item.command !== undefined) {\n            result.command = asCommand(item.command);\n        }\n        if (item.isPreferred !== undefined) {\n            result.isPreferred = item.isPreferred;\n        }\n        if (item.disabled !== undefined) {\n            result.disabled = { reason: item.disabled.reason };\n        }\n        return result;\n    }\n    function asCodeActionResult(items, token) {\n        return async.mapAsync(items, async (item) => {\n            if (ls.Command.is(item)) {\n                return asCommand(item);\n            }\n            else {\n                return asCodeAction(item, token);\n            }\n        }, token);\n    }\n    function asCodeLens(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new protocolCodeLens_1.default(asRange(item.range));\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.data !== undefined && item.data !== null) {\n            result.data = item.data;\n        }\n        return result;\n    }\n    async function asCodeLenses(items, token) {\n        if (!items) {\n            return undefined;\n        }\n        return async.map(items, asCodeLens, token);\n    }\n    async function asWorkspaceEdit(item, token) {\n        if (!item) {\n            return undefined;\n        }\n        const sharedMetadata = new Map();\n        if (item.changeAnnotations !== undefined) {\n            const changeAnnotations = item.changeAnnotations;\n            await async.forEach(Object.keys(changeAnnotations), (key) => {\n                const metaData = asWorkspaceEditEntryMetadata(changeAnnotations[key]);\n                sharedMetadata.set(key, metaData);\n            }, token);\n        }\n        const asMetadata = (annotation) => {\n            if (annotation === undefined) {\n                return undefined;\n            }\n            else {\n                return sharedMetadata.get(annotation);\n            }\n        };\n        const result = new code.WorkspaceEdit();\n        if (item.documentChanges) {\n            const documentChanges = item.documentChanges;\n            await async.forEach(documentChanges, (change) => {\n                if (ls.CreateFile.is(change)) {\n                    result.createFile(_uriConverter(change.uri), change.options, asMetadata(change.annotationId));\n                }\n                else if (ls.RenameFile.is(change)) {\n                    result.renameFile(_uriConverter(change.oldUri), _uriConverter(change.newUri), change.options, asMetadata(change.annotationId));\n                }\n                else if (ls.DeleteFile.is(change)) {\n                    result.deleteFile(_uriConverter(change.uri), change.options, asMetadata(change.annotationId));\n                }\n                else if (ls.TextDocumentEdit.is(change)) {\n                    const uri = _uriConverter(change.textDocument.uri);\n                    for (const edit of change.edits) {\n                        if (ls.AnnotatedTextEdit.is(edit)) {\n                            result.replace(uri, asRange(edit.range), edit.newText, asMetadata(edit.annotationId));\n                        }\n                        else {\n                            result.replace(uri, asRange(edit.range), edit.newText);\n                        }\n                    }\n                }\n                else {\n                    throw new Error(`Unknown workspace edit change received:\\n${JSON.stringify(change, undefined, 4)}`);\n                }\n            }, token);\n        }\n        else if (item.changes) {\n            const changes = item.changes;\n            await async.forEach(Object.keys(changes), (key) => {\n                result.set(_uriConverter(key), asTextEditsSync(changes[key]));\n            }, token);\n        }\n        return result;\n    }\n    function asWorkspaceEditEntryMetadata(annotation) {\n        if (annotation === undefined) {\n            return undefined;\n        }\n        return { label: annotation.label, needsConfirmation: !!annotation.needsConfirmation, description: annotation.description };\n    }\n    function asDocumentLink(item) {\n        let range = asRange(item.range);\n        let target = item.target ? asUri(item.target) : undefined;\n        // target must be optional in DocumentLink\n        let link = new protocolDocumentLink_1.default(range, target);\n        if (item.tooltip !== undefined) {\n            link.tooltip = item.tooltip;\n        }\n        if (item.data !== undefined && item.data !== null) {\n            link.data = item.data;\n        }\n        return link;\n    }\n    async function asDocumentLinks(items, token) {\n        if (!items) {\n            return undefined;\n        }\n        return async.map(items, asDocumentLink, token);\n    }\n    function asColor(color) {\n        return new code.Color(color.red, color.green, color.blue, color.alpha);\n    }\n    function asColorInformation(ci) {\n        return new code.ColorInformation(asRange(ci.range), asColor(ci.color));\n    }\n    async function asColorInformations(colorInformation, token) {\n        if (!colorInformation) {\n            return undefined;\n        }\n        return async.map(colorInformation, asColorInformation, token);\n    }\n    function asColorPresentation(cp) {\n        let presentation = new code.ColorPresentation(cp.label);\n        presentation.additionalTextEdits = asTextEditsSync(cp.additionalTextEdits);\n        if (cp.textEdit) {\n            presentation.textEdit = asTextEdit(cp.textEdit);\n        }\n        return presentation;\n    }\n    async function asColorPresentations(colorPresentations, token) {\n        if (!colorPresentations) {\n            return undefined;\n        }\n        return async.map(colorPresentations, asColorPresentation, token);\n    }\n    function asFoldingRangeKind(kind) {\n        if (kind) {\n            switch (kind) {\n                case ls.FoldingRangeKind.Comment:\n                    return code.FoldingRangeKind.Comment;\n                case ls.FoldingRangeKind.Imports:\n                    return code.FoldingRangeKind.Imports;\n                case ls.FoldingRangeKind.Region:\n                    return code.FoldingRangeKind.Region;\n            }\n        }\n        return undefined;\n    }\n    function asFoldingRange(r) {\n        return new code.FoldingRange(r.startLine, r.endLine, asFoldingRangeKind(r.kind));\n    }\n    async function asFoldingRanges(foldingRanges, token) {\n        if (!foldingRanges) {\n            return undefined;\n        }\n        return async.map(foldingRanges, asFoldingRange, token);\n    }\n    function asSelectionRange(selectionRange) {\n        return new code.SelectionRange(asRange(selectionRange.range), selectionRange.parent ? asSelectionRange(selectionRange.parent) : undefined);\n    }\n    async function asSelectionRanges(selectionRanges, token) {\n        if (!Array.isArray(selectionRanges)) {\n            return [];\n        }\n        return async.map(selectionRanges, asSelectionRange, token);\n    }\n    function asInlineValue(inlineValue) {\n        if (ls.InlineValueText.is(inlineValue)) {\n            return new code.InlineValueText(asRange(inlineValue.range), inlineValue.text);\n        }\n        else if (ls.InlineValueVariableLookup.is(inlineValue)) {\n            return new code.InlineValueVariableLookup(asRange(inlineValue.range), inlineValue.variableName, inlineValue.caseSensitiveLookup);\n        }\n        else {\n            return new code.InlineValueEvaluatableExpression(asRange(inlineValue.range), inlineValue.expression);\n        }\n    }\n    async function asInlineValues(inlineValues, token) {\n        if (!Array.isArray(inlineValues)) {\n            return [];\n        }\n        return async.map(inlineValues, asInlineValue, token);\n    }\n    async function asInlayHint(value, token) {\n        const label = typeof value.label === 'string'\n            ? value.label\n            : await async.map(value.label, asInlayHintLabelPart, token);\n        const result = new protocolInlayHint_1.default(asPosition(value.position), label);\n        if (value.kind !== undefined) {\n            result.kind = value.kind;\n        }\n        if (value.textEdits !== undefined) {\n            result.textEdits = await asTextEdits(value.textEdits, token);\n        }\n        if (value.tooltip !== undefined) {\n            result.tooltip = asTooltip(value.tooltip);\n        }\n        if (value.paddingLeft !== undefined) {\n            result.paddingLeft = value.paddingLeft;\n        }\n        if (value.paddingRight !== undefined) {\n            result.paddingRight = value.paddingRight;\n        }\n        if (value.data !== undefined) {\n            result.data = value.data;\n        }\n        return result;\n    }\n    function asInlayHintLabelPart(part) {\n        const result = new code.InlayHintLabelPart(part.value);\n        if (part.location !== undefined) {\n            result.location = asLocation(part.location);\n        }\n        if (part.tooltip !== undefined) {\n            result.tooltip = asTooltip(part.tooltip);\n        }\n        if (part.command !== undefined) {\n            result.command = asCommand(part.command);\n        }\n        return result;\n    }\n    function asTooltip(value) {\n        if (typeof value === 'string') {\n            return value;\n        }\n        return asMarkdownString(value);\n    }\n    async function asInlayHints(values, token) {\n        if (!Array.isArray(values)) {\n            return undefined;\n        }\n        return async.mapAsync(values, asInlayHint, token);\n    }\n    function asCallHierarchyItem(item) {\n        if (item === null) {\n            return undefined;\n        }\n        const result = new protocolCallHierarchyItem_1.default(asSymbolKind(item.kind), item.name, item.detail || '', asUri(item.uri), asRange(item.range), asRange(item.selectionRange), item.data);\n        if (item.tags !== undefined) {\n            result.tags = asSymbolTags(item.tags);\n        }\n        return result;\n    }\n    async function asCallHierarchyItems(items, token) {\n        if (items === null) {\n            return undefined;\n        }\n        return async.map(items, asCallHierarchyItem, token);\n    }\n    async function asCallHierarchyIncomingCall(item, token) {\n        return new code.CallHierarchyIncomingCall(asCallHierarchyItem(item.from), await asRanges(item.fromRanges, token));\n    }\n    async function asCallHierarchyIncomingCalls(items, token) {\n        if (items === null) {\n            return undefined;\n        }\n        return async.mapAsync(items, asCallHierarchyIncomingCall, token);\n    }\n    async function asCallHierarchyOutgoingCall(item, token) {\n        return new code.CallHierarchyOutgoingCall(asCallHierarchyItem(item.to), await asRanges(item.fromRanges, token));\n    }\n    async function asCallHierarchyOutgoingCalls(items, token) {\n        if (items === null) {\n            return undefined;\n        }\n        return async.mapAsync(items, asCallHierarchyOutgoingCall, token);\n    }\n    async function asSemanticTokens(value, _token) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        return new code.SemanticTokens(new Uint32Array(value.data), value.resultId);\n    }\n    function asSemanticTokensEdit(value) {\n        return new code.SemanticTokensEdit(value.start, value.deleteCount, value.data !== undefined ? new Uint32Array(value.data) : undefined);\n    }\n    async function asSemanticTokensEdits(value, _token) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        return new code.SemanticTokensEdits(value.edits.map(asSemanticTokensEdit), value.resultId);\n    }\n    function asSemanticTokensLegend(value) {\n        return value;\n    }\n    async function asLinkedEditingRanges(value, token) {\n        if (value === null || value === undefined) {\n            return undefined;\n        }\n        return new code.LinkedEditingRanges(await asRanges(value.ranges, token), asRegularExpression(value.wordPattern));\n    }\n    function asRegularExpression(value) {\n        if (value === null || value === undefined) {\n            return undefined;\n        }\n        return new RegExp(value);\n    }\n    function asTypeHierarchyItem(item) {\n        if (item === null) {\n            return undefined;\n        }\n        let result = new protocolTypeHierarchyItem_1.default(asSymbolKind(item.kind), item.name, item.detail || '', asUri(item.uri), asRange(item.range), asRange(item.selectionRange), item.data);\n        if (item.tags !== undefined) {\n            result.tags = asSymbolTags(item.tags);\n        }\n        return result;\n    }\n    async function asTypeHierarchyItems(items, token) {\n        if (items === null) {\n            return undefined;\n        }\n        return async.map(items, asTypeHierarchyItem, token);\n    }\n    function asGlobPattern(pattern) {\n        if (Is.string(pattern)) {\n            return pattern;\n        }\n        if (ls.RelativePattern.is(pattern)) {\n            if (ls.URI.is(pattern.baseUri)) {\n                return new code.RelativePattern(asUri(pattern.baseUri), pattern.pattern);\n            }\n            else if (ls.WorkspaceFolder.is(pattern.baseUri)) {\n                const workspaceFolder = code.workspace.getWorkspaceFolder(asUri(pattern.baseUri.uri));\n                return workspaceFolder !== undefined ? new code.RelativePattern(workspaceFolder, pattern.pattern) : undefined;\n            }\n        }\n        return undefined;\n    }\n    async function asInlineCompletionResult(value, token) {\n        if (!value) {\n            return undefined;\n        }\n        if (Array.isArray(value)) {\n            return async.map(value, (item) => asInlineCompletionItem(item), token);\n        }\n        const list = value;\n        const converted = await async.map(list.items, (item) => {\n            return asInlineCompletionItem(item);\n        }, token);\n        return new code.InlineCompletionList(converted);\n    }\n    function asInlineCompletionItem(item) {\n        let insertText;\n        if (typeof item.insertText === 'string') {\n            insertText = item.insertText;\n        }\n        else {\n            insertText = new code.SnippetString(item.insertText.value);\n        }\n        let command = undefined;\n        if (item.command) {\n            command = asCommand(item.command);\n        }\n        const inlineCompletionItem = new code.InlineCompletionItem(insertText, asRange(item.range), command);\n        if (item.filterText) {\n            inlineCompletionItem.filterText = item.filterText;\n        }\n        return inlineCompletionItem;\n    }\n    return {\n        asUri,\n        asDocumentSelector,\n        asDiagnostics,\n        asDiagnostic,\n        asRange,\n        asRanges,\n        asPosition,\n        asDiagnosticSeverity,\n        asDiagnosticTag,\n        asHover,\n        asCompletionResult,\n        asCompletionItem,\n        asTextEdit,\n        asTextEdits,\n        asSignatureHelp,\n        asSignatureInformations,\n        asSignatureInformation,\n        asParameterInformations,\n        asParameterInformation,\n        asDeclarationResult,\n        asDefinitionResult,\n        asLocation,\n        asReferences,\n        asDocumentHighlights,\n        asDocumentHighlight,\n        asDocumentHighlightKind,\n        asSymbolKind,\n        asSymbolTag,\n        asSymbolTags,\n        asSymbolInformations,\n        asSymbolInformation,\n        asDocumentSymbols,\n        asDocumentSymbol,\n        asCommand,\n        asCommands,\n        asCodeAction,\n        asCodeActionKind,\n        asCodeActionKinds,\n        asCodeActionResult,\n        asCodeLens,\n        asCodeLenses,\n        asWorkspaceEdit,\n        asDocumentLink,\n        asDocumentLinks,\n        asFoldingRangeKind,\n        asFoldingRange,\n        asFoldingRanges,\n        asColor,\n        asColorInformation,\n        asColorInformations,\n        asColorPresentation,\n        asColorPresentations,\n        asSelectionRange,\n        asSelectionRanges,\n        asInlineValue,\n        asInlineValues,\n        asInlayHint,\n        asInlayHints,\n        asSemanticTokensLegend,\n        asSemanticTokens,\n        asSemanticTokensEdit,\n        asSemanticTokensEdits,\n        asCallHierarchyItem,\n        asCallHierarchyItems,\n        asCallHierarchyIncomingCall,\n        asCallHierarchyIncomingCalls,\n        asCallHierarchyOutgoingCall,\n        asCallHierarchyOutgoingCalls,\n        asLinkedEditingRanges: asLinkedEditingRanges,\n        asTypeHierarchyItem,\n        asTypeHierarchyItems,\n        asGlobPattern,\n        asInlineCompletionResult,\n        asInlineCompletionItem\n    };\n}\nexports.createConverter = createConverter;\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.generateUuid = exports.parse = exports.isUUID = exports.v4 = exports.empty = void 0;\nclass ValueUUID {\n    constructor(_value) {\n        this._value = _value;\n        // empty\n    }\n    asHex() {\n        return this._value;\n    }\n    equals(other) {\n        return this.asHex() === other.asHex();\n    }\n}\nclass V4UUID extends ValueUUID {\n    static _oneOf(array) {\n        return array[Math.floor(array.length * Math.random())];\n    }\n    static _randomHex() {\n        return V4UUID._oneOf(V4UUID._chars);\n    }\n    constructor() {\n        super([\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            '4',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._oneOf(V4UUID._timeHighBits),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n        ].join(''));\n    }\n}\nV4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\nV4UUID._timeHighBits = ['8', '9', 'a', 'b'];\n/**\n * An empty UUID that contains only zeros.\n */\nexports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');\nfunction v4() {\n    return new V4UUID();\n}\nexports.v4 = v4;\nconst _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nfunction isUUID(value) {\n    return _UUIDPattern.test(value);\n}\nexports.isUUID = isUUID;\n/**\n * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.\n * @param value A uuid string.\n */\nfunction parse(value) {\n    if (!isUUID(value)) {\n        throw new Error('invalid uuid');\n    }\n    return new ValueUUID(value);\n}\nexports.parse = parse;\nfunction generateUuid() {\n    return v4().asHex();\n}\nexports.generateUuid = generateUuid;\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.ProgressPart = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nclass ProgressPart {\n    constructor(_client, _token, done) {\n        this._client = _client;\n        this._token = _token;\n        this._reported = 0;\n        this._infinite = false;\n        this._lspProgressDisposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {\n            switch (value.kind) {\n                case 'begin':\n                    this.begin(value);\n                    break;\n                case 'report':\n                    this.report(value);\n                    break;\n                case 'end':\n                    this.done();\n                    done && done(this);\n                    break;\n            }\n        });\n    }\n    begin(params) {\n        this._infinite = params.percentage === undefined;\n        // the progress as already been marked as done / canceled. Ignore begin call\n        if (this._lspProgressDisposable === undefined) {\n            return;\n        }\n        // Since we don't use commands this will be a silent window progress with a hidden notification.\n        void vscode_1.window.withProgress({ location: vscode_1.ProgressLocation.Window, cancellable: params.cancellable, title: params.title }, async (progress, cancellationToken) => {\n            // the progress as already been marked as done / canceled. Ignore begin call\n            if (this._lspProgressDisposable === undefined) {\n                return;\n            }\n            this._progress = progress;\n            this._cancellationToken = cancellationToken;\n            this._tokenDisposable = this._cancellationToken.onCancellationRequested(() => {\n                this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, { token: this._token });\n            });\n            this.report(params);\n            return new Promise((resolve, reject) => {\n                this._resolve = resolve;\n                this._reject = reject;\n            });\n        });\n    }\n    report(params) {\n        if (this._infinite && Is.string(params.message)) {\n            this._progress !== undefined && this._progress.report({ message: params.message });\n        }\n        else if (Is.number(params.percentage)) {\n            const percentage = Math.max(0, Math.min(params.percentage, 100));\n            const delta = Math.max(0, percentage - this._reported);\n            this._reported += delta;\n            this._progress !== undefined && this._progress.report({ message: params.message, increment: delta });\n        }\n    }\n    cancel() {\n        this.cleanup();\n        if (this._reject !== undefined) {\n            this._reject();\n            this._resolve = undefined;\n            this._reject = undefined;\n        }\n    }\n    done() {\n        this.cleanup();\n        if (this._resolve !== undefined) {\n            this._resolve();\n            this._resolve = undefined;\n            this._reject = undefined;\n        }\n    }\n    cleanup() {\n        if (this._lspProgressDisposable !== undefined) {\n            this._lspProgressDisposable.dispose();\n            this._lspProgressDisposable = undefined;\n        }\n        if (this._tokenDisposable !== undefined) {\n            this._tokenDisposable.dispose();\n            this._tokenDisposable = undefined;\n        }\n        this._progress = undefined;\n        this._cancellationToken = undefined;\n    }\n}\nexports.ProgressPart = ProgressPart;\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.WorkspaceFeature = exports.TextDocumentLanguageFeature = exports.TextDocumentEventFeature = exports.DynamicDocumentFeature = exports.DynamicFeature = exports.StaticFeature = exports.ensure = exports.LSPCancellationError = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst UUID = require(\"./utils/uuid\");\nclass LSPCancellationError extends vscode_1.CancellationError {\n    constructor(data) {\n        super();\n        this.data = data;\n    }\n}\nexports.LSPCancellationError = LSPCancellationError;\nfunction ensure(target, key) {\n    if (target[key] === undefined) {\n        target[key] = {};\n    }\n    return target[key];\n}\nexports.ensure = ensure;\nvar StaticFeature;\n(function (StaticFeature) {\n    function is(value) {\n        const candidate = value;\n        return candidate !== undefined && candidate !== null &&\n            Is.func(candidate.fillClientCapabilities) && Is.func(candidate.initialize) && Is.func(candidate.getState) && Is.func(candidate.clear) &&\n            (candidate.fillInitializeParams === undefined || Is.func(candidate.fillInitializeParams));\n    }\n    StaticFeature.is = is;\n})(StaticFeature || (exports.StaticFeature = StaticFeature = {}));\nvar DynamicFeature;\n(function (DynamicFeature) {\n    function is(value) {\n        const candidate = value;\n        return candidate !== undefined && candidate !== null &&\n            Is.func(candidate.fillClientCapabilities) && Is.func(candidate.initialize) && Is.func(candidate.getState) && Is.func(candidate.clear) &&\n            (candidate.fillInitializeParams === undefined || Is.func(candidate.fillInitializeParams)) && Is.func(candidate.register) &&\n            Is.func(candidate.unregister) && candidate.registrationType !== undefined;\n    }\n    DynamicFeature.is = is;\n})(DynamicFeature || (exports.DynamicFeature = DynamicFeature = {}));\n/**\n * An abstract dynamic feature implementation that operates on documents (e.g. text\n * documents or notebooks).\n */\nclass DynamicDocumentFeature {\n    constructor(client) {\n        this._client = client;\n    }\n    /**\n     * Returns the state the feature is in.\n     */\n    getState() {\n        const selectors = this.getDocumentSelectors();\n        let count = 0;\n        for (const selector of selectors) {\n            count++;\n            for (const document of vscode_1.workspace.textDocuments) {\n                if (vscode_1.languages.match(selector, document) > 0) {\n                    return { kind: 'document', id: this.registrationType.method, registrations: true, matches: true };\n                }\n            }\n        }\n        const registrations = count > 0;\n        return { kind: 'document', id: this.registrationType.method, registrations, matches: false };\n    }\n}\nexports.DynamicDocumentFeature = DynamicDocumentFeature;\n/**\n * An abstract base class to implement features that react to events\n * emitted from text documents.\n */\nclass TextDocumentEventFeature extends DynamicDocumentFeature {\n    static textDocumentFilter(selectors, textDocument) {\n        for (const selector of selectors) {\n            if (vscode_1.languages.match(selector, textDocument) > 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n    constructor(client, event, type, middleware, createParams, textDocument, selectorFilter) {\n        super(client);\n        this._event = event;\n        this._type = type;\n        this._middleware = middleware;\n        this._createParams = createParams;\n        this._textDocument = textDocument;\n        this._selectorFilter = selectorFilter;\n        this._selectors = new Map();\n        this._onNotificationSent = new vscode_1.EventEmitter();\n    }\n    getStateInfo() {\n        return [this._selectors.values(), false];\n    }\n    getDocumentSelectors() {\n        return this._selectors.values();\n    }\n    register(data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = this._event((data) => {\n                this.callback(data).catch((error) => {\n                    this._client.error(`Sending document notification ${this._type.method} failed.`, error);\n                });\n            });\n        }\n        this._selectors.set(data.id, this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector));\n    }\n    async callback(data) {\n        const doSend = async (data) => {\n            const params = this._createParams(data);\n            await this._client.sendNotification(this._type, params);\n            this.notificationSent(this.getTextDocument(data), this._type, params);\n        };\n        if (this.matches(data)) {\n            const middleware = this._middleware();\n            return middleware ? middleware(data, (data) => doSend(data)) : doSend(data);\n        }\n    }\n    matches(data) {\n        if (this._client.hasDedicatedTextSynchronizationFeature(this._textDocument(data))) {\n            return false;\n        }\n        return !this._selectorFilter || this._selectorFilter(this._selectors.values(), data);\n    }\n    get onNotificationSent() {\n        return this._onNotificationSent.event;\n    }\n    notificationSent(textDocument, type, params) {\n        this._onNotificationSent.fire({ textDocument, type, params });\n    }\n    unregister(id) {\n        this._selectors.delete(id);\n        if (this._selectors.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    clear() {\n        this._selectors.clear();\n        this._onNotificationSent.dispose();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    getProvider(document) {\n        for (const selector of this._selectors.values()) {\n            if (vscode_1.languages.match(selector, document) > 0) {\n                return {\n                    send: (data) => {\n                        return this.callback(data);\n                    }\n                };\n            }\n        }\n        return undefined;\n    }\n}\nexports.TextDocumentEventFeature = TextDocumentEventFeature;\n/**\n * A abstract feature implementation that registers language providers\n * for text documents using a given document selector.\n */\nclass TextDocumentLanguageFeature extends DynamicDocumentFeature {\n    constructor(client, registrationType) {\n        super(client);\n        this._registrationType = registrationType;\n        this._registrations = new Map();\n    }\n    *getDocumentSelectors() {\n        for (const registration of this._registrations.values()) {\n            const selector = registration.data.registerOptions.documentSelector;\n            if (selector === null) {\n                continue;\n            }\n            yield this._client.protocol2CodeConverter.asDocumentSelector(selector);\n        }\n    }\n    get registrationType() {\n        return this._registrationType;\n    }\n    register(data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        let registration = this.registerLanguageProvider(data.registerOptions, data.id);\n        this._registrations.set(data.id, { disposable: registration[0], data, provider: registration[1] });\n    }\n    unregister(id) {\n        let registration = this._registrations.get(id);\n        if (registration !== undefined) {\n            registration.disposable.dispose();\n        }\n    }\n    clear() {\n        this._registrations.forEach((value) => {\n            value.disposable.dispose();\n        });\n        this._registrations.clear();\n    }\n    getRegistration(documentSelector, capability) {\n        if (!capability) {\n            return [undefined, undefined];\n        }\n        else if (vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is(capability)) {\n            const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();\n            const selector = capability.documentSelector ?? documentSelector;\n            if (selector) {\n                return [id, Object.assign({}, capability, { documentSelector: selector })];\n            }\n        }\n        else if (Is.boolean(capability) && capability === true || vscode_languageserver_protocol_1.WorkDoneProgressOptions.is(capability)) {\n            if (!documentSelector) {\n                return [undefined, undefined];\n            }\n            const options = (Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector }));\n            return [UUID.generateUuid(), options];\n        }\n        return [undefined, undefined];\n    }\n    getRegistrationOptions(documentSelector, capability) {\n        if (!documentSelector || !capability) {\n            return undefined;\n        }\n        return (Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector }));\n    }\n    getProvider(textDocument) {\n        for (const registration of this._registrations.values()) {\n            let selector = registration.data.registerOptions.documentSelector;\n            if (selector !== null && vscode_1.languages.match(this._client.protocol2CodeConverter.asDocumentSelector(selector), textDocument) > 0) {\n                return registration.provider;\n            }\n        }\n        return undefined;\n    }\n    getAllProviders() {\n        const result = [];\n        for (const item of this._registrations.values()) {\n            result.push(item.provider);\n        }\n        return result;\n    }\n}\nexports.TextDocumentLanguageFeature = TextDocumentLanguageFeature;\nclass WorkspaceFeature {\n    constructor(client, registrationType) {\n        this._client = client;\n        this._registrationType = registrationType;\n        this._registrations = new Map();\n    }\n    getState() {\n        const registrations = this._registrations.size > 0;\n        return { kind: 'workspace', id: this._registrationType.method, registrations };\n    }\n    get registrationType() {\n        return this._registrationType;\n    }\n    register(data) {\n        const registration = this.registerLanguageProvider(data.registerOptions);\n        this._registrations.set(data.id, { disposable: registration[0], provider: registration[1] });\n    }\n    unregister(id) {\n        let registration = this._registrations.get(id);\n        if (registration !== undefined) {\n            registration.disposable.dispose();\n        }\n    }\n    clear() {\n        this._registrations.forEach((registration) => {\n            registration.disposable.dispose();\n        });\n        this._registrations.clear();\n    }\n    getProviders() {\n        const result = [];\n        for (const registration of this._registrations.values()) {\n            result.push(registration.provider);\n        }\n        return result;\n    }\n}\nexports.WorkspaceFeature = WorkspaceFeature;\n","const isWindows = typeof process === 'object' &&\n  process &&\n  process.platform === 'win32'\nmodule.exports = isWindows ? { sep: '\\\\' } : { sep: '/' }\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  if (!str)\n    return [''];\n\n  var parts = [];\n  var m = balanced('{', '}', str);\n\n  if (!m)\n    return str.split(',');\n\n  var pre = m.pre;\n  var body = m.body;\n  var post = m.post;\n  var p = pre.split(',');\n\n  p[p.length-1] += '{' + body + '}';\n  var postParts = parseCommaParts(post);\n  if (post.length) {\n    p[p.length-1] += postParts.shift();\n    p.push.apply(p, postParts);\n  }\n\n  parts.push.apply(parts, p);\n\n  return parts;\n}\n\nfunction expandTop(str) {\n  if (!str)\n    return [];\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\nfunction expand(str, isTop) {\n  var expansions = [];\n\n  var m = balanced('{', '}', str);\n  if (!m) return [str];\n\n  // no need to expand pre, since it is guaranteed to be free of brace-sets\n  var pre = m.pre;\n  var post = m.post.length\n    ? expand(m.post, false)\n    : [''];\n\n  if (/\\$$/.test(m.pre)) {    \n    for (var k = 0; k < post.length; k++) {\n      var expansion = pre+ '{' + m.body + '}' + post[k];\n      expansions.push(expansion);\n    }\n  } else {\n    var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isSequence = isNumericSequence || isAlphaSequence;\n    var isOptions = m.body.indexOf(',') >= 0;\n    if (!isSequence && !isOptions) {\n      // {a},b}\n      if (m.post.match(/,.*\\}/)) {\n        str = m.pre + '{' + m.body + escClose + m.post;\n        return expand(str);\n      }\n      return [str];\n    }\n\n    var n;\n    if (isSequence) {\n      n = m.body.split(/\\.\\./);\n    } else {\n      n = parseCommaParts(m.body);\n      if (n.length === 1) {\n        // x{{a,b}}y ==> x{a}y x{b}y\n        n = expand(n[0], false).map(embrace);\n        if (n.length === 1) {\n          return post.map(function(p) {\n            return m.pre + n[0] + p;\n          });\n        }\n      }\n    }\n\n    // at this point, n is the parts, and we know it's not a comma set\n    // with a single entry.\n    var N;\n\n    if (isSequence) {\n      var x = numeric(n[0]);\n      var y = numeric(n[1]);\n      var width = Math.max(n[0].length, n[1].length)\n      var incr = n.length == 3\n        ? Math.abs(numeric(n[2]))\n        : 1;\n      var test = lte;\n      var reverse = y < x;\n      if (reverse) {\n        incr *= -1;\n        test = gte;\n      }\n      var pad = n.some(isPadded);\n\n      N = [];\n\n      for (var i = x; test(i, y); i += incr) {\n        var c;\n        if (isAlphaSequence) {\n          c = String.fromCharCode(i);\n          if (c === '\\\\')\n            c = '';\n        } else {\n          c = String(i);\n          if (pad) {\n            var need = width - c.length;\n            if (need > 0) {\n              var z = new Array(need + 1).join('0');\n              if (i < 0)\n                c = '-' + z + c.slice(1);\n              else\n                c = z + c;\n            }\n          }\n        }\n        N.push(c);\n      }\n    } else {\n      N = [];\n\n      for (var j = 0; j < n.length; j++) {\n        N.push.apply(N, expand(n[j], false));\n      }\n    }\n\n    for (var j = 0; j < N.length; j++) {\n      for (var k = 0; k < post.length; k++) {\n        var expansion = pre + N[j] + post[k];\n        if (!isTop || isSequence || expansion)\n          expansions.push(expansion);\n      }\n    }\n  }\n\n  return expansions;\n}\n\n","const minimatch = module.exports = (p, pattern, options = {}) => {\n  assertValidPattern(pattern)\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\nmodule.exports = minimatch\n\nconst path = require('./lib/path.js')\nminimatch.sep = path.sep\n\nconst GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\nconst expand = require('brace-expansion')\n\nconst plTypes = {\n  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n  '?': { open: '(?:', close: ')?' },\n  '+': { open: '(?:', close: ')+' },\n  '*': { open: '(?:', close: ')*' },\n  '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = s => s.split('').reduce((set, c) => {\n  set[c] = true\n  return set\n}, {})\n\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(')\n\n// normalizes slashes.\nconst slashSplit = /\\/+/\n\nminimatch.filter = (pattern, options = {}) =>\n  (p, i, list) => minimatch(p, pattern, options)\n\nconst ext = (a, b = {}) => {\n  const t = {}\n  Object.keys(a).forEach(k => t[k] = a[k])\n  Object.keys(b).forEach(k => t[k] = b[k])\n  return t\n}\n\nminimatch.defaults = def => {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  const orig = minimatch\n\n  const m = (p, pattern, options) => orig(p, pattern, ext(def, options))\n  m.Minimatch = class Minimatch extends orig.Minimatch {\n    constructor (pattern, options) {\n      super(pattern, ext(def, options))\n    }\n  }\n  m.Minimatch.defaults = options => orig.defaults(ext(def, options)).Minimatch\n  m.filter = (pattern, options) => orig.filter(pattern, ext(def, options))\n  m.defaults = options => orig.defaults(ext(def, options))\n  m.makeRe = (pattern, options) => orig.makeRe(pattern, ext(def, options))\n  m.braceExpand = (pattern, options) => orig.braceExpand(pattern, ext(def, options))\n  m.match = (list, pattern, options) => orig.match(list, pattern, ext(def, options))\n\n  return m\n}\n\n\n\n\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = (pattern, options) => braceExpand(pattern, options)\n\nconst braceExpand = (pattern, options = {}) => {\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\n\nconst MAX_PATTERN_LENGTH = 1024 * 64\nconst assertValidPattern = pattern => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nconst SUBPARSE = Symbol('subparse')\n\nminimatch.makeRe = (pattern, options) =>\n  new Minimatch(pattern, options || {}).makeRe()\n\nminimatch.match = (list, pattern, options = {}) => {\n  const mm = new Minimatch(pattern, options)\n  list = list.filter(f => mm.match(f))\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\n\n// replace stuff like \\* with *\nconst globUnescape = s => s.replace(/\\\\(.)/g, '$1')\nconst charUnescape = s => s.replace(/\\\\([^-\\]])/g, '$1')\nconst regExpEscape = s => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\nconst braExpEscape = s => s.replace(/[[\\]\\\\]/g, '\\\\$&')\n\nclass Minimatch {\n  constructor (pattern, options) {\n    assertValidPattern(pattern)\n\n    if (!options) options = {}\n\n    this.options = options\n    this.set = []\n    this.pattern = pattern\n    this.windowsPathsNoEscape = !!options.windowsPathsNoEscape ||\n      options.allowWindowsEscape === false\n    if (this.windowsPathsNoEscape) {\n      this.pattern = this.pattern.replace(/\\\\/g, '/')\n    }\n    this.regexp = null\n    this.negate = false\n    this.comment = false\n    this.empty = false\n    this.partial = !!options.partial\n\n    // make the set of regexps etc.\n    this.make()\n  }\n\n  debug () {}\n\n  make () {\n    const pattern = this.pattern\n    const options = this.options\n\n    // empty patterns and comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n      this.comment = true\n      return\n    }\n    if (!pattern) {\n      this.empty = true\n      return\n    }\n\n    // step 1: figure out negation, etc.\n    this.parseNegate()\n\n    // step 2: expand braces\n    let set = this.globSet = this.braceExpand()\n\n    if (options.debug) this.debug = (...args) => console.error(...args)\n\n    this.debug(this.pattern, set)\n\n    // step 3: now we have a set, so turn each one into a series of path-portion\n    // matching patterns.\n    // These will be regexps, except in the case of \"**\", which is\n    // set to the GLOBSTAR object for globstar behavior,\n    // and will not contain any / characters\n    set = this.globParts = set.map(s => s.split(slashSplit))\n\n    this.debug(this.pattern, set)\n\n    // glob --> regexps\n    set = set.map((s, si, set) => s.map(this.parse, this))\n\n    this.debug(this.pattern, set)\n\n    // filter out everything that didn't compile properly.\n    set = set.filter(s => s.indexOf(false) === -1)\n\n    this.debug(this.pattern, set)\n\n    this.set = set\n  }\n\n  parseNegate () {\n    if (this.options.nonegate) return\n\n    const pattern = this.pattern\n    let negate = false\n    let negateOffset = 0\n\n    for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n      negate = !negate\n      negateOffset++\n    }\n\n    if (negateOffset) this.pattern = pattern.slice(negateOffset)\n    this.negate = negate\n  }\n\n  // set partial to true to test if, for example,\n  // \"/a/b\" matches the start of \"/*/b/*/d\"\n  // Partial means, if you run out of file before you run\n  // out of pattern, then that's fine, as long as all\n  // the parts match.\n  matchOne (file, pattern, partial) {\n    var options = this.options\n\n    this.debug('matchOne',\n      { 'this': this, file: file, pattern: pattern })\n\n    this.debug('matchOne', file.length, pattern.length)\n\n    for (var fi = 0,\n        pi = 0,\n        fl = file.length,\n        pl = pattern.length\n        ; (fi < fl) && (pi < pl)\n        ; fi++, pi++) {\n      this.debug('matchOne loop')\n      var p = pattern[pi]\n      var f = file[fi]\n\n      this.debug(pattern, p, f)\n\n      // should be impossible.\n      // some invalid regexp stuff in the set.\n      /* istanbul ignore if */\n      if (p === false) return false\n\n      if (p === GLOBSTAR) {\n        this.debug('GLOBSTAR', [pattern, p, f])\n\n        // \"**\"\n        // a/**/b/**/c would match the following:\n        // a/b/x/y/z/c\n        // a/x/y/z/b/c\n        // a/b/x/b/x/c\n        // a/b/c\n        // To do this, take the rest of the pattern after\n        // the **, and see if it would match the file remainder.\n        // If so, return success.\n        // If not, the ** \"swallows\" a segment, and try again.\n        // This is recursively awful.\n        //\n        // a/**/b/**/c matching a/b/x/y/z/c\n        // - a matches a\n        // - doublestar\n        //   - matchOne(b/x/y/z/c, b/**/c)\n        //     - b matches b\n        //     - doublestar\n        //       - matchOne(x/y/z/c, c) -> no\n        //       - matchOne(y/z/c, c) -> no\n        //       - matchOne(z/c, c) -> no\n        //       - matchOne(c, c) yes, hit\n        var fr = fi\n        var pr = pi + 1\n        if (pr === pl) {\n          this.debug('** at the end')\n          // a ** at the end will just swallow the rest.\n          // We have found a match.\n          // however, it will not swallow /.x, unless\n          // options.dot is set.\n          // . and .. are *never* matched by **, for explosively\n          // exponential reasons.\n          for (; fi < fl; fi++) {\n            if (file[fi] === '.' || file[fi] === '..' ||\n              (!options.dot && file[fi].charAt(0) === '.')) return false\n          }\n          return true\n        }\n\n        // ok, let's see if we can swallow whatever we can.\n        while (fr < fl) {\n          var swallowee = file[fr]\n\n          this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n          // XXX remove this slice.  Just pass the start index.\n          if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n            this.debug('globstar found match!', fr, fl, swallowee)\n            // found a match.\n            return true\n          } else {\n            // can't swallow \".\" or \"..\" ever.\n            // can only swallow \".foo\" when explicitly asked.\n            if (swallowee === '.' || swallowee === '..' ||\n              (!options.dot && swallowee.charAt(0) === '.')) {\n              this.debug('dot detected!', file, fr, pattern, pr)\n              break\n            }\n\n            // ** swallows a segment, and continue.\n            this.debug('globstar swallow a segment, and continue')\n            fr++\n          }\n        }\n\n        // no match was found.\n        // However, in partial mode, we can't say this is necessarily over.\n        // If there's more *pattern* left, then\n        /* istanbul ignore if */\n        if (partial) {\n          // ran out of file\n          this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n          if (fr === fl) return true\n        }\n        return false\n      }\n\n      // something other than **\n      // non-magic patterns just have to match exactly\n      // patterns with magic have been turned into regexps.\n      var hit\n      if (typeof p === 'string') {\n        hit = f === p\n        this.debug('string match', p, f, hit)\n      } else {\n        hit = f.match(p)\n        this.debug('pattern match', p, f, hit)\n      }\n\n      if (!hit) return false\n    }\n\n    // Note: ending in / means that we'll get a final \"\"\n    // at the end of the pattern.  This can only match a\n    // corresponding \"\" at the end of the file.\n    // If the file ends in /, then it can only match a\n    // a pattern that ends in /, unless the pattern just\n    // doesn't have any more for it. But, a/b/ should *not*\n    // match \"a/b/*\", even though \"\" matches against the\n    // [^/]*? pattern, except in partial mode, where it might\n    // simply not be reached yet.\n    // However, a/b/ should still satisfy a/*\n\n    // now either we fell off the end of the pattern, or we're done.\n    if (fi === fl && pi === pl) {\n      // ran out of pattern and filename at the same time.\n      // an exact hit!\n      return true\n    } else if (fi === fl) {\n      // ran out of file, but still had pattern left.\n      // this is ok if we're doing the match as part of\n      // a glob fs traversal.\n      return partial\n    } else /* istanbul ignore else */ if (pi === pl) {\n      // ran out of pattern, still have file left.\n      // this is only acceptable if we're on the very last\n      // empty segment of a file with a trailing slash.\n      // a/* should match a/b/\n      return (fi === fl - 1) && (file[fi] === '')\n    }\n\n    // should be unreachable.\n    /* istanbul ignore next */\n    throw new Error('wtf?')\n  }\n\n  braceExpand () {\n    return braceExpand(this.pattern, this.options)\n  }\n\n  parse (pattern, isSub) {\n    assertValidPattern(pattern)\n\n    const options = this.options\n\n    // shortcuts\n    if (pattern === '**') {\n      if (!options.noglobstar)\n        return GLOBSTAR\n      else\n        pattern = '*'\n    }\n    if (pattern === '') return ''\n\n    let re = ''\n    let hasMagic = false\n    let escaping = false\n    // ? => one single character\n    const patternListStack = []\n    const negativeLists = []\n    let stateChar\n    let inClass = false\n    let reClassStart = -1\n    let classStart = -1\n    let cs\n    let pl\n    let sp\n    // . and .. never match anything that doesn't start with .,\n    // even when options.dot is set.  However, if the pattern\n    // starts with ., then traversal patterns can match.\n    let dotTravAllowed = pattern.charAt(0) === '.'\n    let dotFileAllowed = options.dot || dotTravAllowed\n    const patternStart = () =>\n      dotTravAllowed\n        ? ''\n        : dotFileAllowed\n        ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n        : '(?!\\\\.)'\n    const subPatternStart = (p) =>\n      p.charAt(0) === '.'\n        ? ''\n        : options.dot\n        ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n        : '(?!\\\\.)'\n\n\n    const clearStateChar = () => {\n      if (stateChar) {\n        // we had some state-tracking character\n        // that wasn't consumed by this pass.\n        switch (stateChar) {\n          case '*':\n            re += star\n            hasMagic = true\n          break\n          case '?':\n            re += qmark\n            hasMagic = true\n          break\n          default:\n            re += '\\\\' + stateChar\n          break\n        }\n        this.debug('clearStateChar %j %j', stateChar, re)\n        stateChar = false\n      }\n    }\n\n    for (let i = 0, c; (i < pattern.length) && (c = pattern.charAt(i)); i++) {\n      this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n      // skip over any that are escaped.\n      if (escaping) {\n        /* istanbul ignore next - completely not allowed, even escaped. */\n        if (c === '/') {\n          return false\n        }\n\n        if (reSpecials[c]) {\n          re += '\\\\'\n        }\n        re += c\n        escaping = false\n        continue\n      }\n\n      switch (c) {\n        /* istanbul ignore next */\n        case '/': {\n          // Should already be path-split by now.\n          return false\n        }\n\n        case '\\\\':\n          if (inClass && pattern.charAt(i + 1) === '-') {\n            re += c\n            continue\n          }\n\n          clearStateChar()\n          escaping = true\n        continue\n\n        // the various stateChar values\n        // for the \"extglob\" stuff.\n        case '?':\n        case '*':\n        case '+':\n        case '@':\n        case '!':\n          this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n          // all of those are literals inside a class, except that\n          // the glob [!a] means [^a] in regexp\n          if (inClass) {\n            this.debug('  in class')\n            if (c === '!' && i === classStart + 1) c = '^'\n            re += c\n            continue\n          }\n\n          // if we already have a stateChar, then it means\n          // that there was something like ** or +? in there.\n          // Handle the stateChar, then proceed with this one.\n          this.debug('call clearStateChar %j', stateChar)\n          clearStateChar()\n          stateChar = c\n          // if extglob is disabled, then +(asdf|foo) isn't a thing.\n          // just clear the statechar *now*, rather than even diving into\n          // the patternList stuff.\n          if (options.noext) clearStateChar()\n        continue\n\n        case '(': {\n          if (inClass) {\n            re += '('\n            continue\n          }\n\n          if (!stateChar) {\n            re += '\\\\('\n            continue\n          }\n\n          const plEntry = {\n            type: stateChar,\n            start: i - 1,\n            reStart: re.length,\n            open: plTypes[stateChar].open,\n            close: plTypes[stateChar].close,\n          }\n          this.debug(this.pattern, '\\t', plEntry)\n          patternListStack.push(plEntry)\n          // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n          re += plEntry.open\n          // next entry starts with a dot maybe?\n          if (plEntry.start === 0 && plEntry.type !== '!') {\n            dotTravAllowed = true\n            re += subPatternStart(pattern.slice(i + 1))\n          }\n          this.debug('plType %j %j', stateChar, re)\n          stateChar = false\n          continue\n        }\n\n        case ')': {\n          const plEntry = patternListStack[patternListStack.length - 1]\n          if (inClass || !plEntry) {\n            re += '\\\\)'\n            continue\n          }\n          patternListStack.pop()\n\n          // closing an extglob\n          clearStateChar()\n          hasMagic = true\n          pl = plEntry\n          // negation is (?:(?!js)[^/]*)\n          // The others are (?:<pattern>)<type>\n          re += pl.close\n          if (pl.type === '!') {\n            negativeLists.push(Object.assign(pl, { reEnd: re.length }))\n          }\n          continue\n        }\n\n        case '|': {\n          const plEntry = patternListStack[patternListStack.length - 1]\n          if (inClass || !plEntry) {\n            re += '\\\\|'\n            continue\n          }\n\n          clearStateChar()\n          re += '|'\n          // next subpattern can start with a dot?\n          if (plEntry.start === 0 && plEntry.type !== '!') {\n            dotTravAllowed = true\n            re += subPatternStart(pattern.slice(i + 1))\n          }\n          continue\n        }\n\n        // these are mostly the same in regexp and glob\n        case '[':\n          // swallow any state-tracking char before the [\n          clearStateChar()\n\n          if (inClass) {\n            re += '\\\\' + c\n            continue\n          }\n\n          inClass = true\n          classStart = i\n          reClassStart = re.length\n          re += c\n        continue\n\n        case ']':\n          //  a right bracket shall lose its special\n          //  meaning and represent itself in\n          //  a bracket expression if it occurs\n          //  first in the list.  -- POSIX.2 2.8.3.2\n          if (i === classStart + 1 || !inClass) {\n            re += '\\\\' + c\n            continue\n          }\n\n          // split where the last [ was, make sure we don't have\n          // an invalid re. if so, re-walk the contents of the\n          // would-be class to re-translate any characters that\n          // were passed through as-is\n          // TODO: It would probably be faster to determine this\n          // without a try/catch and a new RegExp, but it's tricky\n          // to do safely.  For now, this is safe and works.\n          cs = pattern.substring(classStart + 1, i)\n          try {\n            RegExp('[' + braExpEscape(charUnescape(cs)) + ']')\n            // looks good, finish up the class.\n            re += c\n          } catch (er) {\n            // out of order ranges in JS are errors, but in glob syntax,\n            // they're just a range that matches nothing.\n            re = re.substring(0, reClassStart) + '(?:$.)' // match nothing ever\n          }\n          hasMagic = true\n          inClass = false\n        continue\n\n        default:\n          // swallow any state char that wasn't consumed\n          clearStateChar()\n\n          if (reSpecials[c] && !(c === '^' && inClass)) {\n            re += '\\\\'\n          }\n\n          re += c\n          break\n\n      } // switch\n    } // for\n\n    // handle the case where we left a class open.\n    // \"[abc\" is valid, equivalent to \"\\[abc\"\n    if (inClass) {\n      // split where the last [ was, and escape it\n      // this is a huge pita.  We now have to re-walk\n      // the contents of the would-be class to re-translate\n      // any characters that were passed through as-is\n      cs = pattern.slice(classStart + 1)\n      sp = this.parse(cs, SUBPARSE)\n      re = re.substring(0, reClassStart) + '\\\\[' + sp[0]\n      hasMagic = hasMagic || sp[1]\n    }\n\n    // handle the case where we had a +( thing at the *end*\n    // of the pattern.\n    // each pattern list stack adds 3 chars, and we need to go through\n    // and escape any | chars that were passed through as-is for the regexp.\n    // Go through and escape them, taking care not to double-escape any\n    // | chars that were already escaped.\n    for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n      let tail\n      tail = re.slice(pl.reStart + pl.open.length)\n      this.debug('setting tail', re, pl)\n      // maybe some even number of \\, then maybe 1 \\, followed by a |\n      tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n        /* istanbul ignore else - should already be done */\n        if (!$2) {\n          // the | isn't already escaped, so escape it.\n          $2 = '\\\\'\n        }\n\n        // need to escape all those slashes *again*, without escaping the\n        // one that we need for escaping the | character.  As it works out,\n        // escaping an even number of slashes can be done by simply repeating\n        // it exactly after itself.  That's why this trick works.\n        //\n        // I am sorry that you have to see this.\n        return $1 + $1 + $2 + '|'\n      })\n\n      this.debug('tail=%j\\n   %s', tail, tail, pl, re)\n      const t = pl.type === '*' ? star\n        : pl.type === '?' ? qmark\n        : '\\\\' + pl.type\n\n      hasMagic = true\n      re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n    }\n\n    // handle trailing things that only matter at the very end.\n    clearStateChar()\n    if (escaping) {\n      // trailing \\\\\n      re += '\\\\\\\\'\n    }\n\n    // only need to apply the nodot start if the re starts with\n    // something that could conceivably capture a dot\n    const addPatternStart = addPatternStartSet[re.charAt(0)]\n\n    // Hack to work around lack of negative lookbehind in JS\n    // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n    // like 'a.xyz.yz' doesn't match.  So, the first negative\n    // lookahead, has to look ALL the way ahead, to the end of\n    // the pattern.\n    for (let n = negativeLists.length - 1; n > -1; n--) {\n      const nl = negativeLists[n]\n\n      const nlBefore = re.slice(0, nl.reStart)\n      const nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n      let nlAfter = re.slice(nl.reEnd)\n      const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter\n\n      // Handle nested stuff like *(*.js|!(*.json)), where open parens\n      // mean that we should *not* include the ) in the bit that is considered\n      // \"after\" the negated section.\n      const closeParensBefore = nlBefore.split(')').length\n      const openParensBefore = nlBefore.split('(').length - closeParensBefore\n      let cleanAfter = nlAfter\n      for (let i = 0; i < openParensBefore; i++) {\n        cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n      }\n      nlAfter = cleanAfter\n\n      const dollar = nlAfter === '' && isSub !== SUBPARSE ? '(?:$|\\\\/)' : ''\n\n      re = nlBefore + nlFirst + nlAfter + dollar + nlLast\n    }\n\n    // if the re is not \"\" at this point, then we need to make sure\n    // it doesn't match against an empty path part.\n    // Otherwise a/* will match a/, which it should not.\n    if (re !== '' && hasMagic) {\n      re = '(?=.)' + re\n    }\n\n    if (addPatternStart) {\n      re = patternStart() + re\n    }\n\n    // parsing just a piece of a larger pattern.\n    if (isSub === SUBPARSE) {\n      return [re, hasMagic]\n    }\n\n    // if it's nocase, and the lcase/uppercase don't match, it's magic\n    if (options.nocase && !hasMagic) {\n      hasMagic = pattern.toUpperCase() !== pattern.toLowerCase()\n    }\n\n    // skip the regexp for non-magical patterns\n    // unescape anything in it, though, so that it'll be\n    // an exact match against a file etc.\n    if (!hasMagic) {\n      return globUnescape(pattern)\n    }\n\n    const flags = options.nocase ? 'i' : ''\n    try {\n      return Object.assign(new RegExp('^' + re + '$', flags), {\n        _glob: pattern,\n        _src: re,\n      })\n    } catch (er) /* istanbul ignore next - should be impossible */ {\n      // If it was an invalid regular expression, then it can't match\n      // anything.  This trick looks for a character after the end of\n      // the string, which is of course impossible, except in multi-line\n      // mode, but it's not a /m regex.\n      return new RegExp('$.')\n    }\n  }\n\n  makeRe () {\n    if (this.regexp || this.regexp === false) return this.regexp\n\n    // at this point, this.set is a 2d array of partial\n    // pattern strings, or \"**\".\n    //\n    // It's better to use .match().  This function shouldn't\n    // be used, really, but it's pretty convenient sometimes,\n    // when you just want to work with a regex.\n    const set = this.set\n\n    if (!set.length) {\n      this.regexp = false\n      return this.regexp\n    }\n    const options = this.options\n\n    const twoStar = options.noglobstar ? star\n      : options.dot ? twoStarDot\n      : twoStarNoDot\n    const flags = options.nocase ? 'i' : ''\n\n    // coalesce globstars and regexpify non-globstar patterns\n    // if it's the only item, then we just do one twoStar\n    // if it's the first, and there are more, prepend (\\/|twoStar\\/)? to next\n    // if it's the last, append (\\/twoStar|) to previous\n    // if it's in the middle, append (\\/|\\/twoStar\\/) to previous\n    // then filter out GLOBSTAR symbols\n    let re = set.map(pattern => {\n      pattern = pattern.map(p =>\n        typeof p === 'string' ? regExpEscape(p)\n        : p === GLOBSTAR ? GLOBSTAR\n        : p._src\n      ).reduce((set, p) => {\n        if (!(set[set.length - 1] === GLOBSTAR && p === GLOBSTAR)) {\n          set.push(p)\n        }\n        return set\n      }, [])\n      pattern.forEach((p, i) => {\n        if (p !== GLOBSTAR || pattern[i-1] === GLOBSTAR) {\n          return\n        }\n        if (i === 0) {\n          if (pattern.length > 1) {\n            pattern[i+1] = '(?:\\\\\\/|' + twoStar + '\\\\\\/)?' + pattern[i+1]\n          } else {\n            pattern[i] = twoStar\n          }\n        } else if (i === pattern.length - 1) {\n          pattern[i-1] += '(?:\\\\\\/|' + twoStar + ')?'\n        } else {\n          pattern[i-1] += '(?:\\\\\\/|\\\\\\/' + twoStar + '\\\\\\/)' + pattern[i+1]\n          pattern[i+1] = GLOBSTAR\n        }\n      })\n      return pattern.filter(p => p !== GLOBSTAR).join('/')\n    }).join('|')\n\n    // must match entire pattern\n    // ending in a * or ** will make it less strict.\n    re = '^(?:' + re + ')$'\n\n    // can match anything, as long as it's not this.\n    if (this.negate) re = '^(?!' + re + ').*$'\n\n    try {\n      this.regexp = new RegExp(re, flags)\n    } catch (ex) /* istanbul ignore next - should be impossible */ {\n      this.regexp = false\n    }\n    return this.regexp\n  }\n\n  match (f, partial = this.partial) {\n    this.debug('match', f, this.pattern)\n    // short-circuit in the case of busted things.\n    // comments, etc.\n    if (this.comment) return false\n    if (this.empty) return f === ''\n\n    if (f === '/' && partial) return true\n\n    const options = this.options\n\n    // windows: need to use /, not \\\n    if (path.sep !== '/') {\n      f = f.split(path.sep).join('/')\n    }\n\n    // treat the test path as a set of pathparts.\n    f = f.split(slashSplit)\n    this.debug(this.pattern, 'split', f)\n\n    // just ONE of the pattern sets in this.set needs to match\n    // in order for it to be valid.  If negating, then just one\n    // match means that we have failed.\n    // Either way, return on the first hit.\n\n    const set = this.set\n    this.debug(this.pattern, 'set', set)\n\n    // Find the basename of the path by looking for the last non-empty segment\n    let filename\n    for (let i = f.length - 1; i >= 0; i--) {\n      filename = f[i]\n      if (filename) break\n    }\n\n    for (let i = 0; i < set.length; i++) {\n      const pattern = set[i]\n      let file = f\n      if (options.matchBase && pattern.length === 1) {\n        file = [filename]\n      }\n      const hit = this.matchOne(file, pattern, partial)\n      if (hit) {\n        if (options.flipNegate) return true\n        return !this.negate\n      }\n    }\n\n    // didn't get any hits.  this is success if it's a negative\n    // pattern, failure otherwise.\n    if (options.flipNegate) return false\n    return this.negate\n  }\n\n  static defaults (def) {\n    return minimatch.defaults(def).Minimatch\n  }\n}\n\nminimatch.Minimatch = Minimatch\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.DiagnosticFeature = exports.DiagnosticPullMode = exports.vsdiag = void 0;\nconst minimatch = require(\"minimatch\");\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst uuid_1 = require(\"./utils/uuid\");\nconst features_1 = require(\"./features\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar vsdiag;\n(function (vsdiag) {\n    let DocumentDiagnosticReportKind;\n    (function (DocumentDiagnosticReportKind) {\n        DocumentDiagnosticReportKind[\"full\"] = \"full\";\n        DocumentDiagnosticReportKind[\"unChanged\"] = \"unChanged\";\n    })(DocumentDiagnosticReportKind = vsdiag.DocumentDiagnosticReportKind || (vsdiag.DocumentDiagnosticReportKind = {}));\n})(vsdiag || (exports.vsdiag = vsdiag = {}));\nvar DiagnosticPullMode;\n(function (DiagnosticPullMode) {\n    DiagnosticPullMode[\"onType\"] = \"onType\";\n    DiagnosticPullMode[\"onSave\"] = \"onSave\";\n})(DiagnosticPullMode || (exports.DiagnosticPullMode = DiagnosticPullMode = {}));\nvar RequestStateKind;\n(function (RequestStateKind) {\n    RequestStateKind[\"active\"] = \"open\";\n    RequestStateKind[\"reschedule\"] = \"reschedule\";\n    RequestStateKind[\"outDated\"] = \"drop\";\n})(RequestStateKind || (RequestStateKind = {}));\n/**\n * Manages the open tabs. We don't directly use the tab API since for\n * diagnostics we need to de-dupe tabs that show the same resources since\n * we pull on the model not the UI.\n */\nclass Tabs {\n    constructor() {\n        this.open = new Set();\n        this._onOpen = new vscode_1.EventEmitter();\n        this._onClose = new vscode_1.EventEmitter();\n        Tabs.fillTabResources(this.open);\n        const openTabsHandler = (event) => {\n            if (event.closed.length === 0 && event.opened.length === 0) {\n                return;\n            }\n            const oldTabs = this.open;\n            const currentTabs = new Set();\n            Tabs.fillTabResources(currentTabs);\n            const closed = new Set();\n            const opened = new Set(currentTabs);\n            for (const tab of oldTabs.values()) {\n                if (currentTabs.has(tab)) {\n                    opened.delete(tab);\n                }\n                else {\n                    closed.add(tab);\n                }\n            }\n            this.open = currentTabs;\n            if (closed.size > 0) {\n                const toFire = new Set();\n                for (const item of closed) {\n                    toFire.add(vscode_1.Uri.parse(item));\n                }\n                this._onClose.fire(toFire);\n            }\n            if (opened.size > 0) {\n                const toFire = new Set();\n                for (const item of opened) {\n                    toFire.add(vscode_1.Uri.parse(item));\n                }\n                this._onOpen.fire(toFire);\n            }\n        };\n        if (vscode_1.window.tabGroups.onDidChangeTabs !== undefined) {\n            this.disposable = vscode_1.window.tabGroups.onDidChangeTabs(openTabsHandler);\n        }\n        else {\n            this.disposable = { dispose: () => { } };\n        }\n    }\n    get onClose() {\n        return this._onClose.event;\n    }\n    get onOpen() {\n        return this._onOpen.event;\n    }\n    dispose() {\n        this.disposable.dispose();\n    }\n    isActive(document) {\n        return document instanceof vscode_1.Uri\n            ? vscode_1.window.activeTextEditor?.document.uri === document\n            : vscode_1.window.activeTextEditor?.document === document;\n    }\n    isVisible(document) {\n        const uri = document instanceof vscode_1.Uri ? document : document.uri;\n        return this.open.has(uri.toString());\n    }\n    getTabResources() {\n        const result = new Set();\n        Tabs.fillTabResources(new Set(), result);\n        return result;\n    }\n    static fillTabResources(strings, uris) {\n        const seen = strings ?? new Set();\n        for (const group of vscode_1.window.tabGroups.all) {\n            for (const tab of group.tabs) {\n                const input = tab.input;\n                let uri;\n                if (input instanceof vscode_1.TabInputText) {\n                    uri = input.uri;\n                }\n                else if (input instanceof vscode_1.TabInputTextDiff) {\n                    uri = input.modified;\n                }\n                else if (input instanceof vscode_1.TabInputCustom) {\n                    uri = input.uri;\n                }\n                if (uri !== undefined && !seen.has(uri.toString())) {\n                    seen.add(uri.toString());\n                    uris !== undefined && uris.add(uri);\n                }\n            }\n        }\n    }\n}\nvar PullState;\n(function (PullState) {\n    PullState[PullState[\"document\"] = 1] = \"document\";\n    PullState[PullState[\"workspace\"] = 2] = \"workspace\";\n})(PullState || (PullState = {}));\nvar DocumentOrUri;\n(function (DocumentOrUri) {\n    function asKey(document) {\n        return document instanceof vscode_1.Uri ? document.toString() : document.uri.toString();\n    }\n    DocumentOrUri.asKey = asKey;\n})(DocumentOrUri || (DocumentOrUri = {}));\nclass DocumentPullStateTracker {\n    constructor() {\n        this.documentPullStates = new Map();\n        this.workspacePullStates = new Map();\n    }\n    track(kind, document, arg1) {\n        const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;\n        const [key, uri, version] = document instanceof vscode_1.Uri\n            ? [document.toString(), document, arg1]\n            : [document.uri.toString(), document.uri, document.version];\n        let state = states.get(key);\n        if (state === undefined) {\n            state = { document: uri, pulledVersion: version, resultId: undefined };\n            states.set(key, state);\n        }\n        return state;\n    }\n    update(kind, document, arg1, arg2) {\n        const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;\n        const [key, uri, version, resultId] = document instanceof vscode_1.Uri\n            ? [document.toString(), document, arg1, arg2]\n            : [document.uri.toString(), document.uri, document.version, arg1];\n        let state = states.get(key);\n        if (state === undefined) {\n            state = { document: uri, pulledVersion: version, resultId };\n            states.set(key, state);\n        }\n        else {\n            state.pulledVersion = version;\n            state.resultId = resultId;\n        }\n    }\n    unTrack(kind, document) {\n        const key = DocumentOrUri.asKey(document);\n        const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;\n        states.delete(key);\n    }\n    tracks(kind, document) {\n        const key = DocumentOrUri.asKey(document);\n        const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;\n        return states.has(key);\n    }\n    getResultId(kind, document) {\n        const key = DocumentOrUri.asKey(document);\n        const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;\n        return states.get(key)?.resultId;\n    }\n    getAllResultIds() {\n        const result = [];\n        for (let [uri, value] of this.workspacePullStates) {\n            if (this.documentPullStates.has(uri)) {\n                value = this.documentPullStates.get(uri);\n            }\n            if (value.resultId !== undefined) {\n                result.push({ uri, value: value.resultId });\n            }\n        }\n        return result;\n    }\n}\nclass DiagnosticRequestor {\n    constructor(client, tabs, options) {\n        this.client = client;\n        this.tabs = tabs;\n        this.options = options;\n        this.isDisposed = false;\n        this.onDidChangeDiagnosticsEmitter = new vscode_1.EventEmitter();\n        this.provider = this.createProvider();\n        this.diagnostics = vscode_1.languages.createDiagnosticCollection(options.identifier);\n        this.openRequests = new Map();\n        this.documentStates = new DocumentPullStateTracker();\n        this.workspaceErrorCounter = 0;\n    }\n    knows(kind, document) {\n        const uri = document instanceof vscode_1.Uri ? document : document.uri;\n        return this.documentStates.tracks(kind, document) || this.openRequests.has(uri.toString());\n    }\n    forget(kind, document) {\n        this.documentStates.unTrack(kind, document);\n    }\n    pull(document, cb) {\n        if (this.isDisposed) {\n            return;\n        }\n        const uri = document instanceof vscode_1.Uri ? document : document.uri;\n        this.pullAsync(document).then(() => {\n            if (cb) {\n                cb();\n            }\n        }, (error) => {\n            this.client.error(`Document pull failed for text document ${uri.toString()}`, error, false);\n        });\n    }\n    async pullAsync(document, version) {\n        if (this.isDisposed) {\n            return;\n        }\n        const isUri = document instanceof vscode_1.Uri;\n        const uri = isUri ? document : document.uri;\n        const key = uri.toString();\n        version = isUri ? version : document.version;\n        const currentRequestState = this.openRequests.get(key);\n        const documentState = isUri\n            ? this.documentStates.track(PullState.document, document, version)\n            : this.documentStates.track(PullState.document, document);\n        if (currentRequestState === undefined) {\n            const tokenSource = new vscode_1.CancellationTokenSource();\n            this.openRequests.set(key, { state: RequestStateKind.active, document: document, version: version, tokenSource });\n            let report;\n            let afterState;\n            try {\n                report = await this.provider.provideDiagnostics(document, documentState.resultId, tokenSource.token) ?? { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };\n            }\n            catch (error) {\n                if (error instanceof features_1.LSPCancellationError && vscode_languageserver_protocol_1.DiagnosticServerCancellationData.is(error.data) && error.data.retriggerRequest === false) {\n                    afterState = { state: RequestStateKind.outDated, document };\n                }\n                if (afterState === undefined && error instanceof vscode_1.CancellationError) {\n                    afterState = { state: RequestStateKind.reschedule, document };\n                }\n                else {\n                    throw error;\n                }\n            }\n            afterState = afterState ?? this.openRequests.get(key);\n            if (afterState === undefined) {\n                // This shouldn't happen. Log it\n                this.client.error(`Lost request state in diagnostic pull model. Clearing diagnostics for ${key}`);\n                this.diagnostics.delete(uri);\n                return;\n            }\n            this.openRequests.delete(key);\n            if (!this.tabs.isVisible(document)) {\n                this.documentStates.unTrack(PullState.document, document);\n                return;\n            }\n            if (afterState.state === RequestStateKind.outDated) {\n                return;\n            }\n            // report is only undefined if the request has thrown.\n            if (report !== undefined) {\n                if (report.kind === vsdiag.DocumentDiagnosticReportKind.full) {\n                    this.diagnostics.set(uri, report.items);\n                }\n                documentState.pulledVersion = version;\n                documentState.resultId = report.resultId;\n            }\n            if (afterState.state === RequestStateKind.reschedule) {\n                this.pull(document);\n            }\n        }\n        else {\n            if (currentRequestState.state === RequestStateKind.active) {\n                // Cancel the current request and reschedule a new one when the old one returned.\n                currentRequestState.tokenSource.cancel();\n                this.openRequests.set(key, { state: RequestStateKind.reschedule, document: currentRequestState.document });\n            }\n            else if (currentRequestState.state === RequestStateKind.outDated) {\n                this.openRequests.set(key, { state: RequestStateKind.reschedule, document: currentRequestState.document });\n            }\n        }\n    }\n    forgetDocument(document) {\n        const uri = document instanceof vscode_1.Uri ? document : document.uri;\n        const key = uri.toString();\n        const request = this.openRequests.get(key);\n        if (this.options.workspaceDiagnostics) {\n            // If we run workspace diagnostic pull a last time for the diagnostics\n            // and the rely on getting them from the workspace result.\n            if (request !== undefined) {\n                this.openRequests.set(key, { state: RequestStateKind.reschedule, document: document });\n            }\n            else {\n                this.pull(document, () => {\n                    this.forget(PullState.document, document);\n                });\n            }\n        }\n        else {\n            // We have normal pull or inter file dependencies. In this case we\n            // clear the diagnostics (to have the same start as after startup).\n            // We also cancel outstanding requests.\n            if (request !== undefined) {\n                if (request.state === RequestStateKind.active) {\n                    request.tokenSource.cancel();\n                }\n                this.openRequests.set(key, { state: RequestStateKind.outDated, document: document });\n            }\n            this.diagnostics.delete(uri);\n            this.forget(PullState.document, document);\n        }\n    }\n    pullWorkspace() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.pullWorkspaceAsync().then(() => {\n            this.workspaceTimeout = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {\n                this.pullWorkspace();\n            }, 2000);\n        }, (error) => {\n            if (!(error instanceof features_1.LSPCancellationError) && !vscode_languageserver_protocol_1.DiagnosticServerCancellationData.is(error.data)) {\n                this.client.error(`Workspace diagnostic pull failed.`, error, false);\n                this.workspaceErrorCounter++;\n            }\n            if (this.workspaceErrorCounter <= 5) {\n                this.workspaceTimeout = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {\n                    this.pullWorkspace();\n                }, 2000);\n            }\n        });\n    }\n    async pullWorkspaceAsync() {\n        if (!this.provider.provideWorkspaceDiagnostics || this.isDisposed) {\n            return;\n        }\n        if (this.workspaceCancellation !== undefined) {\n            this.workspaceCancellation.cancel();\n            this.workspaceCancellation = undefined;\n        }\n        this.workspaceCancellation = new vscode_1.CancellationTokenSource();\n        const previousResultIds = this.documentStates.getAllResultIds().map((item) => {\n            return {\n                uri: this.client.protocol2CodeConverter.asUri(item.uri),\n                value: item.value\n            };\n        });\n        await this.provider.provideWorkspaceDiagnostics(previousResultIds, this.workspaceCancellation.token, (chunk) => {\n            if (!chunk || this.isDisposed) {\n                return;\n            }\n            for (const item of chunk.items) {\n                if (item.kind === vsdiag.DocumentDiagnosticReportKind.full) {\n                    // Favour document pull result over workspace results. So skip if it is tracked\n                    // as a document result.\n                    if (!this.documentStates.tracks(PullState.document, item.uri)) {\n                        this.diagnostics.set(item.uri, item.items);\n                    }\n                }\n                this.documentStates.update(PullState.workspace, item.uri, item.version ?? undefined, item.resultId);\n            }\n        });\n    }\n    createProvider() {\n        const result = {\n            onDidChangeDiagnostics: this.onDidChangeDiagnosticsEmitter.event,\n            provideDiagnostics: (document, previousResultId, token) => {\n                const provideDiagnostics = (document, previousResultId, token) => {\n                    const params = {\n                        identifier: this.options.identifier,\n                        textDocument: { uri: this.client.code2ProtocolConverter.asUri(document instanceof vscode_1.Uri ? document : document.uri) },\n                        previousResultId: previousResultId\n                    };\n                    if (this.isDisposed === true || !this.client.isRunning()) {\n                        return { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };\n                    }\n                    return this.client.sendRequest(vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type, params, token).then(async (result) => {\n                        if (result === undefined || result === null || this.isDisposed || token.isCancellationRequested) {\n                            return { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };\n                        }\n                        if (result.kind === vscode_languageserver_protocol_1.DocumentDiagnosticReportKind.Full) {\n                            return { kind: vsdiag.DocumentDiagnosticReportKind.full, resultId: result.resultId, items: await this.client.protocol2CodeConverter.asDiagnostics(result.items, token) };\n                        }\n                        else {\n                            return { kind: vsdiag.DocumentDiagnosticReportKind.unChanged, resultId: result.resultId };\n                        }\n                    }, (error) => {\n                        return this.client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type, token, error, { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] });\n                    });\n                };\n                const middleware = this.client.middleware;\n                return middleware.provideDiagnostics\n                    ? middleware.provideDiagnostics(document, previousResultId, token, provideDiagnostics)\n                    : provideDiagnostics(document, previousResultId, token);\n            }\n        };\n        if (this.options.workspaceDiagnostics) {\n            result.provideWorkspaceDiagnostics = (resultIds, token, resultReporter) => {\n                const convertReport = async (report) => {\n                    if (report.kind === vscode_languageserver_protocol_1.DocumentDiagnosticReportKind.Full) {\n                        return {\n                            kind: vsdiag.DocumentDiagnosticReportKind.full,\n                            uri: this.client.protocol2CodeConverter.asUri(report.uri),\n                            resultId: report.resultId,\n                            version: report.version,\n                            items: await this.client.protocol2CodeConverter.asDiagnostics(report.items, token)\n                        };\n                    }\n                    else {\n                        return {\n                            kind: vsdiag.DocumentDiagnosticReportKind.unChanged,\n                            uri: this.client.protocol2CodeConverter.asUri(report.uri),\n                            resultId: report.resultId,\n                            version: report.version\n                        };\n                    }\n                };\n                const convertPreviousResultIds = (resultIds) => {\n                    const converted = [];\n                    for (const item of resultIds) {\n                        converted.push({ uri: this.client.code2ProtocolConverter.asUri(item.uri), value: item.value });\n                    }\n                    return converted;\n                };\n                const provideDiagnostics = (resultIds, token) => {\n                    const partialResultToken = (0, uuid_1.generateUuid)();\n                    const disposable = this.client.onProgress(vscode_languageserver_protocol_1.WorkspaceDiagnosticRequest.partialResult, partialResultToken, async (partialResult) => {\n                        if (partialResult === undefined || partialResult === null) {\n                            resultReporter(null);\n                            return;\n                        }\n                        const converted = {\n                            items: []\n                        };\n                        for (const item of partialResult.items) {\n                            try {\n                                converted.items.push(await convertReport(item));\n                            }\n                            catch (error) {\n                                this.client.error(`Converting workspace diagnostics failed.`, error);\n                            }\n                        }\n                        resultReporter(converted);\n                    });\n                    const params = {\n                        identifier: this.options.identifier,\n                        previousResultIds: convertPreviousResultIds(resultIds),\n                        partialResultToken: partialResultToken\n                    };\n                    if (this.isDisposed === true || !this.client.isRunning()) {\n                        return { items: [] };\n                    }\n                    return this.client.sendRequest(vscode_languageserver_protocol_1.WorkspaceDiagnosticRequest.type, params, token).then(async (result) => {\n                        if (token.isCancellationRequested) {\n                            return { items: [] };\n                        }\n                        const converted = {\n                            items: []\n                        };\n                        for (const item of result.items) {\n                            converted.items.push(await convertReport(item));\n                        }\n                        disposable.dispose();\n                        resultReporter(converted);\n                        return { items: [] };\n                    }, (error) => {\n                        disposable.dispose();\n                        return this.client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type, token, error, { items: [] });\n                    });\n                };\n                const middleware = this.client.middleware;\n                return middleware.provideWorkspaceDiagnostics\n                    ? middleware.provideWorkspaceDiagnostics(resultIds, token, resultReporter, provideDiagnostics)\n                    : provideDiagnostics(resultIds, token, resultReporter);\n            };\n        }\n        return result;\n    }\n    dispose() {\n        this.isDisposed = true;\n        // Cancel and clear workspace pull if present.\n        this.workspaceCancellation?.cancel();\n        this.workspaceTimeout?.dispose();\n        // Cancel all request and mark open requests as outdated.\n        for (const [key, request] of this.openRequests) {\n            if (request.state === RequestStateKind.active) {\n                request.tokenSource.cancel();\n            }\n            this.openRequests.set(key, { state: RequestStateKind.outDated, document: request.document });\n        }\n        // cleanup old diagnostics\n        this.diagnostics.dispose();\n    }\n}\nclass BackgroundScheduler {\n    constructor(diagnosticRequestor) {\n        this.diagnosticRequestor = diagnosticRequestor;\n        this.documents = new vscode_languageserver_protocol_1.LinkedMap();\n        this.isDisposed = false;\n    }\n    add(document) {\n        if (this.isDisposed === true) {\n            return;\n        }\n        const key = DocumentOrUri.asKey(document);\n        if (this.documents.has(key)) {\n            return;\n        }\n        this.documents.set(key, document, vscode_languageserver_protocol_1.Touch.Last);\n        this.trigger();\n    }\n    remove(document) {\n        const key = DocumentOrUri.asKey(document);\n        this.documents.delete(key);\n        // No more documents. Stop background activity.\n        if (this.documents.size === 0) {\n            this.stop();\n        }\n        else if (key === this.endDocumentKey()) {\n            // Make sure we have a correct last document. It could have\n            this.endDocument = this.documents.last;\n        }\n    }\n    trigger() {\n        if (this.isDisposed === true) {\n            return;\n        }\n        // We have a round running. So simply make sure we run up to the\n        // last document\n        if (this.intervalHandle !== undefined) {\n            this.endDocument = this.documents.last;\n            return;\n        }\n        this.endDocument = this.documents.last;\n        this.intervalHandle = (0, vscode_languageserver_protocol_1.RAL)().timer.setInterval(() => {\n            const document = this.documents.first;\n            if (document !== undefined) {\n                const key = DocumentOrUri.asKey(document);\n                this.diagnosticRequestor.pull(document);\n                this.documents.set(key, document, vscode_languageserver_protocol_1.Touch.Last);\n                if (key === this.endDocumentKey()) {\n                    this.stop();\n                }\n            }\n        }, 200);\n    }\n    dispose() {\n        this.isDisposed = true;\n        this.stop();\n        this.documents.clear();\n    }\n    stop() {\n        this.intervalHandle?.dispose();\n        this.intervalHandle = undefined;\n        this.endDocument = undefined;\n    }\n    endDocumentKey() {\n        return this.endDocument !== undefined ? DocumentOrUri.asKey(this.endDocument) : undefined;\n    }\n}\nclass DiagnosticFeatureProviderImpl {\n    constructor(client, tabs, options) {\n        const diagnosticPullOptions = client.clientOptions.diagnosticPullOptions ?? { onChange: true, onSave: false };\n        const documentSelector = client.protocol2CodeConverter.asDocumentSelector(options.documentSelector);\n        const disposables = [];\n        const matchResource = (resource) => {\n            const selector = options.documentSelector;\n            if (diagnosticPullOptions.match !== undefined) {\n                return diagnosticPullOptions.match(selector, resource);\n            }\n            for (const filter of selector) {\n                if (!vscode_languageserver_protocol_1.TextDocumentFilter.is(filter)) {\n                    continue;\n                }\n                // The filter is a language id. We can't determine if it matches\n                // so we return false.\n                if (typeof filter === 'string') {\n                    return false;\n                }\n                if (filter.language !== undefined && filter.language !== '*') {\n                    return false;\n                }\n                if (filter.scheme !== undefined && filter.scheme !== '*' && filter.scheme !== resource.scheme) {\n                    return false;\n                }\n                if (filter.pattern !== undefined) {\n                    const matcher = new minimatch.Minimatch(filter.pattern, { noext: true });\n                    if (!matcher.makeRe()) {\n                        return false;\n                    }\n                    if (!matcher.match(resource.fsPath)) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        };\n        const matches = (document) => {\n            return document instanceof vscode_1.Uri\n                ? matchResource(document)\n                : vscode_1.languages.match(documentSelector, document) > 0 && tabs.isVisible(document);\n        };\n        const isActiveDocument = (document) => {\n            return document instanceof vscode_1.Uri\n                ? this.activeTextDocument?.uri.toString() === document.toString()\n                : this.activeTextDocument === document;\n        };\n        this.diagnosticRequestor = new DiagnosticRequestor(client, tabs, options);\n        this.backgroundScheduler = new BackgroundScheduler(this.diagnosticRequestor);\n        const addToBackgroundIfNeeded = (document) => {\n            if (!matches(document) || !options.interFileDependencies || isActiveDocument(document)) {\n                return;\n            }\n            this.backgroundScheduler.add(document);\n        };\n        this.activeTextDocument = vscode_1.window.activeTextEditor?.document;\n        vscode_1.window.onDidChangeActiveTextEditor((editor) => {\n            const oldActive = this.activeTextDocument;\n            this.activeTextDocument = editor?.document;\n            if (oldActive !== undefined) {\n                addToBackgroundIfNeeded(oldActive);\n            }\n            if (this.activeTextDocument !== undefined) {\n                this.backgroundScheduler.remove(this.activeTextDocument);\n            }\n        });\n        // For pull model diagnostics we pull for documents visible in the UI.\n        // From an eventing point of view we still rely on open document events\n        // and filter the documents that are not visible in the UI instead of\n        // listening to Tab events. Major reason is event timing since we need\n        // to ensure that the pull is send after the document open has reached\n        // the server.\n        // We always pull on open.\n        const openFeature = client.getFeature(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.method);\n        disposables.push(openFeature.onNotificationSent((event) => {\n            const textDocument = event.textDocument;\n            // We already know about this document. This can happen via a tab open.\n            if (this.diagnosticRequestor.knows(PullState.document, textDocument)) {\n                return;\n            }\n            if (matches(textDocument)) {\n                this.diagnosticRequestor.pull(textDocument, () => { addToBackgroundIfNeeded(textDocument); });\n            }\n        }));\n        disposables.push(tabs.onOpen((opened) => {\n            for (const resource of opened) {\n                // We already know about this document. This can happen via a document open.\n                if (this.diagnosticRequestor.knows(PullState.document, resource)) {\n                    continue;\n                }\n                const uriStr = resource.toString();\n                let textDocument;\n                for (const item of vscode_1.workspace.textDocuments) {\n                    if (uriStr === item.uri.toString()) {\n                        textDocument = item;\n                        break;\n                    }\n                }\n                // In VS Code the event timing is as follows:\n                // 1. tab events are fired.\n                // 2. open document events are fired and internal data structures like\n                //    workspace.textDocuments and Window.activeTextEditor are updated.\n                //\n                // This means: for newly created tab/editors we don't find the underlying\n                // document yet. So we do nothing an rely on the underlying open document event\n                // to be fired.\n                if (textDocument !== undefined && matches(textDocument)) {\n                    this.diagnosticRequestor.pull(textDocument, () => { addToBackgroundIfNeeded(textDocument); });\n                }\n            }\n        }));\n        // Pull all diagnostics for documents that are already open\n        const pulledTextDocuments = new Set();\n        for (const textDocument of vscode_1.workspace.textDocuments) {\n            if (matches(textDocument)) {\n                this.diagnosticRequestor.pull(textDocument, () => { addToBackgroundIfNeeded(textDocument); });\n                pulledTextDocuments.add(textDocument.uri.toString());\n            }\n        }\n        // Pull all tabs if not already pulled as text document\n        if (diagnosticPullOptions.onTabs === true) {\n            for (const resource of tabs.getTabResources()) {\n                if (!pulledTextDocuments.has(resource.toString()) && matches(resource)) {\n                    this.diagnosticRequestor.pull(resource, () => { addToBackgroundIfNeeded(resource); });\n                }\n            }\n        }\n        // We don't need to pull on tab open since we will receive a document open as well later on\n        // and that event allows us to use a document for a match check which will have a set\n        // language id.\n        if (diagnosticPullOptions.onChange === true) {\n            const changeFeature = client.getFeature(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.method);\n            disposables.push(changeFeature.onNotificationSent(async (event) => {\n                const textDocument = event.textDocument;\n                if ((diagnosticPullOptions.filter === undefined || !diagnosticPullOptions.filter(textDocument, DiagnosticPullMode.onType)) && this.diagnosticRequestor.knows(PullState.document, textDocument)) {\n                    this.diagnosticRequestor.pull(textDocument, () => { this.backgroundScheduler.trigger(); });\n                }\n            }));\n        }\n        if (diagnosticPullOptions.onSave === true) {\n            const saveFeature = client.getFeature(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.method);\n            disposables.push(saveFeature.onNotificationSent((event) => {\n                const textDocument = event.textDocument;\n                if ((diagnosticPullOptions.filter === undefined || !diagnosticPullOptions.filter(textDocument, DiagnosticPullMode.onSave)) && this.diagnosticRequestor.knows(PullState.document, textDocument)) {\n                    this.diagnosticRequestor.pull(event.textDocument, () => { this.backgroundScheduler.trigger(); });\n                }\n            }));\n        }\n        // When the document closes clear things up\n        const closeFeature = client.getFeature(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.method);\n        disposables.push(closeFeature.onNotificationSent((event) => {\n            this.cleanUpDocument(event.textDocument);\n        }));\n        // Same when a tabs closes.\n        tabs.onClose((closed) => {\n            for (const document of closed) {\n                this.cleanUpDocument(document);\n            }\n        });\n        // We received a did change from the server.\n        this.diagnosticRequestor.onDidChangeDiagnosticsEmitter.event(() => {\n            for (const textDocument of vscode_1.workspace.textDocuments) {\n                if (matches(textDocument)) {\n                    this.diagnosticRequestor.pull(textDocument);\n                }\n            }\n        });\n        // da348dc5-c30a-4515-9d98-31ff3be38d14 is the test UUID to test the middle ware. So don't auto trigger pulls.\n        if (options.workspaceDiagnostics === true && options.identifier !== 'da348dc5-c30a-4515-9d98-31ff3be38d14') {\n            this.diagnosticRequestor.pullWorkspace();\n        }\n        this.disposable = vscode_1.Disposable.from(...disposables, this.backgroundScheduler, this.diagnosticRequestor);\n    }\n    get onDidChangeDiagnosticsEmitter() {\n        return this.diagnosticRequestor.onDidChangeDiagnosticsEmitter;\n    }\n    get diagnostics() {\n        return this.diagnosticRequestor.provider;\n    }\n    cleanUpDocument(document) {\n        if (this.diagnosticRequestor.knows(PullState.document, document)) {\n            this.diagnosticRequestor.forgetDocument(document);\n            this.backgroundScheduler.remove(document);\n        }\n    }\n}\nclass DiagnosticFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let capability = ensure(ensure(capabilities, 'textDocument'), 'diagnostic');\n        capability.dynamicRegistration = true;\n        // We first need to decide how a UI will look with related documents.\n        // An easy implementation would be to only show related diagnostics for\n        // the active editor.\n        capability.relatedDocumentSupport = false;\n        ensure(ensure(capabilities, 'workspace'), 'diagnostics').refreshSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.DiagnosticRefreshRequest.type, async () => {\n            for (const provider of this.getAllProviders()) {\n                provider.onDidChangeDiagnosticsEmitter.fire();\n            }\n        });\n        let [id, options] = this.getRegistration(documentSelector, capabilities.diagnosticProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    clear() {\n        if (this.tabs !== undefined) {\n            this.tabs.dispose();\n            this.tabs = undefined;\n        }\n        super.clear();\n    }\n    registerLanguageProvider(options) {\n        if (this.tabs === undefined) {\n            this.tabs = new Tabs();\n        }\n        const provider = new DiagnosticFeatureProviderImpl(this._client, this.tabs, options);\n        return [provider.disposable, provider];\n    }\n}\nexports.DiagnosticFeature = DiagnosticFeature;\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.NotebookDocumentSyncFeature = void 0;\nconst vscode = require(\"vscode\");\nconst minimatch = require(\"minimatch\");\nconst proto = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nconst Is = require(\"./utils/is\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar Converter;\n(function (Converter) {\n    let c2p;\n    (function (c2p) {\n        function asVersionedNotebookDocumentIdentifier(notebookDocument, base) {\n            return {\n                version: notebookDocument.version,\n                uri: base.asUri(notebookDocument.uri)\n            };\n        }\n        c2p.asVersionedNotebookDocumentIdentifier = asVersionedNotebookDocumentIdentifier;\n        function asNotebookDocument(notebookDocument, cells, base) {\n            const result = proto.NotebookDocument.create(base.asUri(notebookDocument.uri), notebookDocument.notebookType, notebookDocument.version, asNotebookCells(cells, base));\n            if (Object.keys(notebookDocument.metadata).length > 0) {\n                result.metadata = asMetadata(notebookDocument.metadata);\n            }\n            return result;\n        }\n        c2p.asNotebookDocument = asNotebookDocument;\n        function asNotebookCells(cells, base) {\n            return cells.map(cell => asNotebookCell(cell, base));\n        }\n        c2p.asNotebookCells = asNotebookCells;\n        function asMetadata(metadata) {\n            const seen = new Set();\n            return deepCopy(seen, metadata);\n        }\n        c2p.asMetadata = asMetadata;\n        function asNotebookCell(cell, base) {\n            const result = proto.NotebookCell.create(asNotebookCellKind(cell.kind), base.asUri(cell.document.uri));\n            if (Object.keys(cell.metadata).length > 0) {\n                result.metadata = asMetadata(cell.metadata);\n            }\n            if (cell.executionSummary !== undefined && (Is.number(cell.executionSummary.executionOrder) && Is.boolean(cell.executionSummary.success))) {\n                result.executionSummary = {\n                    executionOrder: cell.executionSummary.executionOrder,\n                    success: cell.executionSummary.success\n                };\n            }\n            return result;\n        }\n        c2p.asNotebookCell = asNotebookCell;\n        function asNotebookCellKind(kind) {\n            switch (kind) {\n                case vscode.NotebookCellKind.Markup:\n                    return proto.NotebookCellKind.Markup;\n                case vscode.NotebookCellKind.Code:\n                    return proto.NotebookCellKind.Code;\n            }\n        }\n        function deepCopy(seen, value) {\n            if (seen.has(value)) {\n                throw new Error(`Can't deep copy cyclic structures.`);\n            }\n            if (Array.isArray(value)) {\n                const result = [];\n                for (const elem of value) {\n                    if (elem !== null && typeof elem === 'object' || Array.isArray(elem)) {\n                        result.push(deepCopy(seen, elem));\n                    }\n                    else {\n                        if (elem instanceof RegExp) {\n                            throw new Error(`Can't transfer regular expressions to the server`);\n                        }\n                        result.push(elem);\n                    }\n                }\n                return result;\n            }\n            else {\n                const props = Object.keys(value);\n                const result = Object.create(null);\n                for (const prop of props) {\n                    const elem = value[prop];\n                    if (elem !== null && typeof elem === 'object' || Array.isArray(elem)) {\n                        result[prop] = deepCopy(seen, elem);\n                    }\n                    else {\n                        if (elem instanceof RegExp) {\n                            throw new Error(`Can't transfer regular expressions to the server`);\n                        }\n                        result[prop] = elem;\n                    }\n                }\n                return result;\n            }\n        }\n        function asTextContentChange(event, base) {\n            const params = base.asChangeTextDocumentParams(event, event.document.uri, event.document.version);\n            return { document: params.textDocument, changes: params.contentChanges };\n        }\n        c2p.asTextContentChange = asTextContentChange;\n        function asNotebookDocumentChangeEvent(event, base) {\n            const result = Object.create(null);\n            if (event.metadata) {\n                result.metadata = Converter.c2p.asMetadata(event.metadata);\n            }\n            if (event.cells !== undefined) {\n                const cells = Object.create(null);\n                const changedCells = event.cells;\n                if (changedCells.structure) {\n                    cells.structure = {\n                        array: {\n                            start: changedCells.structure.array.start,\n                            deleteCount: changedCells.structure.array.deleteCount,\n                            cells: changedCells.structure.array.cells !== undefined ? changedCells.structure.array.cells.map(cell => Converter.c2p.asNotebookCell(cell, base)) : undefined\n                        },\n                        didOpen: changedCells.structure.didOpen !== undefined\n                            ? changedCells.structure.didOpen.map(cell => base.asOpenTextDocumentParams(cell.document).textDocument)\n                            : undefined,\n                        didClose: changedCells.structure.didClose !== undefined\n                            ? changedCells.structure.didClose.map(cell => base.asCloseTextDocumentParams(cell.document).textDocument)\n                            : undefined\n                    };\n                }\n                if (changedCells.data !== undefined) {\n                    cells.data = changedCells.data.map(cell => Converter.c2p.asNotebookCell(cell, base));\n                }\n                if (changedCells.textContent !== undefined) {\n                    cells.textContent = changedCells.textContent.map(event => Converter.c2p.asTextContentChange(event, base));\n                }\n                if (Object.keys(cells).length > 0) {\n                    result.cells = cells;\n                }\n            }\n            return result;\n        }\n        c2p.asNotebookDocumentChangeEvent = asNotebookDocumentChangeEvent;\n    })(c2p = Converter.c2p || (Converter.c2p = {}));\n})(Converter || (Converter = {}));\nvar $NotebookCell;\n(function ($NotebookCell) {\n    function computeDiff(originalCells, modifiedCells, compareMetadata) {\n        const originalLength = originalCells.length;\n        const modifiedLength = modifiedCells.length;\n        let startIndex = 0;\n        while (startIndex < modifiedLength && startIndex < originalLength && equals(originalCells[startIndex], modifiedCells[startIndex], compareMetadata)) {\n            startIndex++;\n        }\n        if (startIndex < modifiedLength && startIndex < originalLength) {\n            let originalEndIndex = originalLength - 1;\n            let modifiedEndIndex = modifiedLength - 1;\n            while (originalEndIndex >= 0 && modifiedEndIndex >= 0 && equals(originalCells[originalEndIndex], modifiedCells[modifiedEndIndex], compareMetadata)) {\n                originalEndIndex--;\n                modifiedEndIndex--;\n            }\n            const deleteCount = (originalEndIndex + 1) - startIndex;\n            const newCells = startIndex === modifiedEndIndex + 1 ? undefined : modifiedCells.slice(startIndex, modifiedEndIndex + 1);\n            return newCells !== undefined ? { start: startIndex, deleteCount, cells: newCells } : { start: startIndex, deleteCount };\n        }\n        else if (startIndex < modifiedLength) {\n            return { start: startIndex, deleteCount: 0, cells: modifiedCells.slice(startIndex) };\n        }\n        else if (startIndex < originalLength) {\n            return { start: startIndex, deleteCount: originalLength - startIndex };\n        }\n        else {\n            // The two arrays are the same.\n            return undefined;\n        }\n    }\n    $NotebookCell.computeDiff = computeDiff;\n    /**\n     * We only sync kind, document, execution and metadata to the server. So we only need to compare those.\n     */\n    function equals(one, other, compareMetaData = true) {\n        if (one.kind !== other.kind || one.document.uri.toString() !== other.document.uri.toString() || one.document.languageId !== other.document.languageId ||\n            !equalsExecution(one.executionSummary, other.executionSummary)) {\n            return false;\n        }\n        return !compareMetaData || (compareMetaData && equalsMetadata(one.metadata, other.metadata));\n    }\n    function equalsExecution(one, other) {\n        if (one === other) {\n            return true;\n        }\n        if (one === undefined || other === undefined) {\n            return false;\n        }\n        return one.executionOrder === other.executionOrder && one.success === other.success && equalsTiming(one.timing, other.timing);\n    }\n    function equalsTiming(one, other) {\n        if (one === other) {\n            return true;\n        }\n        if (one === undefined || other === undefined) {\n            return false;\n        }\n        return one.startTime === other.startTime && one.endTime === other.endTime;\n    }\n    function equalsMetadata(one, other) {\n        if (one === other) {\n            return true;\n        }\n        if (one === null || one === undefined || other === null || other === undefined) {\n            return false;\n        }\n        if (typeof one !== typeof other) {\n            return false;\n        }\n        if (typeof one !== 'object') {\n            return false;\n        }\n        const oneArray = Array.isArray(one);\n        const otherArray = Array.isArray(other);\n        if (oneArray !== otherArray) {\n            return false;\n        }\n        if (oneArray && otherArray) {\n            if (one.length !== other.length) {\n                return false;\n            }\n            for (let i = 0; i < one.length; i++) {\n                if (!equalsMetadata(one[i], other[i])) {\n                    return false;\n                }\n            }\n        }\n        if (isObjectLiteral(one) && isObjectLiteral(other)) {\n            const oneKeys = Object.keys(one);\n            const otherKeys = Object.keys(other);\n            if (oneKeys.length !== otherKeys.length) {\n                return false;\n            }\n            oneKeys.sort();\n            otherKeys.sort();\n            if (!equalsMetadata(oneKeys, otherKeys)) {\n                return false;\n            }\n            for (let i = 0; i < oneKeys.length; i++) {\n                const prop = oneKeys[i];\n                if (!equalsMetadata(one[prop], other[prop])) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n    function isObjectLiteral(value) {\n        return value !== null && typeof value === 'object';\n    }\n    $NotebookCell.isObjectLiteral = isObjectLiteral;\n})($NotebookCell || ($NotebookCell = {}));\nvar $NotebookDocumentFilter;\n(function ($NotebookDocumentFilter) {\n    function matchNotebook(filter, notebookDocument) {\n        if (typeof filter === 'string') {\n            return filter === '*' || notebookDocument.notebookType === filter;\n        }\n        if (filter.notebookType !== undefined && filter.notebookType !== '*' && notebookDocument.notebookType !== filter.notebookType) {\n            return false;\n        }\n        const uri = notebookDocument.uri;\n        if (filter.scheme !== undefined && filter.scheme !== '*' && uri.scheme !== filter.scheme) {\n            return false;\n        }\n        if (filter.pattern !== undefined) {\n            const matcher = new minimatch.Minimatch(filter.pattern, { noext: true });\n            if (!matcher.makeRe()) {\n                return false;\n            }\n            if (!matcher.match(uri.fsPath)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    $NotebookDocumentFilter.matchNotebook = matchNotebook;\n})($NotebookDocumentFilter || ($NotebookDocumentFilter = {}));\nvar $NotebookDocumentSyncOptions;\n(function ($NotebookDocumentSyncOptions) {\n    function asDocumentSelector(options) {\n        const selector = options.notebookSelector;\n        const result = [];\n        for (const element of selector) {\n            const notebookType = (typeof element.notebook === 'string' ? element.notebook : element.notebook?.notebookType) ?? '*';\n            const scheme = (typeof element.notebook === 'string') ? undefined : element.notebook?.scheme;\n            const pattern = (typeof element.notebook === 'string') ? undefined : element.notebook?.pattern;\n            if (element.cells !== undefined) {\n                for (const cell of element.cells) {\n                    result.push(asDocumentFilter(notebookType, scheme, pattern, cell.language));\n                }\n            }\n            else {\n                result.push(asDocumentFilter(notebookType, scheme, pattern, undefined));\n            }\n        }\n        return result;\n    }\n    $NotebookDocumentSyncOptions.asDocumentSelector = asDocumentSelector;\n    function asDocumentFilter(notebookType, scheme, pattern, language) {\n        return scheme === undefined && pattern === undefined\n            ? { notebook: notebookType, language }\n            : { notebook: { notebookType, scheme, pattern }, language };\n    }\n})($NotebookDocumentSyncOptions || ($NotebookDocumentSyncOptions = {}));\nvar SyncInfo;\n(function (SyncInfo) {\n    function create(cells) {\n        return {\n            cells,\n            uris: new Set(cells.map(cell => cell.document.uri.toString()))\n        };\n    }\n    SyncInfo.create = create;\n})(SyncInfo || (SyncInfo = {}));\nclass NotebookDocumentSyncFeatureProvider {\n    constructor(client, options) {\n        this.client = client;\n        this.options = options;\n        this.notebookSyncInfo = new Map();\n        this.notebookDidOpen = new Set();\n        this.disposables = [];\n        this.selector = client.protocol2CodeConverter.asDocumentSelector($NotebookDocumentSyncOptions.asDocumentSelector(options));\n        // open\n        vscode.workspace.onDidOpenNotebookDocument((notebookDocument) => {\n            this.notebookDidOpen.add(notebookDocument.uri.toString());\n            this.didOpen(notebookDocument);\n        }, undefined, this.disposables);\n        for (const notebookDocument of vscode.workspace.notebookDocuments) {\n            this.notebookDidOpen.add(notebookDocument.uri.toString());\n            this.didOpen(notebookDocument);\n        }\n        // Notebook document changed.\n        vscode.workspace.onDidChangeNotebookDocument(event => this.didChangeNotebookDocument(event), undefined, this.disposables);\n        //save\n        if (this.options.save === true) {\n            vscode.workspace.onDidSaveNotebookDocument(notebookDocument => this.didSave(notebookDocument), undefined, this.disposables);\n        }\n        // close\n        vscode.workspace.onDidCloseNotebookDocument((notebookDocument) => {\n            this.didClose(notebookDocument);\n            this.notebookDidOpen.delete(notebookDocument.uri.toString());\n        }, undefined, this.disposables);\n    }\n    getState() {\n        for (const notebook of vscode.workspace.notebookDocuments) {\n            const matchingCells = this.getMatchingCells(notebook);\n            if (matchingCells !== undefined) {\n                return { kind: 'document', id: '$internal', registrations: true, matches: true };\n            }\n        }\n        return { kind: 'document', id: '$internal', registrations: true, matches: false };\n    }\n    get mode() {\n        return 'notebook';\n    }\n    handles(textDocument) {\n        return vscode.languages.match(this.selector, textDocument) > 0;\n    }\n    didOpenNotebookCellTextDocument(notebookDocument, cell) {\n        if (vscode.languages.match(this.selector, cell.document) === 0) {\n            return;\n        }\n        if (!this.notebookDidOpen.has(notebookDocument.uri.toString())) {\n            // We have never received an open notification for the notebook document.\n            // VS Code guarantees that we first get cell document open and then\n            // notebook open. So simply wait for the notebook open.\n            return;\n        }\n        const syncInfo = this.notebookSyncInfo.get(notebookDocument.uri.toString());\n        // In VS Code we receive a notebook open before a cell document open.\n        // The document and the cell is synced.\n        const cellMatches = this.cellMatches(notebookDocument, cell);\n        if (syncInfo !== undefined) {\n            const cellIsSynced = syncInfo.uris.has(cell.document.uri.toString());\n            if ((cellMatches && cellIsSynced) || (!cellMatches && !cellIsSynced)) {\n                // The cell doesn't match and was not synced or it matches and is synced.\n                // In both cases nothing to do.\n                //\n                // Note that if the language mode of a document changes we remove the\n                // cell and add it back to update the language mode on the server side.\n                return;\n            }\n            if (cellMatches) {\n                // don't use cells from above since there might be more matching cells in the notebook\n                // Since we had a matching cell above we will have matching cells now.\n                const matchingCells = this.getMatchingCells(notebookDocument);\n                if (matchingCells !== undefined) {\n                    const event = this.asNotebookDocumentChangeEvent(notebookDocument, undefined, syncInfo, matchingCells);\n                    if (event !== undefined) {\n                        this.doSendChange(event, matchingCells).catch(() => { });\n                    }\n                }\n            }\n        }\n        else {\n            // No sync info. But we have a open event for the notebook document\n            // itself. If the cell matches then we need to send an open with\n            // exactly that cell.\n            if (cellMatches) {\n                this.doSendOpen(notebookDocument, [cell]).catch(() => { });\n            }\n        }\n    }\n    didChangeNotebookCellTextDocument(notebookDocument, event) {\n        // No match with the selector\n        if (vscode.languages.match(this.selector, event.document) === 0) {\n            return;\n        }\n        this.doSendChange({\n            notebook: notebookDocument,\n            cells: { textContent: [event] }\n        }, undefined).catch(() => { });\n    }\n    didCloseNotebookCellTextDocument(notebookDocument, cell) {\n        const syncInfo = this.notebookSyncInfo.get(notebookDocument.uri.toString());\n        if (syncInfo === undefined) {\n            // The notebook document got never synced. So it doesn't matter if a cell\n            // document closes.\n            return;\n        }\n        const cellUri = cell.document.uri;\n        const index = syncInfo.cells.findIndex((item) => item.document.uri.toString() === cellUri.toString());\n        if (index === -1) {\n            // The cell never got synced or it got deleted and we now received the document\n            // close event.\n            return;\n        }\n        if (index === 0 && syncInfo.cells.length === 1) {\n            // The last cell. Close the notebook document in the server.\n            this.doSendClose(notebookDocument, syncInfo.cells).catch(() => { });\n        }\n        else {\n            const newCells = syncInfo.cells.slice();\n            const deleted = newCells.splice(index, 1);\n            this.doSendChange({\n                notebook: notebookDocument,\n                cells: {\n                    structure: {\n                        array: { start: index, deleteCount: 1 },\n                        didClose: deleted\n                    }\n                }\n            }, newCells).catch(() => { });\n        }\n    }\n    dispose() {\n        for (const disposable of this.disposables) {\n            disposable.dispose();\n        }\n    }\n    didOpen(notebookDocument, matchingCells = this.getMatchingCells(notebookDocument), syncInfo = this.notebookSyncInfo.get(notebookDocument.uri.toString())) {\n        if (syncInfo !== undefined) {\n            if (matchingCells !== undefined) {\n                const event = this.asNotebookDocumentChangeEvent(notebookDocument, undefined, syncInfo, matchingCells);\n                if (event !== undefined) {\n                    this.doSendChange(event, matchingCells).catch(() => { });\n                }\n            }\n            else {\n                this.doSendClose(notebookDocument, []).catch(() => { });\n            }\n        }\n        else {\n            // Check if we need to sync the notebook document.\n            if (matchingCells === undefined) {\n                return;\n            }\n            this.doSendOpen(notebookDocument, matchingCells).catch(() => { });\n        }\n    }\n    didChangeNotebookDocument(event) {\n        const notebookDocument = event.notebook;\n        const syncInfo = this.notebookSyncInfo.get(notebookDocument.uri.toString());\n        if (syncInfo === undefined) {\n            // We have no changes to the cells. Since the notebook wasn't synced\n            // it will not be synced now.\n            if (event.contentChanges.length === 0) {\n                return;\n            }\n            // Check if we have new matching cells.\n            const cells = this.getMatchingCells(notebookDocument);\n            // No matching cells and the notebook never synced. So still no need\n            // to sync it.\n            if (cells === undefined) {\n                return;\n            }\n            // Open the notebook document and ignore the rest of the changes\n            // this the notebooks will be synced with the correct settings.\n            this.didOpen(notebookDocument, cells, syncInfo);\n        }\n        else {\n            // The notebook is synced. First check if we have no matching\n            // cells anymore and if so close the notebook\n            const cells = this.getMatchingCells(notebookDocument);\n            if (cells === undefined) {\n                this.didClose(notebookDocument, syncInfo);\n                return;\n            }\n            const newEvent = this.asNotebookDocumentChangeEvent(event.notebook, event, syncInfo, cells);\n            if (newEvent !== undefined) {\n                this.doSendChange(newEvent, cells).catch(() => { });\n            }\n        }\n    }\n    didSave(notebookDocument) {\n        const syncInfo = this.notebookSyncInfo.get(notebookDocument.uri.toString());\n        if (syncInfo === undefined) {\n            return;\n        }\n        this.doSendSave(notebookDocument).catch(() => { });\n    }\n    didClose(notebookDocument, syncInfo = this.notebookSyncInfo.get(notebookDocument.uri.toString())) {\n        if (syncInfo === undefined) {\n            return;\n        }\n        const syncedCells = notebookDocument.getCells().filter(cell => syncInfo.uris.has(cell.document.uri.toString()));\n        this.doSendClose(notebookDocument, syncedCells).catch(() => { });\n    }\n    async sendDidOpenNotebookDocument(notebookDocument) {\n        const cells = this.getMatchingCells(notebookDocument);\n        if (cells === undefined) {\n            return;\n        }\n        return this.doSendOpen(notebookDocument, cells);\n    }\n    async doSendOpen(notebookDocument, cells) {\n        const send = async (notebookDocument, cells) => {\n            const nb = Converter.c2p.asNotebookDocument(notebookDocument, cells, this.client.code2ProtocolConverter);\n            const cellDocuments = cells.map(cell => this.client.code2ProtocolConverter.asTextDocumentItem(cell.document));\n            try {\n                await this.client.sendNotification(proto.DidOpenNotebookDocumentNotification.type, {\n                    notebookDocument: nb,\n                    cellTextDocuments: cellDocuments\n                });\n            }\n            catch (error) {\n                this.client.error('Sending DidOpenNotebookDocumentNotification failed', error);\n                throw error;\n            }\n        };\n        const middleware = this.client.middleware?.notebooks;\n        this.notebookSyncInfo.set(notebookDocument.uri.toString(), SyncInfo.create(cells));\n        return middleware?.didOpen !== undefined ? middleware.didOpen(notebookDocument, cells, send) : send(notebookDocument, cells);\n    }\n    async sendDidChangeNotebookDocument(event) {\n        return this.doSendChange(event, undefined);\n    }\n    async doSendChange(event, cells = this.getMatchingCells(event.notebook)) {\n        const send = async (event) => {\n            try {\n                await this.client.sendNotification(proto.DidChangeNotebookDocumentNotification.type, {\n                    notebookDocument: Converter.c2p.asVersionedNotebookDocumentIdentifier(event.notebook, this.client.code2ProtocolConverter),\n                    change: Converter.c2p.asNotebookDocumentChangeEvent(event, this.client.code2ProtocolConverter)\n                });\n            }\n            catch (error) {\n                this.client.error('Sending DidChangeNotebookDocumentNotification failed', error);\n                throw error;\n            }\n        };\n        const middleware = this.client.middleware?.notebooks;\n        if (event.cells?.structure !== undefined) {\n            this.notebookSyncInfo.set(event.notebook.uri.toString(), SyncInfo.create(cells ?? []));\n        }\n        return middleware?.didChange !== undefined ? middleware?.didChange(event, send) : send(event);\n    }\n    async sendDidSaveNotebookDocument(notebookDocument) {\n        return this.doSendSave(notebookDocument);\n    }\n    async doSendSave(notebookDocument) {\n        const send = async (notebookDocument) => {\n            try {\n                await this.client.sendNotification(proto.DidSaveNotebookDocumentNotification.type, {\n                    notebookDocument: { uri: this.client.code2ProtocolConverter.asUri(notebookDocument.uri) }\n                });\n            }\n            catch (error) {\n                this.client.error('Sending DidSaveNotebookDocumentNotification failed', error);\n                throw error;\n            }\n        };\n        const middleware = this.client.middleware?.notebooks;\n        return middleware?.didSave !== undefined ? middleware.didSave(notebookDocument, send) : send(notebookDocument);\n    }\n    async sendDidCloseNotebookDocument(notebookDocument) {\n        return this.doSendClose(notebookDocument, this.getMatchingCells(notebookDocument) ?? []);\n    }\n    async doSendClose(notebookDocument, cells) {\n        const send = async (notebookDocument, cells) => {\n            try {\n                await this.client.sendNotification(proto.DidCloseNotebookDocumentNotification.type, {\n                    notebookDocument: { uri: this.client.code2ProtocolConverter.asUri(notebookDocument.uri) },\n                    cellTextDocuments: cells.map(cell => this.client.code2ProtocolConverter.asTextDocumentIdentifier(cell.document))\n                });\n            }\n            catch (error) {\n                this.client.error('Sending DidCloseNotebookDocumentNotification failed', error);\n                throw error;\n            }\n        };\n        const middleware = this.client.middleware?.notebooks;\n        this.notebookSyncInfo.delete(notebookDocument.uri.toString());\n        return middleware?.didClose !== undefined ? middleware.didClose(notebookDocument, cells, send) : send(notebookDocument, cells);\n    }\n    asNotebookDocumentChangeEvent(notebook, event, syncInfo, matchingCells) {\n        if (event !== undefined && event.notebook !== notebook) {\n            throw new Error('Notebook must be identical');\n        }\n        const result = {\n            notebook: notebook\n        };\n        if (event?.metadata !== undefined) {\n            result.metadata = Converter.c2p.asMetadata(event.metadata);\n        }\n        let matchingCellsSet;\n        if (event?.cellChanges !== undefined && event.cellChanges.length > 0) {\n            const data = [];\n            // Only consider the new matching cells.\n            matchingCellsSet = new Set(matchingCells.map(cell => cell.document.uri.toString()));\n            for (const cellChange of event.cellChanges) {\n                if (matchingCellsSet.has(cellChange.cell.document.uri.toString()) && (cellChange.executionSummary !== undefined || cellChange.metadata !== undefined)) {\n                    data.push(cellChange.cell);\n                }\n            }\n            if (data.length > 0) {\n                result.cells = result.cells ?? {};\n                result.cells.data = data;\n            }\n        }\n        if (((event?.contentChanges !== undefined && event.contentChanges.length > 0) || event === undefined) && syncInfo !== undefined && matchingCells !== undefined) {\n            // We still have matching cells. Check if the cell changes\n            // affect the notebook on the server side.\n            const oldCells = syncInfo.cells;\n            const newCells = matchingCells;\n            // meta data changes are reported using on the cell itself. So we can ignore comparing\n            // it which has a positive effect on performance.\n            const diff = $NotebookCell.computeDiff(oldCells, newCells, false);\n            let addedCells;\n            let removedCells;\n            if (diff !== undefined) {\n                addedCells = diff.cells === undefined\n                    ? new Map()\n                    : new Map(diff.cells.map(cell => [cell.document.uri.toString(), cell]));\n                removedCells = diff.deleteCount === 0\n                    ? new Map()\n                    : new Map(oldCells.slice(diff.start, diff.start + diff.deleteCount).map(cell => [cell.document.uri.toString(), cell]));\n                // Remove the onces that got deleted and inserted again.\n                for (const key of Array.from(removedCells.keys())) {\n                    if (addedCells.has(key)) {\n                        removedCells.delete(key);\n                        addedCells.delete(key);\n                    }\n                }\n                result.cells = result.cells ?? {};\n                const didOpen = [];\n                const didClose = [];\n                if (addedCells.size > 0 || removedCells.size > 0) {\n                    for (const cell of addedCells.values()) {\n                        didOpen.push(cell);\n                    }\n                    for (const cell of removedCells.values()) {\n                        didClose.push(cell);\n                    }\n                }\n                result.cells.structure = {\n                    array: diff,\n                    didOpen,\n                    didClose\n                };\n            }\n        }\n        // The notebook is a property as well.\n        return Object.keys(result).length > 1 ? result : undefined;\n    }\n    getMatchingCells(notebookDocument, cells = notebookDocument.getCells()) {\n        if (this.options.notebookSelector === undefined) {\n            return undefined;\n        }\n        for (const item of this.options.notebookSelector) {\n            if (item.notebook === undefined || $NotebookDocumentFilter.matchNotebook(item.notebook, notebookDocument)) {\n                const filtered = this.filterCells(notebookDocument, cells, item.cells);\n                return filtered.length === 0 ? undefined : filtered;\n            }\n        }\n        return undefined;\n    }\n    cellMatches(notebookDocument, cell) {\n        const cells = this.getMatchingCells(notebookDocument, [cell]);\n        return cells !== undefined && cells[0] === cell;\n    }\n    filterCells(notebookDocument, cells, cellSelector) {\n        const filtered = cellSelector !== undefined ? cells.filter((cell) => {\n            const cellLanguage = cell.document.languageId;\n            return cellSelector.some((filter => (filter.language === '*' || cellLanguage === filter.language)));\n        }) : cells;\n        return typeof this.client.clientOptions.notebookDocumentOptions?.filterCells === 'function'\n            ? this.client.clientOptions.notebookDocumentOptions.filterCells(notebookDocument, filtered)\n            : filtered;\n    }\n}\nclass NotebookDocumentSyncFeature {\n    constructor(client) {\n        this.client = client;\n        this.registrations = new Map();\n        this.registrationType = proto.NotebookDocumentSyncRegistrationType.type;\n        // We don't receive an event for cells where the document changes its language mode\n        // Since we allow servers to filter on the language mode we fire such an event ourselves.\n        vscode.workspace.onDidOpenTextDocument((textDocument) => {\n            if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {\n                return;\n            }\n            const [notebookDocument, notebookCell] = this.findNotebookDocumentAndCell(textDocument);\n            if (notebookDocument === undefined || notebookCell === undefined) {\n                return;\n            }\n            for (const provider of this.registrations.values()) {\n                if (provider instanceof NotebookDocumentSyncFeatureProvider) {\n                    provider.didOpenNotebookCellTextDocument(notebookDocument, notebookCell);\n                }\n            }\n        });\n        vscode.workspace.onDidChangeTextDocument((event) => {\n            if (event.contentChanges.length === 0) {\n                return;\n            }\n            const textDocument = event.document;\n            if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {\n                return;\n            }\n            const [notebookDocument,] = this.findNotebookDocumentAndCell(textDocument);\n            if (notebookDocument === undefined) {\n                return;\n            }\n            for (const provider of this.registrations.values()) {\n                if (provider instanceof NotebookDocumentSyncFeatureProvider) {\n                    provider.didChangeNotebookCellTextDocument(notebookDocument, event);\n                }\n            }\n        });\n        vscode.workspace.onDidCloseTextDocument((textDocument) => {\n            if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {\n                return;\n            }\n            // There are two cases when we receive a close for a text document\n            // 1: the cell got removed. This is handled in `onDidChangeNotebookCells`\n            // 2: the language mode of a cell changed. This keeps the URI stable so\n            //    we will still find the cell and the notebook document.\n            const [notebookDocument, notebookCell] = this.findNotebookDocumentAndCell(textDocument);\n            if (notebookDocument === undefined || notebookCell === undefined) {\n                return;\n            }\n            for (const provider of this.registrations.values()) {\n                if (provider instanceof NotebookDocumentSyncFeatureProvider) {\n                    provider.didCloseNotebookCellTextDocument(notebookDocument, notebookCell);\n                }\n            }\n        });\n    }\n    getState() {\n        if (this.registrations.size === 0) {\n            return { kind: 'document', id: this.registrationType.method, registrations: false, matches: false };\n        }\n        for (const provider of this.registrations.values()) {\n            const state = provider.getState();\n            if (state.kind === 'document' && state.registrations === true && state.matches === true) {\n                return { kind: 'document', id: this.registrationType.method, registrations: true, matches: true };\n            }\n        }\n        return { kind: 'document', id: this.registrationType.method, registrations: true, matches: false };\n    }\n    fillClientCapabilities(capabilities) {\n        const synchronization = ensure(ensure(capabilities, 'notebookDocument'), 'synchronization');\n        synchronization.dynamicRegistration = true;\n        synchronization.executionSummarySupport = true;\n    }\n    preInitialize(capabilities) {\n        const options = capabilities.notebookDocumentSync;\n        if (options === undefined) {\n            return;\n        }\n        this.dedicatedChannel = this.client.protocol2CodeConverter.asDocumentSelector($NotebookDocumentSyncOptions.asDocumentSelector(options));\n    }\n    initialize(capabilities) {\n        const options = capabilities.notebookDocumentSync;\n        if (options === undefined) {\n            return;\n        }\n        const id = options.id ?? UUID.generateUuid();\n        this.register({ id, registerOptions: options });\n    }\n    register(data) {\n        const provider = new NotebookDocumentSyncFeatureProvider(this.client, data.registerOptions);\n        this.registrations.set(data.id, provider);\n    }\n    unregister(id) {\n        const provider = this.registrations.get(id);\n        provider && provider.dispose();\n    }\n    clear() {\n        for (const provider of this.registrations.values()) {\n            provider.dispose();\n        }\n        this.registrations.clear();\n    }\n    handles(textDocument) {\n        if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {\n            return false;\n        }\n        if (this.dedicatedChannel !== undefined && vscode.languages.match(this.dedicatedChannel, textDocument) > 0) {\n            return true;\n        }\n        for (const provider of this.registrations.values()) {\n            if (provider.handles(textDocument)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    getProvider(notebookCell) {\n        for (const provider of this.registrations.values()) {\n            if (provider.handles(notebookCell.document)) {\n                return provider;\n            }\n        }\n        return undefined;\n    }\n    findNotebookDocumentAndCell(textDocument) {\n        const uri = textDocument.uri.toString();\n        for (const notebookDocument of vscode.workspace.notebookDocuments) {\n            for (const cell of notebookDocument.getCells()) {\n                if (cell.document.uri.toString() === uri) {\n                    return [notebookDocument, cell];\n                }\n            }\n        }\n        return [undefined, undefined];\n    }\n}\nexports.NotebookDocumentSyncFeature = NotebookDocumentSyncFeature;\nNotebookDocumentSyncFeature.CellScheme = 'vscode-notebook-cell';\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.SyncConfigurationFeature = exports.toJSONObject = exports.ConfigurationFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst UUID = require(\"./utils/uuid\");\nconst features_1 = require(\"./features\");\n/**\n * Configuration pull model. From server to client.\n */\nclass ConfigurationFeature {\n    constructor(client) {\n        this._client = client;\n    }\n    getState() {\n        return { kind: 'static' };\n    }\n    fillClientCapabilities(capabilities) {\n        capabilities.workspace = capabilities.workspace || {};\n        capabilities.workspace.configuration = true;\n    }\n    initialize() {\n        let client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, (params, token) => {\n            let configuration = (params) => {\n                let result = [];\n                for (let item of params.items) {\n                    let resource = item.scopeUri !== void 0 && item.scopeUri !== null ? this._client.protocol2CodeConverter.asUri(item.scopeUri) : undefined;\n                    result.push(this.getConfiguration(resource, item.section !== null ? item.section : undefined));\n                }\n                return result;\n            };\n            let middleware = client.middleware.workspace;\n            return middleware && middleware.configuration\n                ? middleware.configuration(params, token, configuration)\n                : configuration(params, token);\n        });\n    }\n    getConfiguration(resource, section) {\n        let result = null;\n        if (section) {\n            let index = section.lastIndexOf('.');\n            if (index === -1) {\n                result = toJSONObject(vscode_1.workspace.getConfiguration(undefined, resource).get(section));\n            }\n            else {\n                let config = vscode_1.workspace.getConfiguration(section.substr(0, index), resource);\n                if (config) {\n                    result = toJSONObject(config.get(section.substr(index + 1)));\n                }\n            }\n        }\n        else {\n            let config = vscode_1.workspace.getConfiguration(undefined, resource);\n            result = {};\n            for (let key of Object.keys(config)) {\n                if (config.has(key)) {\n                    result[key] = toJSONObject(config.get(key));\n                }\n            }\n        }\n        if (result === undefined) {\n            result = null;\n        }\n        return result;\n    }\n    clear() {\n    }\n}\nexports.ConfigurationFeature = ConfigurationFeature;\nfunction toJSONObject(obj) {\n    if (obj) {\n        if (Array.isArray(obj)) {\n            return obj.map(toJSONObject);\n        }\n        else if (typeof obj === 'object') {\n            const res = Object.create(null);\n            for (const key in obj) {\n                if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                    res[key] = toJSONObject(obj[key]);\n                }\n            }\n            return res;\n        }\n    }\n    return obj;\n}\nexports.toJSONObject = toJSONObject;\nclass SyncConfigurationFeature {\n    constructor(_client) {\n        this._client = _client;\n        this.isCleared = false;\n        this._listeners = new Map();\n    }\n    getState() {\n        return { kind: 'workspace', id: this.registrationType.method, registrations: this._listeners.size > 0 };\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'didChangeConfiguration').dynamicRegistration = true;\n    }\n    initialize() {\n        this.isCleared = false;\n        let section = this._client.clientOptions.synchronize?.configurationSection;\n        if (section !== undefined) {\n            this.register({\n                id: UUID.generateUuid(),\n                registerOptions: {\n                    section: section\n                }\n            });\n        }\n    }\n    register(data) {\n        let disposable = vscode_1.workspace.onDidChangeConfiguration((event) => {\n            this.onDidChangeConfiguration(data.registerOptions.section, event);\n        });\n        this._listeners.set(data.id, disposable);\n        if (data.registerOptions.section !== undefined) {\n            this.onDidChangeConfiguration(data.registerOptions.section, undefined);\n        }\n    }\n    unregister(id) {\n        let disposable = this._listeners.get(id);\n        if (disposable) {\n            this._listeners.delete(id);\n            disposable.dispose();\n        }\n    }\n    clear() {\n        for (const disposable of this._listeners.values()) {\n            disposable.dispose();\n        }\n        this._listeners.clear();\n        this.isCleared = true;\n    }\n    onDidChangeConfiguration(configurationSection, event) {\n        if (this.isCleared) {\n            return;\n        }\n        let sections;\n        if (Is.string(configurationSection)) {\n            sections = [configurationSection];\n        }\n        else {\n            sections = configurationSection;\n        }\n        if (sections !== undefined && event !== undefined) {\n            let affected = sections.some((section) => event.affectsConfiguration(section));\n            if (!affected) {\n                return;\n            }\n        }\n        const didChangeConfiguration = async (sections) => {\n            if (sections === undefined) {\n                return this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: null });\n            }\n            else {\n                return this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: this.extractSettingsInformation(sections) });\n            }\n        };\n        let middleware = this._client.middleware.workspace?.didChangeConfiguration;\n        (middleware ? middleware(sections, didChangeConfiguration) : didChangeConfiguration(sections)).catch((error) => {\n            this._client.error(`Sending notification ${vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type.method} failed`, error);\n        });\n    }\n    extractSettingsInformation(keys) {\n        function ensurePath(config, path) {\n            let current = config;\n            for (let i = 0; i < path.length - 1; i++) {\n                let obj = current[path[i]];\n                if (!obj) {\n                    obj = Object.create(null);\n                    current[path[i]] = obj;\n                }\n                current = obj;\n            }\n            return current;\n        }\n        let resource = this._client.clientOptions.workspaceFolder\n            ? this._client.clientOptions.workspaceFolder.uri\n            : undefined;\n        let result = Object.create(null);\n        for (let i = 0; i < keys.length; i++) {\n            let key = keys[i];\n            let index = key.indexOf('.');\n            let config = null;\n            if (index >= 0) {\n                config = vscode_1.workspace.getConfiguration(key.substr(0, index), resource).get(key.substr(index + 1));\n            }\n            else {\n                config = vscode_1.workspace.getConfiguration(undefined, resource).get(key);\n            }\n            if (config) {\n                let path = keys[i].split('.');\n                ensurePath(result, path)[path[path.length - 1]] = toJSONObject(config);\n            }\n        }\n        return result;\n    }\n}\nexports.SyncConfigurationFeature = SyncConfigurationFeature;\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.DidSaveTextDocumentFeature = exports.WillSaveWaitUntilFeature = exports.WillSaveFeature = exports.DidChangeTextDocumentFeature = exports.DidCloseTextDocumentFeature = exports.DidOpenTextDocumentFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass DidOpenTextDocumentFeature extends features_1.TextDocumentEventFeature {\n    constructor(client, syncedDocuments) {\n        super(client, vscode_1.workspace.onDidOpenTextDocument, vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, () => client.middleware.didOpen, (textDocument) => client.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter);\n        this._syncedDocuments = syncedDocuments;\n    }\n    get openDocuments() {\n        return this._syncedDocuments.values();\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {\n            this.register({ id: UUID.generateUuid(), registerOptions: { documentSelector: documentSelector } });\n        }\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type;\n    }\n    register(data) {\n        super.register(data);\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        const documentSelector = this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector);\n        vscode_1.workspace.textDocuments.forEach((textDocument) => {\n            const uri = textDocument.uri.toString();\n            if (this._syncedDocuments.has(uri)) {\n                return;\n            }\n            if (vscode_1.languages.match(documentSelector, textDocument) > 0 && !this._client.hasDedicatedTextSynchronizationFeature(textDocument)) {\n                const middleware = this._client.middleware;\n                const didOpen = (textDocument) => {\n                    return this._client.sendNotification(this._type, this._createParams(textDocument));\n                };\n                (middleware.didOpen ? middleware.didOpen(textDocument, didOpen) : didOpen(textDocument)).catch((error) => {\n                    this._client.error(`Sending document notification ${this._type.method} failed`, error);\n                });\n                this._syncedDocuments.set(uri, textDocument);\n            }\n        });\n    }\n    getTextDocument(data) {\n        return data;\n    }\n    notificationSent(textDocument, type, params) {\n        this._syncedDocuments.set(textDocument.uri.toString(), textDocument);\n        super.notificationSent(textDocument, type, params);\n    }\n}\nexports.DidOpenTextDocumentFeature = DidOpenTextDocumentFeature;\nclass DidCloseTextDocumentFeature extends features_1.TextDocumentEventFeature {\n    constructor(client, syncedDocuments, pendingTextDocumentChanges) {\n        super(client, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, () => client.middleware.didClose, (textDocument) => client.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter);\n        this._syncedDocuments = syncedDocuments;\n        this._pendingTextDocumentChanges = pendingTextDocumentChanges;\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {\n            this.register({ id: UUID.generateUuid(), registerOptions: { documentSelector: documentSelector } });\n        }\n    }\n    async callback(data) {\n        await super.callback(data);\n        this._pendingTextDocumentChanges.delete(data.uri.toString());\n    }\n    getTextDocument(data) {\n        return data;\n    }\n    notificationSent(textDocument, type, params) {\n        this._syncedDocuments.delete(textDocument.uri.toString());\n        super.notificationSent(textDocument, type, params);\n    }\n    unregister(id) {\n        const selector = this._selectors.get(id);\n        // The super call removed the selector from the map\n        // of selectors.\n        super.unregister(id);\n        const selectors = this._selectors.values();\n        this._syncedDocuments.forEach((textDocument) => {\n            if (vscode_1.languages.match(selector, textDocument) > 0 && !this._selectorFilter(selectors, textDocument) && !this._client.hasDedicatedTextSynchronizationFeature(textDocument)) {\n                let middleware = this._client.middleware;\n                let didClose = (textDocument) => {\n                    return this._client.sendNotification(this._type, this._createParams(textDocument));\n                };\n                this._syncedDocuments.delete(textDocument.uri.toString());\n                (middleware.didClose ? middleware.didClose(textDocument, didClose) : didClose(textDocument)).catch((error) => {\n                    this._client.error(`Sending document notification ${this._type.method} failed`, error);\n                });\n            }\n        });\n    }\n}\nexports.DidCloseTextDocumentFeature = DidCloseTextDocumentFeature;\nclass DidChangeTextDocumentFeature extends features_1.DynamicDocumentFeature {\n    constructor(client, pendingTextDocumentChanges) {\n        super(client);\n        this._changeData = new Map();\n        this._onNotificationSent = new vscode_1.EventEmitter();\n        this._onPendingChangeAdded = new vscode_1.EventEmitter();\n        this._pendingTextDocumentChanges = pendingTextDocumentChanges;\n        this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;\n    }\n    get onNotificationSent() {\n        return this._onNotificationSent.event;\n    }\n    get onPendingChangeAdded() {\n        return this._onPendingChangeAdded.event;\n    }\n    get syncKind() {\n        return this._syncKind;\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== undefined && textDocumentSyncOptions.change !== vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n            this.register({\n                id: UUID.generateUuid(),\n                registerOptions: Object.assign({}, { documentSelector: documentSelector }, { syncKind: textDocumentSyncOptions.change })\n            });\n        }\n    }\n    register(data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = vscode_1.workspace.onDidChangeTextDocument(this.callback, this);\n        }\n        this._changeData.set(data.id, {\n            syncKind: data.registerOptions.syncKind,\n            documentSelector: this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector),\n        });\n        this.updateSyncKind(data.registerOptions.syncKind);\n    }\n    *getDocumentSelectors() {\n        for (const data of this._changeData.values()) {\n            yield data.documentSelector;\n        }\n    }\n    async callback(event) {\n        // Text document changes are send for dirty changes as well. We don't\n        // have dirty / un-dirty events in the LSP so we ignore content changes\n        // with length zero.\n        if (event.contentChanges.length === 0) {\n            return;\n        }\n        // We need to capture the URI and version here since they might change on the text document\n        // until we reach did `didChange` call since the middleware support async execution.\n        const uri = event.document.uri;\n        const version = event.document.version;\n        const promises = [];\n        for (const changeData of this._changeData.values()) {\n            if (vscode_1.languages.match(changeData.documentSelector, event.document) > 0 && !this._client.hasDedicatedTextSynchronizationFeature(event.document)) {\n                const middleware = this._client.middleware;\n                if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental) {\n                    const didChange = async (event) => {\n                        const params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event, uri, version);\n                        await this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);\n                        this.notificationSent(event.document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);\n                    };\n                    promises.push(middleware.didChange ? middleware.didChange(event, event => didChange(event)) : didChange(event));\n                }\n                else if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {\n                    const didChange = async (event) => {\n                        const eventUri = event.document.uri.toString();\n                        this._pendingTextDocumentChanges.set(eventUri, event.document);\n                        this._onPendingChangeAdded.fire();\n                    };\n                    promises.push(middleware.didChange ? middleware.didChange(event, event => didChange(event)) : didChange(event));\n                }\n            }\n        }\n        return Promise.all(promises).then(undefined, (error) => {\n            this._client.error(`Sending document notification ${vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method} failed`, error);\n            throw error;\n        });\n    }\n    notificationSent(textDocument, type, params) {\n        this._onNotificationSent.fire({ textDocument, type, params });\n    }\n    unregister(id) {\n        this._changeData.delete(id);\n        if (this._changeData.size === 0) {\n            if (this._listener) {\n                this._listener.dispose();\n                this._listener = undefined;\n            }\n            this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;\n        }\n        else {\n            this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;\n            for (const changeData of this._changeData.values()) {\n                this.updateSyncKind(changeData.syncKind);\n                if (this._syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {\n                    break;\n                }\n            }\n        }\n    }\n    clear() {\n        this._pendingTextDocumentChanges.clear();\n        this._changeData.clear();\n        this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    getPendingDocumentChanges(excludes) {\n        if (this._pendingTextDocumentChanges.size === 0) {\n            return [];\n        }\n        let result;\n        if (excludes.size === 0) {\n            result = Array.from(this._pendingTextDocumentChanges.values());\n            this._pendingTextDocumentChanges.clear();\n        }\n        else {\n            result = [];\n            for (const entry of this._pendingTextDocumentChanges) {\n                if (!excludes.has(entry[0])) {\n                    result.push(entry[1]);\n                    this._pendingTextDocumentChanges.delete(entry[0]);\n                }\n            }\n        }\n        return result;\n    }\n    getProvider(document) {\n        for (const changeData of this._changeData.values()) {\n            if (vscode_1.languages.match(changeData.documentSelector, document) > 0) {\n                return {\n                    send: (event) => {\n                        return this.callback(event);\n                    }\n                };\n            }\n        }\n        return undefined;\n    }\n    updateSyncKind(syncKind) {\n        if (this._syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {\n            return;\n        }\n        switch (syncKind) {\n            case vscode_languageserver_protocol_1.TextDocumentSyncKind.Full:\n                this._syncKind = syncKind;\n                break;\n            case vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental:\n                if (this._syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n                    this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental;\n                }\n                break;\n        }\n    }\n}\nexports.DidChangeTextDocumentFeature = DidChangeTextDocumentFeature;\nclass WillSaveFeature extends features_1.TextDocumentEventFeature {\n    constructor(client) {\n        super(client, vscode_1.workspace.onWillSaveTextDocument, vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, () => client.middleware.willSave, (willSaveEvent) => client.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (event) => event.document, (selectors, willSaveEvent) => features_1.TextDocumentEventFeature.textDocumentFilter(selectors, willSaveEvent.document));\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        let value = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'synchronization');\n        value.willSave = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) {\n            this.register({\n                id: UUID.generateUuid(),\n                registerOptions: { documentSelector: documentSelector }\n            });\n        }\n    }\n    getTextDocument(data) {\n        return data.document;\n    }\n}\nexports.WillSaveFeature = WillSaveFeature;\nclass WillSaveWaitUntilFeature extends features_1.DynamicDocumentFeature {\n    constructor(client) {\n        super(client);\n        this._selectors = new Map();\n    }\n    getDocumentSelectors() {\n        return this._selectors.values();\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type;\n    }\n    fillClientCapabilities(capabilities) {\n        let value = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'synchronization');\n        value.willSaveWaitUntil = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) {\n            this.register({\n                id: UUID.generateUuid(),\n                registerOptions: { documentSelector: documentSelector }\n            });\n        }\n    }\n    register(data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = vscode_1.workspace.onWillSaveTextDocument(this.callback, this);\n        }\n        this._selectors.set(data.id, this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector));\n    }\n    callback(event) {\n        if (features_1.TextDocumentEventFeature.textDocumentFilter(this._selectors.values(), event.document) && !this._client.hasDedicatedTextSynchronizationFeature(event.document)) {\n            let middleware = this._client.middleware;\n            let willSaveWaitUntil = (event) => {\n                return this._client.sendRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, this._client.code2ProtocolConverter.asWillSaveTextDocumentParams(event)).then(async (edits) => {\n                    let vEdits = await this._client.protocol2CodeConverter.asTextEdits(edits);\n                    return vEdits === undefined ? [] : vEdits;\n                });\n            };\n            event.waitUntil(middleware.willSaveWaitUntil\n                ? middleware.willSaveWaitUntil(event, willSaveWaitUntil)\n                : willSaveWaitUntil(event));\n        }\n    }\n    unregister(id) {\n        this._selectors.delete(id);\n        if (this._selectors.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    clear() {\n        this._selectors.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n}\nexports.WillSaveWaitUntilFeature = WillSaveWaitUntilFeature;\nclass DidSaveTextDocumentFeature extends features_1.TextDocumentEventFeature {\n    constructor(client) {\n        super(client, vscode_1.workspace.onDidSaveTextDocument, vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, () => client.middleware.didSave, (textDocument) => client.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter);\n        this._includeText = false;\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'synchronization').didSave = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {\n            const saveOptions = typeof textDocumentSyncOptions.save === 'boolean'\n                ? { includeText: false }\n                : { includeText: !!textDocumentSyncOptions.save.includeText };\n            this.register({\n                id: UUID.generateUuid(),\n                registerOptions: Object.assign({}, { documentSelector: documentSelector }, saveOptions)\n            });\n        }\n    }\n    register(data) {\n        this._includeText = !!data.registerOptions.includeText;\n        super.register(data);\n    }\n    getTextDocument(data) {\n        return data;\n    }\n}\nexports.DidSaveTextDocumentFeature = DidSaveTextDocumentFeature;\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.CompletionItemFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nconst SupportedCompletionItemKinds = [\n    vscode_languageserver_protocol_1.CompletionItemKind.Text,\n    vscode_languageserver_protocol_1.CompletionItemKind.Method,\n    vscode_languageserver_protocol_1.CompletionItemKind.Function,\n    vscode_languageserver_protocol_1.CompletionItemKind.Constructor,\n    vscode_languageserver_protocol_1.CompletionItemKind.Field,\n    vscode_languageserver_protocol_1.CompletionItemKind.Variable,\n    vscode_languageserver_protocol_1.CompletionItemKind.Class,\n    vscode_languageserver_protocol_1.CompletionItemKind.Interface,\n    vscode_languageserver_protocol_1.CompletionItemKind.Module,\n    vscode_languageserver_protocol_1.CompletionItemKind.Property,\n    vscode_languageserver_protocol_1.CompletionItemKind.Unit,\n    vscode_languageserver_protocol_1.CompletionItemKind.Value,\n    vscode_languageserver_protocol_1.CompletionItemKind.Enum,\n    vscode_languageserver_protocol_1.CompletionItemKind.Keyword,\n    vscode_languageserver_protocol_1.CompletionItemKind.Snippet,\n    vscode_languageserver_protocol_1.CompletionItemKind.Color,\n    vscode_languageserver_protocol_1.CompletionItemKind.File,\n    vscode_languageserver_protocol_1.CompletionItemKind.Reference,\n    vscode_languageserver_protocol_1.CompletionItemKind.Folder,\n    vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,\n    vscode_languageserver_protocol_1.CompletionItemKind.Constant,\n    vscode_languageserver_protocol_1.CompletionItemKind.Struct,\n    vscode_languageserver_protocol_1.CompletionItemKind.Event,\n    vscode_languageserver_protocol_1.CompletionItemKind.Operator,\n    vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter\n];\nclass CompletionItemFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CompletionRequest.type);\n        this.labelDetailsSupport = new Map();\n    }\n    fillClientCapabilities(capabilities) {\n        let completion = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'completion');\n        completion.dynamicRegistration = true;\n        completion.contextSupport = true;\n        completion.completionItem = {\n            snippetSupport: true,\n            commitCharactersSupport: true,\n            documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],\n            deprecatedSupport: true,\n            preselectSupport: true,\n            tagSupport: { valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated] },\n            insertReplaceSupport: true,\n            resolveSupport: {\n                properties: ['documentation', 'detail', 'additionalTextEdits']\n            },\n            insertTextModeSupport: { valueSet: [vscode_languageserver_protocol_1.InsertTextMode.asIs, vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation] },\n            labelDetailsSupport: true\n        };\n        completion.insertTextMode = vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation;\n        completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };\n        completion.completionList = {\n            itemDefaults: [\n                'commitCharacters', 'editRange', 'insertTextFormat', 'insertTextMode', 'data'\n            ]\n        };\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);\n        if (!options) {\n            return;\n        }\n        this.register({\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options, id) {\n        this.labelDetailsSupport.set(id, !!options.completionItem?.labelDetailsSupport);\n        const triggerCharacters = options.triggerCharacters ?? [];\n        const defaultCommitCharacters = options.allCommitCharacters;\n        const selector = options.documentSelector;\n        const provider = {\n            provideCompletionItems: (document, position, token, context) => {\n                const client = this._client;\n                const middleware = this._client.middleware;\n                const provideCompletionItems = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, client.code2ProtocolConverter.asCompletionParams(document, position, context), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asCompletionResult(result, defaultCommitCharacters, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.CompletionRequest.type, token, error, null);\n                    });\n                };\n                return middleware.provideCompletionItem\n                    ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems)\n                    : provideCompletionItems(document, position, context, token);\n            },\n            resolveCompletionItem: options.resolveProvider\n                ? (item, token) => {\n                    const client = this._client;\n                    const middleware = this._client.middleware;\n                    const resolveCompletionItem = (item, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, client.code2ProtocolConverter.asCompletionItem(item, !!this.labelDetailsSupport.get(id)), token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return null;\n                            }\n                            return client.protocol2CodeConverter.asCompletionItem(result);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, token, error, item);\n                        });\n                    };\n                    return middleware.resolveCompletionItem\n                        ? middleware.resolveCompletionItem(item, token, resolveCompletionItem)\n                        : resolveCompletionItem(item, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCompletionItemProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, ...triggerCharacters), provider];\n    }\n}\nexports.CompletionItemFeature = CompletionItemFeature;\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.HoverFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass HoverFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.HoverRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const hoverCapability = ((0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'hover'));\n        hoverCapability.dynamicRegistration = true;\n        hoverCapability.contentFormat = [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText];\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);\n        if (!options) {\n            return;\n        }\n        this.register({\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideHover: (document, position, token) => {\n                const client = this._client;\n                const provideHover = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asHover(result);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.HoverRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideHover\n                    ? middleware.provideHover(document, position, token, provideHover)\n                    : provideHover(document, position, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerHoverProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.HoverFeature = HoverFeature;\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.DefinitionFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass DefinitionFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DefinitionRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let definitionSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'definition');\n        definitionSupport.dynamicRegistration = true;\n        definitionSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDefinition: (document, position, token) => {\n                const client = this._client;\n                const provideDefinition = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asDefinitionResult(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDefinition\n                    ? middleware.provideDefinition(document, position, token, provideDefinition)\n                    : provideDefinition(document, position, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerDefinitionProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.DefinitionFeature = DefinitionFeature;\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.SignatureHelpFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass SignatureHelpFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SignatureHelpRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let config = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'signatureHelp');\n        config.dynamicRegistration = true;\n        config.signatureInformation = { documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText] };\n        config.signatureInformation.parameterInformation = { labelOffsetSupport: true };\n        config.signatureInformation.activeParameterSupport = true;\n        config.contextSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);\n        if (!options) {\n            return;\n        }\n        this.register({\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideSignatureHelp: (document, position, token, context) => {\n                const client = this._client;\n                const providerSignatureHelp = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, client.code2ProtocolConverter.asSignatureHelpParams(document, position, context), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asSignatureHelp(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideSignatureHelp\n                    ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp)\n                    : providerSignatureHelp(document, position, context, token);\n            }\n        };\n        return [this.registerProvider(options, provider), provider];\n    }\n    registerProvider(options, provider) {\n        const selector = this._client.protocol2CodeConverter.asDocumentSelector(options.documentSelector);\n        if (options.retriggerCharacters === undefined) {\n            const triggerCharacters = options.triggerCharacters || [];\n            return vscode_1.languages.registerSignatureHelpProvider(selector, provider, ...triggerCharacters);\n        }\n        else {\n            const metaData = {\n                triggerCharacters: options.triggerCharacters || [],\n                retriggerCharacters: options.retriggerCharacters || []\n            };\n            return vscode_1.languages.registerSignatureHelpProvider(selector, provider, metaData);\n        }\n    }\n}\nexports.SignatureHelpFeature = SignatureHelpFeature;\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.DocumentHighlightFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass DocumentHighlightFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentHighlightRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'documentHighlight').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDocumentHighlights: (document, position, token) => {\n                const client = this._client;\n                const _provideDocumentHighlights = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asDocumentHighlights(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentHighlights\n                    ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights)\n                    : _provideDocumentHighlights(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentHighlightProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];\n    }\n}\nexports.DocumentHighlightFeature = DocumentHighlightFeature;\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.DocumentSymbolFeature = exports.SupportedSymbolTags = exports.SupportedSymbolKinds = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nexports.SupportedSymbolKinds = [\n    vscode_languageserver_protocol_1.SymbolKind.File,\n    vscode_languageserver_protocol_1.SymbolKind.Module,\n    vscode_languageserver_protocol_1.SymbolKind.Namespace,\n    vscode_languageserver_protocol_1.SymbolKind.Package,\n    vscode_languageserver_protocol_1.SymbolKind.Class,\n    vscode_languageserver_protocol_1.SymbolKind.Method,\n    vscode_languageserver_protocol_1.SymbolKind.Property,\n    vscode_languageserver_protocol_1.SymbolKind.Field,\n    vscode_languageserver_protocol_1.SymbolKind.Constructor,\n    vscode_languageserver_protocol_1.SymbolKind.Enum,\n    vscode_languageserver_protocol_1.SymbolKind.Interface,\n    vscode_languageserver_protocol_1.SymbolKind.Function,\n    vscode_languageserver_protocol_1.SymbolKind.Variable,\n    vscode_languageserver_protocol_1.SymbolKind.Constant,\n    vscode_languageserver_protocol_1.SymbolKind.String,\n    vscode_languageserver_protocol_1.SymbolKind.Number,\n    vscode_languageserver_protocol_1.SymbolKind.Boolean,\n    vscode_languageserver_protocol_1.SymbolKind.Array,\n    vscode_languageserver_protocol_1.SymbolKind.Object,\n    vscode_languageserver_protocol_1.SymbolKind.Key,\n    vscode_languageserver_protocol_1.SymbolKind.Null,\n    vscode_languageserver_protocol_1.SymbolKind.EnumMember,\n    vscode_languageserver_protocol_1.SymbolKind.Struct,\n    vscode_languageserver_protocol_1.SymbolKind.Event,\n    vscode_languageserver_protocol_1.SymbolKind.Operator,\n    vscode_languageserver_protocol_1.SymbolKind.TypeParameter\n];\nexports.SupportedSymbolTags = [\n    vscode_languageserver_protocol_1.SymbolTag.Deprecated\n];\nclass DocumentSymbolFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentSymbolRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let symbolCapabilities = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'documentSymbol');\n        symbolCapabilities.dynamicRegistration = true;\n        symbolCapabilities.symbolKind = {\n            valueSet: exports.SupportedSymbolKinds\n        };\n        symbolCapabilities.hierarchicalDocumentSymbolSupport = true;\n        symbolCapabilities.tagSupport = {\n            valueSet: exports.SupportedSymbolTags\n        };\n        symbolCapabilities.labelSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDocumentSymbols: (document, token) => {\n                const client = this._client;\n                const _provideDocumentSymbols = async (document, token) => {\n                    try {\n                        const data = await client.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document), token);\n                        if (token.isCancellationRequested || data === undefined || data === null) {\n                            return null;\n                        }\n                        if (data.length === 0) {\n                            return [];\n                        }\n                        else {\n                            const first = data[0];\n                            if (vscode_languageserver_protocol_1.DocumentSymbol.is(first)) {\n                                return await client.protocol2CodeConverter.asDocumentSymbols(data, token);\n                            }\n                            else {\n                                return await client.protocol2CodeConverter.asSymbolInformations(data, token);\n                            }\n                        }\n                    }\n                    catch (error) {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, token, error, null);\n                    }\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentSymbols\n                    ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols)\n                    : _provideDocumentSymbols(document, token);\n            }\n        };\n        const metaData = options.label !== undefined ? { label: options.label } : undefined;\n        return [vscode_1.languages.registerDocumentSymbolProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, metaData), provider];\n    }\n}\nexports.DocumentSymbolFeature = DocumentSymbolFeature;\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.WorkspaceSymbolFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst documentSymbol_1 = require(\"./documentSymbol\");\nconst UUID = require(\"./utils/uuid\");\nclass WorkspaceSymbolFeature extends features_1.WorkspaceFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let symbolCapabilities = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'symbol');\n        symbolCapabilities.dynamicRegistration = true;\n        symbolCapabilities.symbolKind = {\n            valueSet: documentSymbol_1.SupportedSymbolKinds\n        };\n        symbolCapabilities.tagSupport = {\n            valueSet: documentSymbol_1.SupportedSymbolTags\n        };\n        symbolCapabilities.resolveSupport = { properties: ['location.range'] };\n    }\n    initialize(capabilities) {\n        if (!capabilities.workspaceSymbolProvider) {\n            return;\n        }\n        this.register({\n            id: UUID.generateUuid(),\n            registerOptions: capabilities.workspaceSymbolProvider === true ? { workDoneProgress: false } : capabilities.workspaceSymbolProvider\n        });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideWorkspaceSymbols: (query, token) => {\n                const client = this._client;\n                const provideWorkspaceSymbols = (query, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, { query }, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asSymbolInformations(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideWorkspaceSymbols\n                    ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols)\n                    : provideWorkspaceSymbols(query, token);\n            },\n            resolveWorkspaceSymbol: options.resolveProvider === true\n                ? (item, token) => {\n                    const client = this._client;\n                    const resolveWorkspaceSymbol = (item, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest.type, client.code2ProtocolConverter.asWorkspaceSymbol(item), token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return null;\n                            }\n                            return client.protocol2CodeConverter.asSymbolInformation(result);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest.type, token, error, null);\n                        });\n                    };\n                    const middleware = client.middleware;\n                    return middleware.resolveWorkspaceSymbol\n                        ? middleware.resolveWorkspaceSymbol(item, token, resolveWorkspaceSymbol)\n                        : resolveWorkspaceSymbol(item, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerWorkspaceSymbolProvider(provider), provider];\n    }\n}\nexports.WorkspaceSymbolFeature = WorkspaceSymbolFeature;\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.ReferencesFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass ReferencesFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.ReferencesRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'references').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideReferences: (document, position, options, token) => {\n                const client = this._client;\n                const _providerReferences = (document, position, options, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, client.code2ProtocolConverter.asReferenceParams(document, position, options), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asReferences(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideReferences\n                    ? middleware.provideReferences(document, position, options, token, _providerReferences)\n                    : _providerReferences(document, position, options, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerReferenceProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.ReferencesFeature = ReferencesFeature;\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.CodeActionFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nconst features_1 = require(\"./features\");\nclass CodeActionFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CodeActionRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const cap = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'codeAction');\n        cap.dynamicRegistration = true;\n        cap.isPreferredSupport = true;\n        cap.disabledSupport = true;\n        cap.dataSupport = true;\n        // We can only resolve the edit property.\n        cap.resolveSupport = {\n            properties: ['edit']\n        };\n        cap.codeActionLiteralSupport = {\n            codeActionKind: {\n                valueSet: [\n                    vscode_languageserver_protocol_1.CodeActionKind.Empty,\n                    vscode_languageserver_protocol_1.CodeActionKind.QuickFix,\n                    vscode_languageserver_protocol_1.CodeActionKind.Refactor,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorInline,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite,\n                    vscode_languageserver_protocol_1.CodeActionKind.Source,\n                    vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports\n                ]\n            }\n        };\n        cap.honorsChangeAnnotations = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideCodeActions: (document, range, context, token) => {\n                const client = this._client;\n                const _provideCodeActions = async (document, range, context, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(range),\n                        context: client.code2ProtocolConverter.asCodeActionContextSync(context)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, params, token).then((values) => {\n                        if (token.isCancellationRequested || values === null || values === undefined) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asCodeActionResult(values, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideCodeActions\n                    ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions)\n                    : _provideCodeActions(document, range, context, token);\n            },\n            resolveCodeAction: options.resolveProvider\n                ? (item, token) => {\n                    const client = this._client;\n                    const middleware = this._client.middleware;\n                    const resolveCodeAction = async (item, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item), token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return item;\n                            }\n                            return client.protocol2CodeConverter.asCodeAction(result, token);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeActionResolveRequest.type, token, error, item);\n                        });\n                    };\n                    return middleware.resolveCodeAction\n                        ? middleware.resolveCodeAction(item, token, resolveCodeAction)\n                        : resolveCodeAction(item, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCodeActionsProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, (options.codeActionKinds\n                ? { providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds) }\n                : undefined)), provider];\n    }\n}\nexports.CodeActionFeature = CodeActionFeature;\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.CodeLensFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nconst features_1 = require(\"./features\");\nclass CodeLensFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CodeLensRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'codeLens').dynamicRegistration = true;\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'codeLens').refreshSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.CodeLensRefreshRequest.type, async () => {\n            for (const provider of this.getAllProviders()) {\n                provider.onDidChangeCodeLensEmitter.fire();\n            }\n        });\n        const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const eventEmitter = new vscode_1.EventEmitter();\n        const provider = {\n            onDidChangeCodeLenses: eventEmitter.event,\n            provideCodeLenses: (document, token) => {\n                const client = this._client;\n                const provideCodeLenses = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, client.code2ProtocolConverter.asCodeLensParams(document), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asCodeLenses(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideCodeLenses\n                    ? middleware.provideCodeLenses(document, token, provideCodeLenses)\n                    : provideCodeLenses(document, token);\n            },\n            resolveCodeLens: (options.resolveProvider)\n                ? (codeLens, token) => {\n                    const client = this._client;\n                    const resolveCodeLens = (codeLens, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, client.code2ProtocolConverter.asCodeLens(codeLens), token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return codeLens;\n                            }\n                            return client.protocol2CodeConverter.asCodeLens(result);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, token, error, codeLens);\n                        });\n                    };\n                    const middleware = client.middleware;\n                    return middleware.resolveCodeLens\n                        ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens)\n                        : resolveCodeLens(codeLens, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCodeLensProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), { provider, onDidChangeCodeLensEmitter: eventEmitter }];\n    }\n}\nexports.CodeLensFeature = CodeLensFeature;\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.DocumentOnTypeFormattingFeature = exports.DocumentRangeFormattingFeature = exports.DocumentFormattingFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nconst features_1 = require(\"./features\");\nvar FileFormattingOptions;\n(function (FileFormattingOptions) {\n    function fromConfiguration(document) {\n        const filesConfig = vscode_1.workspace.getConfiguration('files', document);\n        return {\n            trimTrailingWhitespace: filesConfig.get('trimTrailingWhitespace'),\n            trimFinalNewlines: filesConfig.get('trimFinalNewlines'),\n            insertFinalNewline: filesConfig.get('insertFinalNewline'),\n        };\n    }\n    FileFormattingOptions.fromConfiguration = fromConfiguration;\n})(FileFormattingOptions || (FileFormattingOptions = {}));\nclass DocumentFormattingFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'formatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDocumentFormattingEdits: (document, options, token) => {\n                const client = this._client;\n                const provideDocumentFormattingEdits = (document, options, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options, FileFormattingOptions.fromConfiguration(document))\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, params, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asTextEdits(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentFormattingEdits\n                    ? middleware.provideDocumentFormattingEdits(document, options, token, provideDocumentFormattingEdits)\n                    : provideDocumentFormattingEdits(document, options, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentFormattingEditProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];\n    }\n}\nexports.DocumentFormattingFeature = DocumentFormattingFeature;\nclass DocumentRangeFormattingFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'rangeFormatting');\n        capability.dynamicRegistration = true;\n        capability.rangesSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDocumentRangeFormattingEdits: (document, range, options, token) => {\n                const client = this._client;\n                const provideDocumentRangeFormattingEdits = (document, range, options, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(range),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options, FileFormattingOptions.fromConfiguration(document))\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, params, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asTextEdits(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentRangeFormattingEdits\n                    ? middleware.provideDocumentRangeFormattingEdits(document, range, options, token, provideDocumentRangeFormattingEdits)\n                    : provideDocumentRangeFormattingEdits(document, range, options, token);\n            }\n        };\n        if (options.rangesSupport) {\n            provider.provideDocumentRangesFormattingEdits = (document, ranges, options, token) => {\n                const client = this._client;\n                const provideDocumentRangesFormattingEdits = (document, ranges, options, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        ranges: client.code2ProtocolConverter.asRanges(ranges),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options, FileFormattingOptions.fromConfiguration(document))\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentRangesFormattingRequest.type, params, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asTextEdits(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentRangesFormattingRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentRangesFormattingEdits\n                    ? middleware.provideDocumentRangesFormattingEdits(document, ranges, options, token, provideDocumentRangesFormattingEdits)\n                    : provideDocumentRangesFormattingEdits(document, ranges, options, token);\n            };\n        }\n        return [vscode_1.languages.registerDocumentRangeFormattingEditProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];\n    }\n}\nexports.DocumentRangeFormattingFeature = DocumentRangeFormattingFeature;\nclass DocumentOnTypeFormattingFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'onTypeFormatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideOnTypeFormattingEdits: (document, position, ch, options, token) => {\n                const client = this._client;\n                const provideOnTypeFormattingEdits = (document, position, ch, options, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        position: client.code2ProtocolConverter.asPosition(position),\n                        ch: ch,\n                        options: client.code2ProtocolConverter.asFormattingOptions(options, FileFormattingOptions.fromConfiguration(document))\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, params, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asTextEdits(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideOnTypeFormattingEdits\n                    ? middleware.provideOnTypeFormattingEdits(document, position, ch, options, token, provideOnTypeFormattingEdits)\n                    : provideOnTypeFormattingEdits(document, position, ch, options, token);\n            }\n        };\n        const moreTriggerCharacter = options.moreTriggerCharacter || [];\n        return [vscode_1.languages.registerOnTypeFormattingEditProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, options.firstTriggerCharacter, ...moreTriggerCharacter), provider];\n    }\n}\nexports.DocumentOnTypeFormattingFeature = DocumentOnTypeFormattingFeature;\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.RenameFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nconst Is = require(\"./utils/is\");\nconst features_1 = require(\"./features\");\nclass RenameFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.RenameRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let rename = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'rename');\n        rename.dynamicRegistration = true;\n        rename.prepareSupport = true;\n        rename.prepareSupportDefaultBehavior = vscode_languageserver_protocol_1.PrepareSupportDefaultBehavior.Identifier;\n        rename.honorsChangeAnnotations = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);\n        if (!options) {\n            return;\n        }\n        if (Is.boolean(capabilities.renameProvider)) {\n            options.prepareProvider = false;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideRenameEdits: (document, position, newName, token) => {\n                const client = this._client;\n                const provideRenameEdits = (document, position, newName, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        position: client.code2ProtocolConverter.asPosition(position),\n                        newName: newName\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.RenameRequest.type, params, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asWorkspaceEdit(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.RenameRequest.type, token, error, null, false);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideRenameEdits\n                    ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits)\n                    : provideRenameEdits(document, position, newName, token);\n            },\n            prepareRename: options.prepareProvider\n                ? (document, position, token) => {\n                    const client = this._client;\n                    const prepareRename = (document, position, token) => {\n                        let params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            position: client.code2ProtocolConverter.asPosition(position),\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, params, token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return null;\n                            }\n                            if (vscode_languageserver_protocol_1.Range.is(result)) {\n                                return client.protocol2CodeConverter.asRange(result);\n                            }\n                            else if (this.isDefaultBehavior(result)) {\n                                return result.defaultBehavior === true\n                                    ? null\n                                    : Promise.reject(new Error(`The element can't be renamed.`));\n                            }\n                            else if (result && vscode_languageserver_protocol_1.Range.is(result.range)) {\n                                return {\n                                    range: client.protocol2CodeConverter.asRange(result.range),\n                                    placeholder: result.placeholder\n                                };\n                            }\n                            // To cancel the rename vscode API expects a rejected promise.\n                            return Promise.reject(new Error(`The element can't be renamed.`));\n                        }, (error) => {\n                            if (typeof error.message === 'string') {\n                                throw new Error(error.message);\n                            }\n                            else {\n                                throw new Error(`The element can't be renamed.`);\n                            }\n                        });\n                    };\n                    const middleware = client.middleware;\n                    return middleware.prepareRename\n                        ? middleware.prepareRename(document, position, token, prepareRename)\n                        : prepareRename(document, position, token);\n                }\n                : undefined\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerRenameProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n    isDefaultBehavior(value) {\n        const candidate = value;\n        return candidate && Is.boolean(candidate.defaultBehavior);\n    }\n}\nexports.RenameFeature = RenameFeature;\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.DocumentLinkFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass DocumentLinkFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentLinkRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const documentLinkCapabilities = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'documentLink');\n        documentLinkCapabilities.dynamicRegistration = true;\n        documentLinkCapabilities.tooltipSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);\n        if (!options) {\n            return;\n        }\n        this.register({ id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDocumentLinks: (document, token) => {\n                const client = this._client;\n                const provideDocumentLinks = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, client.code2ProtocolConverter.asDocumentLinkParams(document), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asDocumentLinks(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentLinks\n                    ? middleware.provideDocumentLinks(document, token, provideDocumentLinks)\n                    : provideDocumentLinks(document, token);\n            },\n            resolveDocumentLink: options.resolveProvider\n                ? (link, token) => {\n                    const client = this._client;\n                    let resolveDocumentLink = (link, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, client.code2ProtocolConverter.asDocumentLink(link), token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return link;\n                            }\n                            return client.protocol2CodeConverter.asDocumentLink(result);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, token, error, link);\n                        });\n                    };\n                    const middleware = client.middleware;\n                    return middleware.resolveDocumentLink\n                        ? middleware.resolveDocumentLink(link, token, resolveDocumentLink)\n                        : resolveDocumentLink(link, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerDocumentLinkProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];\n    }\n}\nexports.DocumentLinkFeature = DocumentLinkFeature;\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.ExecuteCommandFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nconst features_1 = require(\"./features\");\nclass ExecuteCommandFeature {\n    constructor(client) {\n        this._client = client;\n        this._commands = new Map();\n    }\n    getState() {\n        return { kind: 'workspace', id: this.registrationType.method, registrations: this._commands.size > 0 };\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.ExecuteCommandRequest.type;\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'executeCommand').dynamicRegistration = true;\n    }\n    initialize(capabilities) {\n        if (!capabilities.executeCommandProvider) {\n            return;\n        }\n        this.register({\n            id: UUID.generateUuid(),\n            registerOptions: Object.assign({}, capabilities.executeCommandProvider)\n        });\n    }\n    register(data) {\n        const client = this._client;\n        const middleware = client.middleware;\n        const executeCommand = (command, args) => {\n            let params = {\n                command,\n                arguments: args\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, params).then(undefined, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, undefined, error, undefined);\n            });\n        };\n        if (data.registerOptions.commands) {\n            const disposables = [];\n            for (const command of data.registerOptions.commands) {\n                disposables.push(vscode_1.commands.registerCommand(command, (...args) => {\n                    return middleware.executeCommand\n                        ? middleware.executeCommand(command, args, executeCommand)\n                        : executeCommand(command, args);\n                }));\n            }\n            this._commands.set(data.id, disposables);\n        }\n    }\n    unregister(id) {\n        let disposables = this._commands.get(id);\n        if (disposables) {\n            disposables.forEach(disposable => disposable.dispose());\n        }\n    }\n    clear() {\n        this._commands.forEach((value) => {\n            value.forEach(disposable => disposable.dispose());\n        });\n        this._commands.clear();\n    }\n}\nexports.ExecuteCommandFeature = ExecuteCommandFeature;\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.FileSystemWatcherFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass FileSystemWatcherFeature {\n    constructor(client, notifyFileEvent) {\n        this._client = client;\n        this._notifyFileEvent = notifyFileEvent;\n        this._watchers = new Map();\n    }\n    getState() {\n        return { kind: 'workspace', id: this.registrationType.method, registrations: this._watchers.size > 0 };\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'didChangeWatchedFiles').dynamicRegistration = true;\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'didChangeWatchedFiles').relativePatternSupport = true;\n    }\n    initialize(_capabilities, _documentSelector) {\n    }\n    register(data) {\n        if (!Array.isArray(data.registerOptions.watchers)) {\n            return;\n        }\n        const disposables = [];\n        for (const watcher of data.registerOptions.watchers) {\n            const globPattern = this._client.protocol2CodeConverter.asGlobPattern(watcher.globPattern);\n            if (globPattern === undefined) {\n                continue;\n            }\n            let watchCreate = true, watchChange = true, watchDelete = true;\n            if (watcher.kind !== undefined && watcher.kind !== null) {\n                watchCreate = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Create) !== 0;\n                watchChange = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Change) !== 0;\n                watchDelete = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Delete) !== 0;\n            }\n            const fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher(globPattern, !watchCreate, !watchChange, !watchDelete);\n            this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, disposables);\n            disposables.push(fileSystemWatcher);\n        }\n        this._watchers.set(data.id, disposables);\n    }\n    registerRaw(id, fileSystemWatchers) {\n        let disposables = [];\n        for (let fileSystemWatcher of fileSystemWatchers) {\n            this.hookListeners(fileSystemWatcher, true, true, true, disposables);\n        }\n        this._watchers.set(id, disposables);\n    }\n    hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {\n        if (watchCreate) {\n            fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Created\n            }), null, listeners);\n        }\n        if (watchChange) {\n            fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Changed\n            }), null, listeners);\n        }\n        if (watchDelete) {\n            fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Deleted\n            }), null, listeners);\n        }\n    }\n    unregister(id) {\n        let disposables = this._watchers.get(id);\n        if (disposables) {\n            for (let disposable of disposables) {\n                disposable.dispose();\n            }\n        }\n    }\n    clear() {\n        this._watchers.forEach((disposables) => {\n            for (let disposable of disposables) {\n                disposable.dispose();\n            }\n        });\n        this._watchers.clear();\n    }\n}\nexports.FileSystemWatcherFeature = FileSystemWatcherFeature;\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.ColorProviderFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass ColorProviderFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentColorRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'colorProvider').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideColorPresentations: (color, context, token) => {\n                const client = this._client;\n                const provideColorPresentations = (color, context, token) => {\n                    const requestParams = {\n                        color,\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(context.document),\n                        range: client.code2ProtocolConverter.asRange(context.range)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, requestParams, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return this._client.protocol2CodeConverter.asColorPresentations(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideColorPresentations\n                    ? middleware.provideColorPresentations(color, context, token, provideColorPresentations)\n                    : provideColorPresentations(color, context, token);\n            },\n            provideDocumentColors: (document, token) => {\n                const client = this._client;\n                const provideDocumentColors = (document, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, requestParams, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return this._client.protocol2CodeConverter.asColorInformations(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDocumentColors\n                    ? middleware.provideDocumentColors(document, token, provideDocumentColors)\n                    : provideDocumentColors(document, token);\n            }\n        };\n        return [vscode_1.languages.registerColorProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];\n    }\n}\nexports.ColorProviderFeature = ColorProviderFeature;\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.ImplementationFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass ImplementationFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.ImplementationRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let implementationSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'implementation');\n        implementationSupport.dynamicRegistration = true;\n        implementationSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideImplementation: (document, position, token) => {\n                const client = this._client;\n                const provideImplementation = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asDefinitionResult(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideImplementation\n                    ? middleware.provideImplementation(document, position, token, provideImplementation)\n                    : provideImplementation(document, position, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerImplementationProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.ImplementationFeature = ImplementationFeature;\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.TypeDefinitionFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass TypeDefinitionFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.TypeDefinitionRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'typeDefinition').dynamicRegistration = true;\n        let typeDefinitionSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'typeDefinition');\n        typeDefinitionSupport.dynamicRegistration = true;\n        typeDefinitionSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideTypeDefinition: (document, position, token) => {\n                const client = this._client;\n                const provideTypeDefinition = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asDefinitionResult(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideTypeDefinition\n                    ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition)\n                    : provideTypeDefinition(document, position, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerTypeDefinitionProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.TypeDefinitionFeature = TypeDefinitionFeature;\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.WorkspaceFoldersFeature = exports.arrayDiff = void 0;\nconst UUID = require(\"./utils/uuid\");\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nfunction access(target, key) {\n    if (target === undefined || target === null) {\n        return undefined;\n    }\n    return target[key];\n}\nfunction arrayDiff(left, right) {\n    return left.filter(element => right.indexOf(element) < 0);\n}\nexports.arrayDiff = arrayDiff;\nclass WorkspaceFoldersFeature {\n    constructor(client) {\n        this._client = client;\n        this._listeners = new Map();\n    }\n    getState() {\n        return { kind: 'workspace', id: this.registrationType.method, registrations: this._listeners.size > 0 };\n    }\n    get registrationType() {\n        return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;\n    }\n    fillInitializeParams(params) {\n        const folders = vscode_1.workspace.workspaceFolders;\n        this.initializeWithFolders(folders);\n        if (folders === void 0) {\n            params.workspaceFolders = null;\n        }\n        else {\n            params.workspaceFolders = folders.map(folder => this.asProtocol(folder));\n        }\n    }\n    initializeWithFolders(currentWorkspaceFolders) {\n        this._initialFolders = currentWorkspaceFolders;\n    }\n    fillClientCapabilities(capabilities) {\n        capabilities.workspace = capabilities.workspace || {};\n        capabilities.workspace.workspaceFolders = true;\n    }\n    initialize(capabilities) {\n        const client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {\n            const workspaceFolders = () => {\n                const folders = vscode_1.workspace.workspaceFolders;\n                if (folders === undefined) {\n                    return null;\n                }\n                const result = folders.map((folder) => {\n                    return this.asProtocol(folder);\n                });\n                return result;\n            };\n            const middleware = client.middleware.workspace;\n            return middleware && middleware.workspaceFolders\n                ? middleware.workspaceFolders(token, workspaceFolders)\n                : workspaceFolders(token);\n        });\n        const value = access(access(access(capabilities, 'workspace'), 'workspaceFolders'), 'changeNotifications');\n        let id;\n        if (typeof value === 'string') {\n            id = value;\n        }\n        else if (value === true) {\n            id = UUID.generateUuid();\n        }\n        if (id) {\n            this.register({ id: id, registerOptions: undefined });\n        }\n    }\n    sendInitialEvent(currentWorkspaceFolders) {\n        let promise;\n        if (this._initialFolders && currentWorkspaceFolders) {\n            const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);\n            const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);\n            if (added.length > 0 || removed.length > 0) {\n                promise = this.doSendEvent(added, removed);\n            }\n        }\n        else if (this._initialFolders) {\n            promise = this.doSendEvent([], this._initialFolders);\n        }\n        else if (currentWorkspaceFolders) {\n            promise = this.doSendEvent(currentWorkspaceFolders, []);\n        }\n        if (promise !== undefined) {\n            promise.catch((error) => {\n                this._client.error(`Sending notification ${vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type.method} failed`, error);\n            });\n        }\n    }\n    doSendEvent(addedFolders, removedFolders) {\n        let params = {\n            event: {\n                added: addedFolders.map(folder => this.asProtocol(folder)),\n                removed: removedFolders.map(folder => this.asProtocol(folder))\n            }\n        };\n        return this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);\n    }\n    register(data) {\n        let id = data.id;\n        let client = this._client;\n        let disposable = vscode_1.workspace.onDidChangeWorkspaceFolders((event) => {\n            let didChangeWorkspaceFolders = (event) => {\n                return this.doSendEvent(event.added, event.removed);\n            };\n            let middleware = client.middleware.workspace;\n            const promise = middleware && middleware.didChangeWorkspaceFolders\n                ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders)\n                : didChangeWorkspaceFolders(event);\n            promise.catch((error) => {\n                this._client.error(`Sending notification ${vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type.method} failed`, error);\n            });\n        });\n        this._listeners.set(id, disposable);\n        this.sendInitialEvent(vscode_1.workspace.workspaceFolders);\n    }\n    unregister(id) {\n        let disposable = this._listeners.get(id);\n        if (disposable === void 0) {\n            return;\n        }\n        this._listeners.delete(id);\n        disposable.dispose();\n    }\n    clear() {\n        for (let disposable of this._listeners.values()) {\n            disposable.dispose();\n        }\n        this._listeners.clear();\n    }\n    asProtocol(workspaceFolder) {\n        if (workspaceFolder === void 0) {\n            return null;\n        }\n        return { uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), name: workspaceFolder.name };\n    }\n}\nexports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;\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.FoldingRangeFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass FoldingRangeFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.FoldingRangeRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'foldingRange');\n        capability.dynamicRegistration = true;\n        capability.rangeLimit = 5000;\n        capability.lineFoldingOnly = true;\n        capability.foldingRangeKind = { valueSet: [vscode_languageserver_protocol_1.FoldingRangeKind.Comment, vscode_languageserver_protocol_1.FoldingRangeKind.Imports, vscode_languageserver_protocol_1.FoldingRangeKind.Region] };\n        capability.foldingRange = { collapsedText: false };\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'foldingRange').refreshSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        this._client.onRequest(vscode_languageserver_protocol_1.FoldingRangeRefreshRequest.type, async () => {\n            for (const provider of this.getAllProviders()) {\n                provider.onDidChangeFoldingRange.fire();\n            }\n        });\n        let [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const eventEmitter = new vscode_1.EventEmitter();\n        const provider = {\n            onDidChangeFoldingRanges: eventEmitter.event,\n            provideFoldingRanges: (document, context, token) => {\n                const client = this._client;\n                const provideFoldingRanges = (document, _, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asFoldingRanges(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideFoldingRanges\n                    ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges)\n                    : provideFoldingRanges(document, context, token);\n            }\n        };\n        return [vscode_1.languages.registerFoldingRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), { provider: provider, onDidChangeFoldingRange: eventEmitter }];\n    }\n}\nexports.FoldingRangeFeature = FoldingRangeFeature;\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.DeclarationFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass DeclarationFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DeclarationRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const declarationSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'declaration');\n        declarationSupport.dynamicRegistration = true;\n        declarationSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideDeclaration: (document, position, token) => {\n                const client = this._client;\n                const provideDeclaration = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asDeclarationResult(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideDeclaration\n                    ? middleware.provideDeclaration(document, position, token, provideDeclaration)\n                    : provideDeclaration(document, position, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerDeclarationProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.DeclarationFeature = DeclarationFeature;\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.SelectionRangeFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass SelectionRangeFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SelectionRangeRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'selectionRange');\n        capability.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideSelectionRanges: (document, positions, token) => {\n                const client = this._client;\n                const provideSelectionRanges = async (document, positions, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        positions: client.code2ProtocolConverter.asPositionsSync(positions, token)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, requestParams, token).then((ranges) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asSelectionRanges(ranges, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideSelectionRanges\n                    ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges)\n                    : provideSelectionRanges(document, positions, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerSelectionRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.SelectionRangeFeature = SelectionRangeFeature;\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.ProgressFeature = void 0;\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst progressPart_1 = require(\"./progressPart\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = Object.create(null);\n    }\n    return target[key];\n}\nclass ProgressFeature {\n    constructor(_client) {\n        this._client = _client;\n        this.activeParts = new Set();\n    }\n    getState() {\n        return { kind: 'window', id: vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.method, registrations: this.activeParts.size > 0 };\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(capabilities, 'window').workDoneProgress = true;\n    }\n    initialize() {\n        const client = this._client;\n        const deleteHandler = (part) => {\n            this.activeParts.delete(part);\n        };\n        const createHandler = (params) => {\n            this.activeParts.add(new progressPart_1.ProgressPart(this._client, params.token, deleteHandler));\n        };\n        client.onRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, createHandler);\n    }\n    clear() {\n        for (const part of this.activeParts) {\n            part.done();\n        }\n        this.activeParts.clear();\n    }\n}\nexports.ProgressFeature = ProgressFeature;\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.CallHierarchyFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass CallHierarchyProvider {\n    constructor(client) {\n        this.client = client;\n        this.middleware = client.middleware;\n    }\n    prepareCallHierarchy(document, position, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const prepareCallHierarchy = (document, position, token) => {\n            const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);\n            return client.sendRequest(vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, params, token).then((result) => {\n                if (token.isCancellationRequested) {\n                    return null;\n                }\n                return client.protocol2CodeConverter.asCallHierarchyItems(result, token);\n            }, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, token, error, null);\n            });\n        };\n        return middleware.prepareCallHierarchy\n            ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy)\n            : prepareCallHierarchy(document, position, token);\n    }\n    provideCallHierarchyIncomingCalls(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideCallHierarchyIncomingCalls = (item, token) => {\n            const params = {\n                item: client.code2ProtocolConverter.asCallHierarchyItem(item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest.type, params, token).then((result) => {\n                if (token.isCancellationRequested) {\n                    return null;\n                }\n                return client.protocol2CodeConverter.asCallHierarchyIncomingCalls(result, token);\n            }, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest.type, token, error, null);\n            });\n        };\n        return middleware.provideCallHierarchyIncomingCalls\n            ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls)\n            : provideCallHierarchyIncomingCalls(item, token);\n    }\n    provideCallHierarchyOutgoingCalls(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideCallHierarchyOutgoingCalls = (item, token) => {\n            const params = {\n                item: client.code2ProtocolConverter.asCallHierarchyItem(item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest.type, params, token).then((result) => {\n                if (token.isCancellationRequested) {\n                    return null;\n                }\n                return client.protocol2CodeConverter.asCallHierarchyOutgoingCalls(result, token);\n            }, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest.type, token, error, null);\n            });\n        };\n        return middleware.provideCallHierarchyOutgoingCalls\n            ? middleware.provideCallHierarchyOutgoingCalls(item, token, provideCallHierarchyOutgoingCalls)\n            : provideCallHierarchyOutgoingCalls(item, token);\n    }\n}\nclass CallHierarchyFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type);\n    }\n    fillClientCapabilities(cap) {\n        const capabilities = cap;\n        const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'callHierarchy');\n        capability.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const client = this._client;\n        const provider = new CallHierarchyProvider(client);\n        return [vscode_1.languages.registerCallHierarchyProvider(this._client.protocol2CodeConverter.asDocumentSelector(options.documentSelector), provider), provider];\n    }\n}\nexports.CallHierarchyFeature = CallHierarchyFeature;\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.SemanticTokensFeature = void 0;\nconst vscode = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst Is = require(\"./utils/is\");\nclass SemanticTokensFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SemanticTokensRegistrationType.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'semanticTokens');\n        capability.dynamicRegistration = true;\n        capability.tokenTypes = [\n            vscode_languageserver_protocol_1.SemanticTokenTypes.namespace,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.type,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.class,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.enum,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.interface,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.struct,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.typeParameter,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.parameter,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.variable,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.property,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.enumMember,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.event,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.function,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.method,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.macro,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.keyword,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.modifier,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.comment,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.string,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.number,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.regexp,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.operator,\n            vscode_languageserver_protocol_1.SemanticTokenTypes.decorator\n        ];\n        capability.tokenModifiers = [\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.declaration,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.definition,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.static,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.deprecated,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.abstract,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.async,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.modification,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.documentation,\n            vscode_languageserver_protocol_1.SemanticTokenModifiers.defaultLibrary\n        ];\n        capability.formats = [vscode_languageserver_protocol_1.TokenFormat.Relative];\n        capability.requests = {\n            range: true,\n            full: {\n                delta: true\n            }\n        };\n        capability.multilineTokenSupport = false;\n        capability.overlappingTokenSupport = false;\n        capability.serverCancelSupport = true;\n        capability.augmentsSyntaxTokens = true;\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'semanticTokens').refreshSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.SemanticTokensRefreshRequest.type, async () => {\n            for (const provider of this.getAllProviders()) {\n                provider.onDidChangeSemanticTokensEmitter.fire();\n            }\n        });\n        const [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const fullProvider = Is.boolean(options.full) ? options.full : options.full !== undefined;\n        const hasEditProvider = options.full !== undefined && typeof options.full !== 'boolean' && options.full.delta === true;\n        const eventEmitter = new vscode.EventEmitter();\n        const documentProvider = fullProvider\n            ? {\n                onDidChangeSemanticTokens: eventEmitter.event,\n                provideDocumentSemanticTokens: (document, token) => {\n                    const client = this._client;\n                    const middleware = client.middleware;\n                    const provideDocumentSemanticTokens = (document, token) => {\n                        const params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.SemanticTokensRequest.type, params, token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return null;\n                            }\n                            return client.protocol2CodeConverter.asSemanticTokens(result, token);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.SemanticTokensRequest.type, token, error, null);\n                        });\n                    };\n                    return middleware.provideDocumentSemanticTokens\n                        ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens)\n                        : provideDocumentSemanticTokens(document, token);\n                },\n                provideDocumentSemanticTokensEdits: hasEditProvider\n                    ? (document, previousResultId, token) => {\n                        const client = this._client;\n                        const middleware = client.middleware;\n                        const provideDocumentSemanticTokensEdits = (document, previousResultId, token) => {\n                            const params = {\n                                textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                                previousResultId\n                            };\n                            return client.sendRequest(vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.type, params, token).then(async (result) => {\n                                if (token.isCancellationRequested) {\n                                    return null;\n                                }\n                                if (vscode_languageserver_protocol_1.SemanticTokens.is(result)) {\n                                    return await client.protocol2CodeConverter.asSemanticTokens(result, token);\n                                }\n                                else {\n                                    return await client.protocol2CodeConverter.asSemanticTokensEdits(result, token);\n                                }\n                            }, (error) => {\n                                return client.handleFailedRequest(vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.type, token, error, null);\n                            });\n                        };\n                        return middleware.provideDocumentSemanticTokensEdits\n                            ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits)\n                            : provideDocumentSemanticTokensEdits(document, previousResultId, token);\n                    }\n                    : undefined\n            }\n            : undefined;\n        const hasRangeProvider = options.range === true;\n        const rangeProvider = hasRangeProvider\n            ? {\n                provideDocumentRangeSemanticTokens: (document, range, token) => {\n                    const client = this._client;\n                    const middleware = client.middleware;\n                    const provideDocumentRangeSemanticTokens = (document, range, token) => {\n                        const params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            range: client.code2ProtocolConverter.asRange(range)\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.SemanticTokensRangeRequest.type, params, token).then((result) => {\n                            if (token.isCancellationRequested) {\n                                return null;\n                            }\n                            return client.protocol2CodeConverter.asSemanticTokens(result, token);\n                        }, (error) => {\n                            return client.handleFailedRequest(vscode_languageserver_protocol_1.SemanticTokensRangeRequest.type, token, error, null);\n                        });\n                    };\n                    return middleware.provideDocumentRangeSemanticTokens\n                        ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens)\n                        : provideDocumentRangeSemanticTokens(document, range, token);\n                }\n            }\n            : undefined;\n        const disposables = [];\n        const client = this._client;\n        const legend = client.protocol2CodeConverter.asSemanticTokensLegend(options.legend);\n        const documentSelector = client.protocol2CodeConverter.asDocumentSelector(selector);\n        if (documentProvider !== undefined) {\n            disposables.push(vscode.languages.registerDocumentSemanticTokensProvider(documentSelector, documentProvider, legend));\n        }\n        if (rangeProvider !== undefined) {\n            disposables.push(vscode.languages.registerDocumentRangeSemanticTokensProvider(documentSelector, rangeProvider, legend));\n        }\n        return [new vscode.Disposable(() => disposables.forEach(item => item.dispose())), { range: rangeProvider, full: documentProvider, onDidChangeSemanticTokensEmitter: eventEmitter }];\n    }\n}\nexports.SemanticTokensFeature = SemanticTokensFeature;\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.WillDeleteFilesFeature = exports.WillRenameFilesFeature = exports.WillCreateFilesFeature = exports.DidDeleteFilesFeature = exports.DidRenameFilesFeature = exports.DidCreateFilesFeature = void 0;\nconst code = require(\"vscode\");\nconst minimatch = require(\"minimatch\");\nconst proto = require(\"vscode-languageserver-protocol\");\nconst UUID = require(\"./utils/uuid\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nfunction access(target, key) {\n    return target[key];\n}\nfunction assign(target, key, value) {\n    target[key] = value;\n}\nclass FileOperationFeature {\n    constructor(client, event, registrationType, clientCapability, serverCapability) {\n        this._client = client;\n        this._event = event;\n        this._registrationType = registrationType;\n        this._clientCapability = clientCapability;\n        this._serverCapability = serverCapability;\n        this._filters = new Map();\n    }\n    getState() {\n        return { kind: 'workspace', id: this._registrationType.method, registrations: this._filters.size > 0 };\n    }\n    filterSize() {\n        return this._filters.size;\n    }\n    get registrationType() {\n        return this._registrationType;\n    }\n    fillClientCapabilities(capabilities) {\n        const value = ensure(ensure(capabilities, 'workspace'), 'fileOperations');\n        // this happens n times but it is the same value so we tolerate this.\n        assign(value, 'dynamicRegistration', true);\n        assign(value, this._clientCapability, true);\n    }\n    initialize(capabilities) {\n        const options = capabilities.workspace?.fileOperations;\n        const capability = options !== undefined ? access(options, this._serverCapability) : undefined;\n        if (capability?.filters !== undefined) {\n            try {\n                this.register({\n                    id: UUID.generateUuid(),\n                    registerOptions: { filters: capability.filters }\n                });\n            }\n            catch (e) {\n                this._client.warn(`Ignoring invalid glob pattern for ${this._serverCapability} registration: ${e}`);\n            }\n        }\n    }\n    register(data) {\n        if (!this._listener) {\n            this._listener = this._event(this.send, this);\n        }\n        const minimatchFilter = data.registerOptions.filters.map((filter) => {\n            const matcher = new minimatch.Minimatch(filter.pattern.glob, FileOperationFeature.asMinimatchOptions(filter.pattern.options));\n            if (!matcher.makeRe()) {\n                throw new Error(`Invalid pattern ${filter.pattern.glob}!`);\n            }\n            return { scheme: filter.scheme, matcher, kind: filter.pattern.matches };\n        });\n        this._filters.set(data.id, minimatchFilter);\n    }\n    unregister(id) {\n        this._filters.delete(id);\n        if (this._filters.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    clear() {\n        this._filters.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    getFileType(uri) {\n        return FileOperationFeature.getFileType(uri);\n    }\n    async filter(event, prop) {\n        // (Asynchronously) map each file onto a boolean of whether it matches\n        // any of the globs.\n        const fileMatches = await Promise.all(event.files.map(async (item) => {\n            const uri = prop(item);\n            // Use fsPath to make this consistent with file system watchers but help\n            // minimatch to use '/' instead of `\\\\` if present.\n            const path = uri.fsPath.replace(/\\\\/g, '/');\n            for (const filters of this._filters.values()) {\n                for (const filter of filters) {\n                    if (filter.scheme !== undefined && filter.scheme !== uri.scheme) {\n                        continue;\n                    }\n                    if (filter.matcher.match(path)) {\n                        // The pattern matches. If kind is undefined then everything is ok\n                        if (filter.kind === undefined) {\n                            return true;\n                        }\n                        const fileType = await this.getFileType(uri);\n                        // If we can't determine the file type than we treat it as a match.\n                        // Dropping it would be another alternative.\n                        if (fileType === undefined) {\n                            this._client.error(`Failed to determine file type for ${uri.toString()}.`);\n                            return true;\n                        }\n                        if ((fileType === code.FileType.File && filter.kind === proto.FileOperationPatternKind.file) || (fileType === code.FileType.Directory && filter.kind === proto.FileOperationPatternKind.folder)) {\n                            return true;\n                        }\n                    }\n                    else if (filter.kind === proto.FileOperationPatternKind.folder) {\n                        const fileType = await FileOperationFeature.getFileType(uri);\n                        if (fileType === code.FileType.Directory && filter.matcher.match(`${path}/`)) {\n                            return true;\n                        }\n                    }\n                }\n            }\n            return false;\n        }));\n        // Filter the files to those that matched.\n        const files = event.files.filter((_, index) => fileMatches[index]);\n        return { ...event, files };\n    }\n    static async getFileType(uri) {\n        try {\n            return (await code.workspace.fs.stat(uri)).type;\n        }\n        catch (e) {\n            return undefined;\n        }\n    }\n    static asMinimatchOptions(options) {\n        // The spec doesn't state that dot files don't match. So we make\n        // matching those the default.\n        const result = { dot: true };\n        if (options?.ignoreCase === true) {\n            result.nocase = true;\n        }\n        return result;\n    }\n}\nclass NotificationFileOperationFeature extends FileOperationFeature {\n    constructor(client, event, notificationType, clientCapability, serverCapability, accessUri, createParams) {\n        super(client, event, notificationType, clientCapability, serverCapability);\n        this._notificationType = notificationType;\n        this._accessUri = accessUri;\n        this._createParams = createParams;\n    }\n    async send(originalEvent) {\n        // Create a copy of the event that has the files filtered to match what the\n        // server wants.\n        const filteredEvent = await this.filter(originalEvent, this._accessUri);\n        if (filteredEvent.files.length) {\n            const next = async (event) => {\n                return this._client.sendNotification(this._notificationType, this._createParams(event));\n            };\n            return this.doSend(filteredEvent, next);\n        }\n    }\n}\nclass CachingNotificationFileOperationFeature extends NotificationFileOperationFeature {\n    constructor() {\n        super(...arguments);\n        this._fsPathFileTypes = new Map();\n    }\n    async getFileType(uri) {\n        const fsPath = uri.fsPath;\n        if (this._fsPathFileTypes.has(fsPath)) {\n            return this._fsPathFileTypes.get(fsPath);\n        }\n        const type = await FileOperationFeature.getFileType(uri);\n        if (type) {\n            this._fsPathFileTypes.set(fsPath, type);\n        }\n        return type;\n    }\n    async cacheFileTypes(event, prop) {\n        // Calling filter will force the matching logic to run. For any item\n        // that requires a getFileType lookup, the overriden getFileType will\n        // be called that will cache the result so that when onDidRename fires,\n        // it can still be checked even though the item no longer exists on disk\n        // in its original location.\n        await this.filter(event, prop);\n    }\n    clearFileTypeCache() {\n        this._fsPathFileTypes.clear();\n    }\n    unregister(id) {\n        super.unregister(id);\n        if (this.filterSize() === 0 && this._willListener) {\n            this._willListener.dispose();\n            this._willListener = undefined;\n        }\n    }\n    clear() {\n        super.clear();\n        if (this._willListener) {\n            this._willListener.dispose();\n            this._willListener = undefined;\n        }\n    }\n}\nclass DidCreateFilesFeature extends NotificationFileOperationFeature {\n    constructor(client) {\n        super(client, code.workspace.onDidCreateFiles, proto.DidCreateFilesNotification.type, 'didCreate', 'didCreate', (i) => i, client.code2ProtocolConverter.asDidCreateFilesParams);\n    }\n    doSend(event, next) {\n        const middleware = this._client.middleware.workspace;\n        return middleware?.didCreateFiles\n            ? middleware.didCreateFiles(event, next)\n            : next(event);\n    }\n}\nexports.DidCreateFilesFeature = DidCreateFilesFeature;\nclass DidRenameFilesFeature extends CachingNotificationFileOperationFeature {\n    constructor(client) {\n        super(client, code.workspace.onDidRenameFiles, proto.DidRenameFilesNotification.type, 'didRename', 'didRename', (i) => i.oldUri, client.code2ProtocolConverter.asDidRenameFilesParams);\n    }\n    register(data) {\n        if (!this._willListener) {\n            this._willListener = code.workspace.onWillRenameFiles(this.willRename, this);\n        }\n        super.register(data);\n    }\n    willRename(e) {\n        e.waitUntil(this.cacheFileTypes(e, (i) => i.oldUri));\n    }\n    doSend(event, next) {\n        this.clearFileTypeCache();\n        const middleware = this._client.middleware.workspace;\n        return middleware?.didRenameFiles\n            ? middleware.didRenameFiles(event, next)\n            : next(event);\n    }\n}\nexports.DidRenameFilesFeature = DidRenameFilesFeature;\nclass DidDeleteFilesFeature extends CachingNotificationFileOperationFeature {\n    constructor(client) {\n        super(client, code.workspace.onDidDeleteFiles, proto.DidDeleteFilesNotification.type, 'didDelete', 'didDelete', (i) => i, client.code2ProtocolConverter.asDidDeleteFilesParams);\n    }\n    register(data) {\n        if (!this._willListener) {\n            this._willListener = code.workspace.onWillDeleteFiles(this.willDelete, this);\n        }\n        super.register(data);\n    }\n    willDelete(e) {\n        e.waitUntil(this.cacheFileTypes(e, (i) => i));\n    }\n    doSend(event, next) {\n        this.clearFileTypeCache();\n        const middleware = this._client.middleware.workspace;\n        return middleware?.didDeleteFiles\n            ? middleware.didDeleteFiles(event, next)\n            : next(event);\n    }\n}\nexports.DidDeleteFilesFeature = DidDeleteFilesFeature;\nclass RequestFileOperationFeature extends FileOperationFeature {\n    constructor(client, event, requestType, clientCapability, serverCapability, accessUri, createParams) {\n        super(client, event, requestType, clientCapability, serverCapability);\n        this._requestType = requestType;\n        this._accessUri = accessUri;\n        this._createParams = createParams;\n    }\n    async send(originalEvent) {\n        const waitUntil = this.waitUntil(originalEvent);\n        originalEvent.waitUntil(waitUntil);\n    }\n    async waitUntil(originalEvent) {\n        // Create a copy of the event that has the files filtered to match what the\n        // server wants.\n        const filteredEvent = await this.filter(originalEvent, this._accessUri);\n        if (filteredEvent.files.length) {\n            const next = (event) => {\n                return this._client.sendRequest(this._requestType, this._createParams(event), event.token)\n                    .then(this._client.protocol2CodeConverter.asWorkspaceEdit);\n            };\n            return this.doSend(filteredEvent, next);\n        }\n        else {\n            return undefined;\n        }\n    }\n}\nclass WillCreateFilesFeature extends RequestFileOperationFeature {\n    constructor(client) {\n        super(client, code.workspace.onWillCreateFiles, proto.WillCreateFilesRequest.type, 'willCreate', 'willCreate', (i) => i, client.code2ProtocolConverter.asWillCreateFilesParams);\n    }\n    doSend(event, next) {\n        const middleware = this._client.middleware.workspace;\n        return middleware?.willCreateFiles\n            ? middleware.willCreateFiles(event, next)\n            : next(event);\n    }\n}\nexports.WillCreateFilesFeature = WillCreateFilesFeature;\nclass WillRenameFilesFeature extends RequestFileOperationFeature {\n    constructor(client) {\n        super(client, code.workspace.onWillRenameFiles, proto.WillRenameFilesRequest.type, 'willRename', 'willRename', (i) => i.oldUri, client.code2ProtocolConverter.asWillRenameFilesParams);\n    }\n    doSend(event, next) {\n        const middleware = this._client.middleware.workspace;\n        return middleware?.willRenameFiles\n            ? middleware.willRenameFiles(event, next)\n            : next(event);\n    }\n}\nexports.WillRenameFilesFeature = WillRenameFilesFeature;\nclass WillDeleteFilesFeature extends RequestFileOperationFeature {\n    constructor(client) {\n        super(client, code.workspace.onWillDeleteFiles, proto.WillDeleteFilesRequest.type, 'willDelete', 'willDelete', (i) => i, client.code2ProtocolConverter.asWillDeleteFilesParams);\n    }\n    doSend(event, next) {\n        const middleware = this._client.middleware.workspace;\n        return middleware?.willDeleteFiles\n            ? middleware.willDeleteFiles(event, next)\n            : next(event);\n    }\n}\nexports.WillDeleteFilesFeature = WillDeleteFilesFeature;\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.LinkedEditingFeature = void 0;\nconst code = require(\"vscode\");\nconst proto = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass LinkedEditingFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, proto.LinkedEditingRangeRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const linkedEditingSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'linkedEditingRange');\n        linkedEditingSupport.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.linkedEditingRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideLinkedEditingRanges: (document, position, token) => {\n                const client = this._client;\n                const provideLinkedEditing = (document, position, token) => {\n                    return client.sendRequest(proto.LinkedEditingRangeRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asLinkedEditingRanges(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(proto.LinkedEditingRangeRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideLinkedEditingRange\n                    ? middleware.provideLinkedEditingRange(document, position, token, provideLinkedEditing)\n                    : provideLinkedEditing(document, position, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), provider];\n    }\n    registerProvider(selector, provider) {\n        return code.languages.registerLinkedEditingRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.LinkedEditingFeature = LinkedEditingFeature;\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.TypeHierarchyFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass TypeHierarchyProvider {\n    constructor(client) {\n        this.client = client;\n        this.middleware = client.middleware;\n    }\n    prepareTypeHierarchy(document, position, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const prepareTypeHierarchy = (document, position, token) => {\n            const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);\n            return client.sendRequest(vscode_languageserver_protocol_1.TypeHierarchyPrepareRequest.type, params, token).then((result) => {\n                if (token.isCancellationRequested) {\n                    return null;\n                }\n                return client.protocol2CodeConverter.asTypeHierarchyItems(result, token);\n            }, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeHierarchyPrepareRequest.type, token, error, null);\n            });\n        };\n        return middleware.prepareTypeHierarchy\n            ? middleware.prepareTypeHierarchy(document, position, token, prepareTypeHierarchy)\n            : prepareTypeHierarchy(document, position, token);\n    }\n    provideTypeHierarchySupertypes(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideTypeHierarchySupertypes = (item, token) => {\n            const params = {\n                item: client.code2ProtocolConverter.asTypeHierarchyItem(item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.TypeHierarchySupertypesRequest.type, params, token).then((result) => {\n                if (token.isCancellationRequested) {\n                    return null;\n                }\n                return client.protocol2CodeConverter.asTypeHierarchyItems(result, token);\n            }, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeHierarchySupertypesRequest.type, token, error, null);\n            });\n        };\n        return middleware.provideTypeHierarchySupertypes\n            ? middleware.provideTypeHierarchySupertypes(item, token, provideTypeHierarchySupertypes)\n            : provideTypeHierarchySupertypes(item, token);\n    }\n    provideTypeHierarchySubtypes(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideTypeHierarchySubtypes = (item, token) => {\n            const params = {\n                item: client.code2ProtocolConverter.asTypeHierarchyItem(item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.TypeHierarchySubtypesRequest.type, params, token).then((result) => {\n                if (token.isCancellationRequested) {\n                    return null;\n                }\n                return client.protocol2CodeConverter.asTypeHierarchyItems(result, token);\n            }, (error) => {\n                return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeHierarchySubtypesRequest.type, token, error, null);\n            });\n        };\n        return middleware.provideTypeHierarchySubtypes\n            ? middleware.provideTypeHierarchySubtypes(item, token, provideTypeHierarchySubtypes)\n            : provideTypeHierarchySubtypes(item, token);\n    }\n}\nclass TypeHierarchyFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.TypeHierarchyPrepareRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'typeHierarchy');\n        capability.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const [id, options] = this.getRegistration(documentSelector, capabilities.typeHierarchyProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const client = this._client;\n        const provider = new TypeHierarchyProvider(client);\n        return [vscode_1.languages.registerTypeHierarchyProvider(client.protocol2CodeConverter.asDocumentSelector(options.documentSelector), provider), provider];\n    }\n}\nexports.TypeHierarchyFeature = TypeHierarchyFeature;\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.InlineValueFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass InlineValueFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.InlineValueRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'inlineValue').dynamicRegistration = true;\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'inlineValue').refreshSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        this._client.onRequest(vscode_languageserver_protocol_1.InlineValueRefreshRequest.type, async () => {\n            for (const provider of this.getAllProviders()) {\n                provider.onDidChangeInlineValues.fire();\n            }\n        });\n        const [id, options] = this.getRegistration(documentSelector, capabilities.inlineValueProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const eventEmitter = new vscode_1.EventEmitter();\n        const provider = {\n            onDidChangeInlineValues: eventEmitter.event,\n            provideInlineValues: (document, viewPort, context, token) => {\n                const client = this._client;\n                const provideInlineValues = (document, viewPort, context, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(viewPort),\n                        context: client.code2ProtocolConverter.asInlineValueContext(context)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.InlineValueRequest.type, requestParams, token).then((values) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asInlineValues(values, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.InlineValueRequest.type, token, error, null);\n                    });\n                };\n                const middleware = client.middleware;\n                return middleware.provideInlineValues\n                    ? middleware.provideInlineValues(document, viewPort, context, token, provideInlineValues)\n                    : provideInlineValues(document, viewPort, context, token);\n            }\n        };\n        return [this.registerProvider(selector, provider), { provider: provider, onDidChangeInlineValues: eventEmitter }];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerInlineValuesProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.InlineValueFeature = InlineValueFeature;\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.InlayHintsFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nclass InlayHintsFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.InlayHintRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        const inlayHint = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'inlayHint');\n        inlayHint.dynamicRegistration = true;\n        inlayHint.resolveSupport = {\n            properties: ['tooltip', 'textEdits', 'label.tooltip', 'label.location', 'label.command']\n        };\n        (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'workspace'), 'inlayHint').refreshSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        this._client.onRequest(vscode_languageserver_protocol_1.InlayHintRefreshRequest.type, async () => {\n            for (const provider of this.getAllProviders()) {\n                provider.onDidChangeInlayHints.fire();\n            }\n        });\n        const [id, options] = this.getRegistration(documentSelector, capabilities.inlayHintProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register({ id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const eventEmitter = new vscode_1.EventEmitter();\n        const provider = {\n            onDidChangeInlayHints: eventEmitter.event,\n            provideInlayHints: (document, viewPort, token) => {\n                const client = this._client;\n                const provideInlayHints = async (document, viewPort, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(viewPort)\n                    };\n                    try {\n                        const values = await client.sendRequest(vscode_languageserver_protocol_1.InlayHintRequest.type, requestParams, token);\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asInlayHints(values, token);\n                    }\n                    catch (error) {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.InlayHintRequest.type, token, error, null);\n                    }\n                };\n                const middleware = client.middleware;\n                return middleware.provideInlayHints\n                    ? middleware.provideInlayHints(document, viewPort, token, provideInlayHints)\n                    : provideInlayHints(document, viewPort, token);\n            }\n        };\n        provider.resolveInlayHint = options.resolveProvider === true\n            ? (hint, token) => {\n                const client = this._client;\n                const resolveInlayHint = async (item, token) => {\n                    try {\n                        const value = await client.sendRequest(vscode_languageserver_protocol_1.InlayHintResolveRequest.type, client.code2ProtocolConverter.asInlayHint(item), token);\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        const result = client.protocol2CodeConverter.asInlayHint(value, token);\n                        return token.isCancellationRequested ? null : result;\n                    }\n                    catch (error) {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.InlayHintResolveRequest.type, token, error, null);\n                    }\n                };\n                const middleware = client.middleware;\n                return middleware.resolveInlayHint\n                    ? middleware.resolveInlayHint(hint, token, resolveInlayHint)\n                    : resolveInlayHint(hint, token);\n            }\n            : undefined;\n        return [this.registerProvider(selector, provider), { provider: provider, onDidChangeInlayHints: eventEmitter }];\n    }\n    registerProvider(selector, provider) {\n        return vscode_1.languages.registerInlayHintsProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);\n    }\n}\nexports.InlayHintsFeature = InlayHintsFeature;\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.InlineCompletionItemFeature = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst features_1 = require(\"./features\");\nconst UUID = require(\"./utils/uuid\");\nclass InlineCompletionItemFeature extends features_1.TextDocumentLanguageFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.InlineCompletionRequest.type);\n    }\n    fillClientCapabilities(capabilities) {\n        let inlineCompletion = (0, features_1.ensure)((0, features_1.ensure)(capabilities, 'textDocument'), 'inlineCompletion');\n        inlineCompletion.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.inlineCompletionProvider);\n        if (!options) {\n            return;\n        }\n        this.register({\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const selector = options.documentSelector;\n        const provider = {\n            provideInlineCompletionItems: (document, position, context, token) => {\n                const client = this._client;\n                const middleware = this._client.middleware;\n                const provideInlineCompletionItems = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.InlineCompletionRequest.type, client.code2ProtocolConverter.asInlineCompletionParams(document, position, context), token).then((result) => {\n                        if (token.isCancellationRequested) {\n                            return null;\n                        }\n                        return client.protocol2CodeConverter.asInlineCompletionResult(result, token);\n                    }, (error) => {\n                        return client.handleFailedRequest(vscode_languageserver_protocol_1.InlineCompletionRequest.type, token, error, null);\n                    });\n                };\n                return middleware.provideInlineCompletionItems\n                    ? middleware.provideInlineCompletionItems(document, position, context, token, provideInlineCompletionItems)\n                    : provideInlineCompletionItems(document, position, context, token);\n            }\n        };\n        return [vscode_1.languages.registerInlineCompletionItemProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];\n    }\n}\nexports.InlineCompletionItemFeature = InlineCompletionItemFeature;\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.ProposedFeatures = exports.BaseLanguageClient = exports.MessageTransports = exports.SuspendMode = exports.State = exports.CloseAction = exports.ErrorAction = exports.RevealOutputChannelOn = void 0;\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst c2p = require(\"./codeConverter\");\nconst p2c = require(\"./protocolConverter\");\nconst Is = require(\"./utils/is\");\nconst async_1 = require(\"./utils/async\");\nconst UUID = require(\"./utils/uuid\");\nconst progressPart_1 = require(\"./progressPart\");\nconst features_1 = require(\"./features\");\nconst diagnostic_1 = require(\"./diagnostic\");\nconst notebook_1 = require(\"./notebook\");\nconst configuration_1 = require(\"./configuration\");\nconst textSynchronization_1 = require(\"./textSynchronization\");\nconst completion_1 = require(\"./completion\");\nconst hover_1 = require(\"./hover\");\nconst definition_1 = require(\"./definition\");\nconst signatureHelp_1 = require(\"./signatureHelp\");\nconst documentHighlight_1 = require(\"./documentHighlight\");\nconst documentSymbol_1 = require(\"./documentSymbol\");\nconst workspaceSymbol_1 = require(\"./workspaceSymbol\");\nconst reference_1 = require(\"./reference\");\nconst codeAction_1 = require(\"./codeAction\");\nconst codeLens_1 = require(\"./codeLens\");\nconst formatting_1 = require(\"./formatting\");\nconst rename_1 = require(\"./rename\");\nconst documentLink_1 = require(\"./documentLink\");\nconst executeCommand_1 = require(\"./executeCommand\");\nconst fileSystemWatcher_1 = require(\"./fileSystemWatcher\");\nconst colorProvider_1 = require(\"./colorProvider\");\nconst implementation_1 = require(\"./implementation\");\nconst typeDefinition_1 = require(\"./typeDefinition\");\nconst workspaceFolder_1 = require(\"./workspaceFolder\");\nconst foldingRange_1 = require(\"./foldingRange\");\nconst declaration_1 = require(\"./declaration\");\nconst selectionRange_1 = require(\"./selectionRange\");\nconst progress_1 = require(\"./progress\");\nconst callHierarchy_1 = require(\"./callHierarchy\");\nconst semanticTokens_1 = require(\"./semanticTokens\");\nconst fileOperations_1 = require(\"./fileOperations\");\nconst linkedEditingRange_1 = require(\"./linkedEditingRange\");\nconst typeHierarchy_1 = require(\"./typeHierarchy\");\nconst inlineValue_1 = require(\"./inlineValue\");\nconst inlayHint_1 = require(\"./inlayHint\");\nconst inlineCompletion_1 = require(\"./inlineCompletion\");\n/**\n * Controls when the output channel is revealed.\n */\nvar RevealOutputChannelOn;\n(function (RevealOutputChannelOn) {\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Debug\"] = 0] = \"Debug\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Info\"] = 1] = \"Info\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Warn\"] = 2] = \"Warn\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Error\"] = 3] = \"Error\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Never\"] = 4] = \"Never\";\n})(RevealOutputChannelOn || (exports.RevealOutputChannelOn = RevealOutputChannelOn = {}));\n/**\n * An action to be performed when the connection is producing errors.\n */\nvar ErrorAction;\n(function (ErrorAction) {\n    /**\n     * Continue running the server.\n     */\n    ErrorAction[ErrorAction[\"Continue\"] = 1] = \"Continue\";\n    /**\n     * Shutdown the server.\n     */\n    ErrorAction[ErrorAction[\"Shutdown\"] = 2] = \"Shutdown\";\n})(ErrorAction || (exports.ErrorAction = ErrorAction = {}));\n/**\n * An action to be performed when the connection to a server got closed.\n */\nvar CloseAction;\n(function (CloseAction) {\n    /**\n     * Don't restart the server. The connection stays closed.\n     */\n    CloseAction[CloseAction[\"DoNotRestart\"] = 1] = \"DoNotRestart\";\n    /**\n     * Restart the server.\n     */\n    CloseAction[CloseAction[\"Restart\"] = 2] = \"Restart\";\n})(CloseAction || (exports.CloseAction = CloseAction = {}));\n/**\n * Signals in which state the language client is in.\n */\nvar State;\n(function (State) {\n    /**\n     * The client is stopped or got never started.\n     */\n    State[State[\"Stopped\"] = 1] = \"Stopped\";\n    /**\n     * The client is starting but not ready yet.\n     */\n    State[State[\"Starting\"] = 3] = \"Starting\";\n    /**\n     * The client is running and ready.\n     */\n    State[State[\"Running\"] = 2] = \"Running\";\n})(State || (exports.State = State = {}));\nvar SuspendMode;\n(function (SuspendMode) {\n    /**\n     * Don't allow suspend mode.\n     */\n    SuspendMode[\"off\"] = \"off\";\n    /**\n     * Support suspend mode even if not all\n     * registered providers have a corresponding\n     * activation listener.\n     */\n    SuspendMode[\"on\"] = \"on\";\n})(SuspendMode || (exports.SuspendMode = SuspendMode = {}));\nvar ResolvedClientOptions;\n(function (ResolvedClientOptions) {\n    function sanitizeIsTrusted(isTrusted) {\n        if (isTrusted === undefined || isTrusted === null) {\n            return false;\n        }\n        if ((typeof isTrusted === 'boolean') || (typeof isTrusted === 'object' && isTrusted !== null && Is.stringArray(isTrusted.enabledCommands))) {\n            return isTrusted;\n        }\n        return false;\n    }\n    ResolvedClientOptions.sanitizeIsTrusted = sanitizeIsTrusted;\n})(ResolvedClientOptions || (ResolvedClientOptions = {}));\nclass DefaultErrorHandler {\n    constructor(client, maxRestartCount) {\n        this.client = client;\n        this.maxRestartCount = maxRestartCount;\n        this.restarts = [];\n    }\n    error(_error, _message, count) {\n        if (count && count <= 3) {\n            return { action: ErrorAction.Continue };\n        }\n        return { action: ErrorAction.Shutdown };\n    }\n    closed() {\n        this.restarts.push(Date.now());\n        if (this.restarts.length <= this.maxRestartCount) {\n            return { action: CloseAction.Restart };\n        }\n        else {\n            let diff = this.restarts[this.restarts.length - 1] - this.restarts[0];\n            if (diff <= 3 * 60 * 1000) {\n                return { action: CloseAction.DoNotRestart, message: `The ${this.client.name} server crashed ${this.maxRestartCount + 1} times in the last 3 minutes. The server will not be restarted. See the output for more information.` };\n            }\n            else {\n                this.restarts.shift();\n                return { action: CloseAction.Restart };\n            }\n        }\n    }\n}\nvar ClientState;\n(function (ClientState) {\n    ClientState[\"Initial\"] = \"initial\";\n    ClientState[\"Starting\"] = \"starting\";\n    ClientState[\"StartFailed\"] = \"startFailed\";\n    ClientState[\"Running\"] = \"running\";\n    ClientState[\"Stopping\"] = \"stopping\";\n    ClientState[\"Stopped\"] = \"stopped\";\n})(ClientState || (ClientState = {}));\nvar MessageTransports;\n(function (MessageTransports) {\n    function is(value) {\n        let candidate = value;\n        return candidate && vscode_languageserver_protocol_1.MessageReader.is(value.reader) && vscode_languageserver_protocol_1.MessageWriter.is(value.writer);\n    }\n    MessageTransports.is = is;\n})(MessageTransports || (exports.MessageTransports = MessageTransports = {}));\nclass BaseLanguageClient {\n    constructor(id, name, clientOptions) {\n        this._traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;\n        this._diagnosticQueue = new Map();\n        this._diagnosticQueueState = { state: 'idle' };\n        this._features = [];\n        this._dynamicFeatures = new Map();\n        this.workspaceEditLock = new async_1.Semaphore(1);\n        this._id = id;\n        this._name = name;\n        clientOptions = clientOptions || {};\n        const markdown = { isTrusted: false, supportHtml: false };\n        if (clientOptions.markdown !== undefined) {\n            markdown.isTrusted = ResolvedClientOptions.sanitizeIsTrusted(clientOptions.markdown.isTrusted);\n            markdown.supportHtml = clientOptions.markdown.supportHtml === true;\n        }\n        // const defaultInterval = (clientOptions as TestOptions).$testMode ? 50 : 60000;\n        this._clientOptions = {\n            documentSelector: clientOptions.documentSelector ?? [],\n            synchronize: clientOptions.synchronize ?? {},\n            diagnosticCollectionName: clientOptions.diagnosticCollectionName,\n            outputChannelName: clientOptions.outputChannelName ?? this._name,\n            revealOutputChannelOn: clientOptions.revealOutputChannelOn ?? RevealOutputChannelOn.Error,\n            stdioEncoding: clientOptions.stdioEncoding ?? 'utf8',\n            initializationOptions: clientOptions.initializationOptions,\n            initializationFailedHandler: clientOptions.initializationFailedHandler,\n            progressOnInitialization: !!clientOptions.progressOnInitialization,\n            errorHandler: clientOptions.errorHandler ?? this.createDefaultErrorHandler(clientOptions.connectionOptions?.maxRestartCount),\n            middleware: clientOptions.middleware ?? {},\n            uriConverters: clientOptions.uriConverters,\n            workspaceFolder: clientOptions.workspaceFolder,\n            connectionOptions: clientOptions.connectionOptions,\n            markdown,\n            // suspend: {\n            // \tmode: clientOptions.suspend?.mode ?? SuspendMode.off,\n            // \tcallback: clientOptions.suspend?.callback ?? (() => Promise.resolve(true)),\n            // \tinterval: clientOptions.suspend?.interval ? Math.max(clientOptions.suspend.interval, defaultInterval) : defaultInterval\n            // },\n            diagnosticPullOptions: clientOptions.diagnosticPullOptions ?? { onChange: true, onSave: false },\n            notebookDocumentOptions: clientOptions.notebookDocumentOptions ?? {}\n        };\n        this._clientOptions.synchronize = this._clientOptions.synchronize || {};\n        this._state = ClientState.Initial;\n        this._ignoredRegistrations = new Set();\n        this._listeners = [];\n        this._notificationHandlers = new Map();\n        this._pendingNotificationHandlers = new Map();\n        this._notificationDisposables = new Map();\n        this._requestHandlers = new Map();\n        this._pendingRequestHandlers = new Map();\n        this._requestDisposables = new Map();\n        this._progressHandlers = new Map();\n        this._pendingProgressHandlers = new Map();\n        this._progressDisposables = new Map();\n        this._connection = undefined;\n        // this._idleStart = undefined;\n        this._initializeResult = undefined;\n        if (clientOptions.outputChannel) {\n            this._outputChannel = clientOptions.outputChannel;\n            this._disposeOutputChannel = false;\n        }\n        else {\n            this._outputChannel = undefined;\n            this._disposeOutputChannel = true;\n        }\n        this._traceOutputChannel = clientOptions.traceOutputChannel;\n        this._diagnostics = undefined;\n        this._pendingOpenNotifications = new Set();\n        this._pendingChangeSemaphore = new async_1.Semaphore(1);\n        this._pendingChangeDelayer = new async_1.Delayer(250);\n        this._fileEvents = [];\n        this._fileEventDelayer = new async_1.Delayer(250);\n        this._onStop = undefined;\n        this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter();\n        this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter();\n        this._trace = vscode_languageserver_protocol_1.Trace.Off;\n        this._tracer = {\n            log: (messageOrDataObject, data) => {\n                if (Is.string(messageOrDataObject)) {\n                    this.logTrace(messageOrDataObject, data);\n                }\n                else {\n                    this.logObjectTrace(messageOrDataObject);\n                }\n            },\n        };\n        this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : undefined);\n        this._p2c = p2c.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : undefined, this._clientOptions.markdown.isTrusted, this._clientOptions.markdown.supportHtml);\n        this._syncedDocuments = new Map();\n        this.registerBuiltinFeatures();\n    }\n    get name() {\n        return this._name;\n    }\n    get middleware() {\n        return this._clientOptions.middleware ?? Object.create(null);\n    }\n    get clientOptions() {\n        return this._clientOptions;\n    }\n    get protocol2CodeConverter() {\n        return this._p2c;\n    }\n    get code2ProtocolConverter() {\n        return this._c2p;\n    }\n    get onTelemetry() {\n        return this._telemetryEmitter.event;\n    }\n    get onDidChangeState() {\n        return this._stateChangeEmitter.event;\n    }\n    get outputChannel() {\n        if (!this._outputChannel) {\n            this._outputChannel = vscode_1.window.createOutputChannel(this._clientOptions.outputChannelName ? this._clientOptions.outputChannelName : this._name);\n        }\n        return this._outputChannel;\n    }\n    get traceOutputChannel() {\n        if (this._traceOutputChannel) {\n            return this._traceOutputChannel;\n        }\n        return this.outputChannel;\n    }\n    get diagnostics() {\n        return this._diagnostics;\n    }\n    get state() {\n        return this.getPublicState();\n    }\n    get $state() {\n        return this._state;\n    }\n    set $state(value) {\n        let oldState = this.getPublicState();\n        this._state = value;\n        let newState = this.getPublicState();\n        if (newState !== oldState) {\n            this._stateChangeEmitter.fire({ oldState, newState });\n        }\n    }\n    getPublicState() {\n        switch (this.$state) {\n            case ClientState.Starting:\n                return State.Starting;\n            case ClientState.Running:\n                return State.Running;\n            default:\n                return State.Stopped;\n        }\n    }\n    get initializeResult() {\n        return this._initializeResult;\n    }\n    async sendRequest(type, ...params) {\n        if (this.$state === ClientState.StartFailed || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped) {\n            return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, `Client is not running`));\n        }\n        // Ensure we have a connection before we force the document sync.\n        const connection = await this.$start();\n        // If any document is synced in full mode make sure we flush any pending\n        // full document syncs.\n        if (this._didChangeTextDocumentFeature.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {\n            await this.sendPendingFullTextDocumentChanges(connection);\n        }\n        const _sendRequest = this._clientOptions.middleware?.sendRequest;\n        if (_sendRequest !== undefined) {\n            let param = undefined;\n            let token = undefined;\n            // Separate cancellation tokens from other parameters for a better client interface\n            if (params.length === 1) {\n                // CancellationToken is an interface, so we need to check if the first param complies to it\n                if (vscode_languageserver_protocol_1.CancellationToken.is(params[0])) {\n                    token = params[0];\n                }\n                else {\n                    param = params[0];\n                }\n            }\n            else if (params.length === 2) {\n                param = params[0];\n                token = params[1];\n            }\n            // Return the general middleware invocation defining `next` as a utility function that reorganizes parameters to\n            // pass them to the original sendRequest function.\n            return _sendRequest(type, param, token, (type, param, token) => {\n                const params = [];\n                // Add the parameters if there are any\n                if (param !== undefined) {\n                    params.push(param);\n                }\n                // Add the cancellation token if there is one\n                if (token !== undefined) {\n                    params.push(token);\n                }\n                return connection.sendRequest(type, ...params);\n            });\n        }\n        else {\n            return connection.sendRequest(type, ...params);\n        }\n    }\n    onRequest(type, handler) {\n        const method = typeof type === 'string' ? type : type.method;\n        this._requestHandlers.set(method, handler);\n        const connection = this.activeConnection();\n        let disposable;\n        if (connection !== undefined) {\n            this._requestDisposables.set(method, connection.onRequest(type, handler));\n            disposable = {\n                dispose: () => {\n                    const disposable = this._requestDisposables.get(method);\n                    if (disposable !== undefined) {\n                        disposable.dispose();\n                        this._requestDisposables.delete(method);\n                    }\n                }\n            };\n        }\n        else {\n            this._pendingRequestHandlers.set(method, handler);\n            disposable = {\n                dispose: () => {\n                    this._pendingRequestHandlers.delete(method);\n                    const disposable = this._requestDisposables.get(method);\n                    if (disposable !== undefined) {\n                        disposable.dispose();\n                        this._requestDisposables.delete(method);\n                    }\n                }\n            };\n        }\n        return {\n            dispose: () => {\n                this._requestHandlers.delete(method);\n                disposable.dispose();\n            }\n        };\n    }\n    async sendNotification(type, params) {\n        if (this.$state === ClientState.StartFailed || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped) {\n            return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, `Client is not running`));\n        }\n        const needsPendingFullTextDocumentSync = this._didChangeTextDocumentFeature.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;\n        let openNotification;\n        if (needsPendingFullTextDocumentSync && typeof type !== 'string' && type.method === vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.method) {\n            openNotification = params?.textDocument.uri;\n            this._pendingOpenNotifications.add(openNotification);\n        }\n        // Ensure we have a connection before we force the document sync.\n        const connection = await this.$start();\n        // If any document is synced in full mode make sure we flush any pending\n        // full document syncs.\n        if (needsPendingFullTextDocumentSync) {\n            await this.sendPendingFullTextDocumentChanges(connection);\n        }\n        // We need to remove the pending open notification before we actually\n        // send the notification over the connection. Otherwise there could be\n        // a request coming in that although the open notification got already put\n        // onto the wire will ignore pending document changes.\n        //\n        // Since the code path of connection.sendNotification is actually sync\n        // until the message is handed of to the writer and the writer as a semaphore\n        // lock with a capacity of 1 no additional async scheduling can happen until\n        // the message is actually handed of.\n        if (openNotification !== undefined) {\n            this._pendingOpenNotifications.delete(openNotification);\n        }\n        const _sendNotification = this._clientOptions.middleware?.sendNotification;\n        return _sendNotification\n            ? _sendNotification(type, connection.sendNotification.bind(connection), params)\n            : connection.sendNotification(type, params);\n    }\n    onNotification(type, handler) {\n        const method = typeof type === 'string' ? type : type.method;\n        this._notificationHandlers.set(method, handler);\n        const connection = this.activeConnection();\n        let disposable;\n        if (connection !== undefined) {\n            this._notificationDisposables.set(method, connection.onNotification(type, handler));\n            disposable = {\n                dispose: () => {\n                    const disposable = this._notificationDisposables.get(method);\n                    if (disposable !== undefined) {\n                        disposable.dispose();\n                        this._notificationDisposables.delete(method);\n                    }\n                }\n            };\n        }\n        else {\n            this._pendingNotificationHandlers.set(method, handler);\n            disposable = {\n                dispose: () => {\n                    this._pendingNotificationHandlers.delete(method);\n                    const disposable = this._notificationDisposables.get(method);\n                    if (disposable !== undefined) {\n                        disposable.dispose();\n                        this._notificationDisposables.delete(method);\n                    }\n                }\n            };\n        }\n        return {\n            dispose: () => {\n                this._notificationHandlers.delete(method);\n                disposable.dispose();\n            }\n        };\n    }\n    async sendProgress(type, token, value) {\n        if (this.$state === ClientState.StartFailed || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped) {\n            return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, `Client is not running`));\n        }\n        try {\n            // Ensure we have a connection before we force the document sync.\n            const connection = await this.$start();\n            return connection.sendProgress(type, token, value);\n        }\n        catch (error) {\n            this.error(`Sending progress for token ${token} failed.`, error);\n            throw error;\n        }\n    }\n    onProgress(type, token, handler) {\n        this._progressHandlers.set(token, { type, handler });\n        const connection = this.activeConnection();\n        let disposable;\n        const handleWorkDoneProgress = this._clientOptions.middleware?.handleWorkDoneProgress;\n        const realHandler = vscode_languageserver_protocol_1.WorkDoneProgress.is(type) && handleWorkDoneProgress !== undefined\n            ? (params) => {\n                handleWorkDoneProgress(token, params, () => handler(params));\n            }\n            : handler;\n        if (connection !== undefined) {\n            this._progressDisposables.set(token, connection.onProgress(type, token, realHandler));\n            disposable = {\n                dispose: () => {\n                    const disposable = this._progressDisposables.get(token);\n                    if (disposable !== undefined) {\n                        disposable.dispose();\n                        this._progressDisposables.delete(token);\n                    }\n                }\n            };\n        }\n        else {\n            this._pendingProgressHandlers.set(token, { type, handler });\n            disposable = {\n                dispose: () => {\n                    this._pendingProgressHandlers.delete(token);\n                    const disposable = this._progressDisposables.get(token);\n                    if (disposable !== undefined) {\n                        disposable.dispose();\n                        this._progressDisposables.delete(token);\n                    }\n                }\n            };\n        }\n        return {\n            dispose: () => {\n                this._progressHandlers.delete(token);\n                disposable.dispose();\n            }\n        };\n    }\n    createDefaultErrorHandler(maxRestartCount) {\n        if (maxRestartCount !== undefined && maxRestartCount < 0) {\n            throw new Error(`Invalid maxRestartCount: ${maxRestartCount}`);\n        }\n        return new DefaultErrorHandler(this, maxRestartCount ?? 4);\n    }\n    async setTrace(value) {\n        this._trace = value;\n        const connection = this.activeConnection();\n        if (connection !== undefined) {\n            await connection.trace(this._trace, this._tracer, {\n                sendNotification: false,\n                traceFormat: this._traceFormat\n            });\n        }\n    }\n    data2String(data) {\n        if (data instanceof vscode_languageserver_protocol_1.ResponseError) {\n            const responseError = data;\n            return `  Message: ${responseError.message}\\n  Code: ${responseError.code} ${responseError.data ? '\\n' + responseError.data.toString() : ''}`;\n        }\n        if (data instanceof Error) {\n            if (Is.string(data.stack)) {\n                return data.stack;\n            }\n            return data.message;\n        }\n        if (Is.string(data)) {\n            return data;\n        }\n        return data.toString();\n    }\n    debug(message, data, showNotification = true) {\n        this.logOutputMessage(vscode_languageserver_protocol_1.MessageType.Debug, RevealOutputChannelOn.Debug, 'Debug', message, data, showNotification);\n    }\n    info(message, data, showNotification = true) {\n        this.logOutputMessage(vscode_languageserver_protocol_1.MessageType.Info, RevealOutputChannelOn.Info, 'Info', message, data, showNotification);\n    }\n    warn(message, data, showNotification = true) {\n        this.logOutputMessage(vscode_languageserver_protocol_1.MessageType.Warning, RevealOutputChannelOn.Warn, 'Warn', message, data, showNotification);\n    }\n    error(message, data, showNotification = true) {\n        this.logOutputMessage(vscode_languageserver_protocol_1.MessageType.Error, RevealOutputChannelOn.Error, 'Error', message, data, showNotification);\n    }\n    logOutputMessage(type, reveal, name, message, data, showNotification) {\n        this.outputChannel.appendLine(`[${name.padEnd(5)} - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data !== null && data !== undefined) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification === 'force' || (showNotification && this._clientOptions.revealOutputChannelOn <= reveal)) {\n            this.showNotificationMessage(type, message);\n        }\n    }\n    showNotificationMessage(type, message) {\n        message = message ?? 'A request has failed. See the output for more information.';\n        const messageFunc = type === vscode_languageserver_protocol_1.MessageType.Error\n            ? vscode_1.window.showErrorMessage\n            : type === vscode_languageserver_protocol_1.MessageType.Warning\n                ? vscode_1.window.showWarningMessage\n                : vscode_1.window.showInformationMessage;\n        void messageFunc(message, 'Go to output').then((selection) => {\n            if (selection !== undefined) {\n                this.outputChannel.show(true);\n            }\n        });\n    }\n    logTrace(message, data) {\n        this.traceOutputChannel.appendLine(`[Trace - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.traceOutputChannel.appendLine(this.data2String(data));\n        }\n    }\n    logObjectTrace(data) {\n        if (data.isLSPMessage && data.type) {\n            this.traceOutputChannel.append(`[LSP   - ${(new Date().toLocaleTimeString())}] `);\n        }\n        else {\n            this.traceOutputChannel.append(`[Trace - ${(new Date().toLocaleTimeString())}] `);\n        }\n        if (data) {\n            this.traceOutputChannel.appendLine(`${JSON.stringify(data)}`);\n        }\n    }\n    needsStart() {\n        return this.$state === ClientState.Initial || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped;\n    }\n    needsStop() {\n        return this.$state === ClientState.Starting || this.$state === ClientState.Running;\n    }\n    activeConnection() {\n        return this.$state === ClientState.Running && this._connection !== undefined ? this._connection : undefined;\n    }\n    isRunning() {\n        return this.$state === ClientState.Running;\n    }\n    async start() {\n        if (this._disposed === 'disposing' || this._disposed === 'disposed') {\n            throw new Error(`Client got disposed and can't be restarted.`);\n        }\n        if (this.$state === ClientState.Stopping) {\n            throw new Error(`Client is currently stopping. Can only restart a full stopped client`);\n        }\n        // We are already running or are in the process of getting up\n        // to speed.\n        if (this._onStart !== undefined) {\n            return this._onStart;\n        }\n        const [promise, resolve, reject] = this.createOnStartPromise();\n        this._onStart = promise;\n        // If we restart then the diagnostics collection is reused.\n        if (this._diagnostics === undefined) {\n            this._diagnostics = this._clientOptions.diagnosticCollectionName\n                ? vscode_1.languages.createDiagnosticCollection(this._clientOptions.diagnosticCollectionName)\n                : vscode_1.languages.createDiagnosticCollection();\n        }\n        // When we start make all buffer handlers pending so that they\n        // get added.\n        for (const [method, handler] of this._notificationHandlers) {\n            if (!this._pendingNotificationHandlers.has(method)) {\n                this._pendingNotificationHandlers.set(method, handler);\n            }\n        }\n        for (const [method, handler] of this._requestHandlers) {\n            if (!this._pendingRequestHandlers.has(method)) {\n                this._pendingRequestHandlers.set(method, handler);\n            }\n        }\n        for (const [token, data] of this._progressHandlers) {\n            if (!this._pendingProgressHandlers.has(token)) {\n                this._pendingProgressHandlers.set(token, data);\n            }\n        }\n        this.$state = ClientState.Starting;\n        try {\n            const connection = await this.createConnection();\n            connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, (message) => {\n                switch (message.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        this.error(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        this.warn(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        this.info(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Debug:\n                        this.debug(message.message, undefined, false);\n                        break;\n                    default:\n                        this.outputChannel.appendLine(message.message);\n                }\n            });\n            connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, (message) => {\n                switch (message.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        void vscode_1.window.showErrorMessage(message.message);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        void vscode_1.window.showWarningMessage(message.message);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        void vscode_1.window.showInformationMessage(message.message);\n                        break;\n                    default:\n                        void vscode_1.window.showInformationMessage(message.message);\n                }\n            });\n            connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, (params) => {\n                let messageFunc;\n                switch (params.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        messageFunc = vscode_1.window.showErrorMessage;\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        messageFunc = vscode_1.window.showWarningMessage;\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        messageFunc = vscode_1.window.showInformationMessage;\n                        break;\n                    default:\n                        messageFunc = vscode_1.window.showInformationMessage;\n                }\n                let actions = params.actions || [];\n                return messageFunc(params.message, ...actions);\n            });\n            connection.onNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, (data) => {\n                this._telemetryEmitter.fire(data);\n            });\n            connection.onRequest(vscode_languageserver_protocol_1.ShowDocumentRequest.type, async (params) => {\n                const showDocument = async (params) => {\n                    const uri = this.protocol2CodeConverter.asUri(params.uri);\n                    try {\n                        if (params.external === true) {\n                            const success = await vscode_1.env.openExternal(uri);\n                            return { success };\n                        }\n                        else {\n                            const options = {};\n                            if (params.selection !== undefined) {\n                                options.selection = this.protocol2CodeConverter.asRange(params.selection);\n                            }\n                            if (params.takeFocus === undefined || params.takeFocus === false) {\n                                options.preserveFocus = true;\n                            }\n                            else if (params.takeFocus === true) {\n                                options.preserveFocus = false;\n                            }\n                            await vscode_1.window.showTextDocument(uri, options);\n                            return { success: true };\n                        }\n                    }\n                    catch (error) {\n                        return { success: false };\n                    }\n                };\n                const middleware = this._clientOptions.middleware.window?.showDocument;\n                if (middleware !== undefined) {\n                    return middleware(params, showDocument);\n                }\n                else {\n                    return showDocument(params);\n                }\n            });\n            connection.listen();\n            await this.initialize(connection);\n            resolve();\n        }\n        catch (error) {\n            this.$state = ClientState.StartFailed;\n            this.error(`${this._name} client: couldn't create connection to server.`, error, 'force');\n            reject(error);\n        }\n        return this._onStart;\n    }\n    createOnStartPromise() {\n        let resolve;\n        let reject;\n        const promise = new Promise((_resolve, _reject) => {\n            resolve = _resolve;\n            reject = _reject;\n        });\n        return [promise, resolve, reject];\n    }\n    async initialize(connection) {\n        this.refreshTrace(connection, false);\n        const initOption = this._clientOptions.initializationOptions;\n        // If the client is locked to a workspace folder use it. In this case the workspace folder\n        // feature is not registered and we need to initialize the value here.\n        const [rootPath, workspaceFolders] = this._clientOptions.workspaceFolder !== undefined\n            ? [this._clientOptions.workspaceFolder.uri.fsPath, [{ uri: this._c2p.asUri(this._clientOptions.workspaceFolder.uri), name: this._clientOptions.workspaceFolder.name }]]\n            : [this._clientGetRootPath(), null];\n        const initParams = {\n            processId: null,\n            clientInfo: {\n                name: vscode_1.env.appName,\n                version: vscode_1.version\n            },\n            locale: this.getLocale(),\n            rootPath: rootPath ? rootPath : null,\n            rootUri: rootPath ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) : null,\n            capabilities: this.computeClientCapabilities(),\n            initializationOptions: Is.func(initOption) ? initOption() : initOption,\n            trace: vscode_languageserver_protocol_1.Trace.toString(this._trace),\n            workspaceFolders: workspaceFolders\n        };\n        this.fillInitializeParams(initParams);\n        if (this._clientOptions.progressOnInitialization) {\n            const token = UUID.generateUuid();\n            const part = new progressPart_1.ProgressPart(connection, token);\n            initParams.workDoneToken = token;\n            try {\n                const result = await this.doInitialize(connection, initParams);\n                part.done();\n                return result;\n            }\n            catch (error) {\n                part.cancel();\n                throw error;\n            }\n        }\n        else {\n            return this.doInitialize(connection, initParams);\n        }\n    }\n    async doInitialize(connection, initParams) {\n        try {\n            const result = await connection.initialize(initParams);\n            if (result.capabilities.positionEncoding !== undefined && result.capabilities.positionEncoding !== vscode_languageserver_protocol_1.PositionEncodingKind.UTF16) {\n                throw new Error(`Unsupported position encoding (${result.capabilities.positionEncoding}) received from server ${this.name}`);\n            }\n            this._initializeResult = result;\n            this.$state = ClientState.Running;\n            let textDocumentSyncOptions = undefined;\n            if (Is.number(result.capabilities.textDocumentSync)) {\n                if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n                    textDocumentSyncOptions = {\n                        openClose: false,\n                        change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,\n                        save: undefined\n                    };\n                }\n                else {\n                    textDocumentSyncOptions = {\n                        openClose: true,\n                        change: result.capabilities.textDocumentSync,\n                        save: {\n                            includeText: false\n                        }\n                    };\n                }\n            }\n            else if (result.capabilities.textDocumentSync !== undefined && result.capabilities.textDocumentSync !== null) {\n                textDocumentSyncOptions = result.capabilities.textDocumentSync;\n            }\n            this._capabilities = Object.assign({}, result.capabilities, { resolvedTextDocumentSync: textDocumentSyncOptions });\n            connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params => this.handleDiagnostics(params));\n            connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params => this.handleRegistrationRequest(params));\n            // See https://github.com/Microsoft/vscode-languageserver-node/issues/199\n            connection.onRequest('client/registerFeature', params => this.handleRegistrationRequest(params));\n            connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params => this.handleUnregistrationRequest(params));\n            // See https://github.com/Microsoft/vscode-languageserver-node/issues/199\n            connection.onRequest('client/unregisterFeature', params => this.handleUnregistrationRequest(params));\n            connection.onRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params => this.handleApplyWorkspaceEdit(params));\n            // Add pending notification, request and progress handlers.\n            for (const [method, handler] of this._pendingNotificationHandlers) {\n                this._notificationDisposables.set(method, connection.onNotification(method, handler));\n            }\n            this._pendingNotificationHandlers.clear();\n            for (const [method, handler] of this._pendingRequestHandlers) {\n                this._requestDisposables.set(method, connection.onRequest(method, handler));\n            }\n            this._pendingRequestHandlers.clear();\n            for (const [token, data] of this._pendingProgressHandlers) {\n                this._progressDisposables.set(token, connection.onProgress(data.type, token, data.handler));\n            }\n            this._pendingProgressHandlers.clear();\n            // if (this._clientOptions.suspend.mode !== SuspendMode.off) {\n            // \tthis._idleInterval =  RAL().timer.setInterval(() => this.checkSuspend(), this._clientOptions.suspend.interval);\n            // }\n            await connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});\n            this.hookFileEvents(connection);\n            this.hookConfigurationChanged(connection);\n            this.initializeFeatures(connection);\n            return result;\n        }\n        catch (error) {\n            if (this._clientOptions.initializationFailedHandler) {\n                if (this._clientOptions.initializationFailedHandler(error)) {\n                    void this.initialize(connection);\n                }\n                else {\n                    void this.stop();\n                }\n            }\n            else if (error instanceof vscode_languageserver_protocol_1.ResponseError && error.data && error.data.retry) {\n                void vscode_1.window.showErrorMessage(error.message, { title: 'Retry', id: 'retry' }).then(item => {\n                    if (item && item.id === 'retry') {\n                        void this.initialize(connection);\n                    }\n                    else {\n                        void this.stop();\n                    }\n                });\n            }\n            else {\n                if (error && error.message) {\n                    void vscode_1.window.showErrorMessage(error.message);\n                }\n                this.error('Server initialization failed.', error);\n                void this.stop();\n            }\n            throw error;\n        }\n    }\n    _clientGetRootPath() {\n        let folders = vscode_1.workspace.workspaceFolders;\n        if (!folders || folders.length === 0) {\n            return undefined;\n        }\n        let folder = folders[0];\n        if (folder.uri.scheme === 'file') {\n            return folder.uri.fsPath;\n        }\n        return undefined;\n    }\n    stop(timeout = 2000) {\n        // Wait 2 seconds on stop\n        return this.shutdown('stop', timeout);\n    }\n    dispose(timeout = 2000) {\n        try {\n            this._disposed = 'disposing';\n            return this.stop(timeout);\n        }\n        finally {\n            this._disposed = 'disposed';\n        }\n    }\n    async shutdown(mode, timeout) {\n        // If the client is stopped or in its initial state return.\n        if (this.$state === ClientState.Stopped || this.$state === ClientState.Initial) {\n            return;\n        }\n        // If we are stopping the client and have a stop promise return it.\n        if (this.$state === ClientState.Stopping) {\n            if (this._onStop !== undefined) {\n                return this._onStop;\n            }\n            else {\n                throw new Error(`Client is stopping but no stop promise available.`);\n            }\n        }\n        const connection = this.activeConnection();\n        // We can't stop a client that is not running (e.g. has no connection). Especially not\n        // on that us starting since it can't be correctly synchronized.\n        if (connection === undefined || this.$state !== ClientState.Running) {\n            throw new Error(`Client is not running and can't be stopped. It's current state is: ${this.$state}`);\n        }\n        this._initializeResult = undefined;\n        this.$state = ClientState.Stopping;\n        this.cleanUp(mode);\n        const tp = new Promise(c => { (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(c, timeout); });\n        const shutdown = (async (connection) => {\n            await connection.shutdown();\n            await connection.exit();\n            return connection;\n        })(connection);\n        return this._onStop = Promise.race([tp, shutdown]).then((connection) => {\n            // The connection won the race with the timeout.\n            if (connection !== undefined) {\n                connection.end();\n                connection.dispose();\n            }\n            else {\n                this.error(`Stopping server timed out`, undefined, false);\n                throw new Error(`Stopping the server timed out`);\n            }\n        }, (error) => {\n            this.error(`Stopping server failed`, error, false);\n            throw error;\n        }).finally(() => {\n            this.$state = ClientState.Stopped;\n            mode === 'stop' && this.cleanUpChannel();\n            this._onStart = undefined;\n            this._onStop = undefined;\n            this._connection = undefined;\n            this._ignoredRegistrations.clear();\n        });\n    }\n    cleanUp(mode) {\n        // purge outstanding file events.\n        this._fileEvents = [];\n        this._fileEventDelayer.cancel();\n        const disposables = this._listeners.splice(0, this._listeners.length);\n        for (const disposable of disposables) {\n            disposable.dispose();\n        }\n        if (this._syncedDocuments) {\n            this._syncedDocuments.clear();\n        }\n        // Clear features in reverse order;\n        for (const feature of Array.from(this._features.entries()).map(entry => entry[1]).reverse()) {\n            feature.clear();\n        }\n        if (mode === 'stop' && this._diagnostics !== undefined) {\n            this._diagnostics.dispose();\n            this._diagnostics = undefined;\n        }\n        if (this._idleInterval !== undefined) {\n            this._idleInterval.dispose();\n            this._idleInterval = undefined;\n        }\n        // this._idleStart = undefined;\n    }\n    cleanUpChannel() {\n        if (this._outputChannel !== undefined && this._disposeOutputChannel) {\n            this._outputChannel.dispose();\n            this._outputChannel = undefined;\n        }\n    }\n    notifyFileEvent(event) {\n        const client = this;\n        async function didChangeWatchedFile(event) {\n            client._fileEvents.push(event);\n            return client._fileEventDelayer.trigger(async () => {\n                await client.sendNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, { changes: client._fileEvents });\n                client._fileEvents = [];\n            });\n        }\n        const workSpaceMiddleware = this.clientOptions.middleware?.workspace;\n        (workSpaceMiddleware?.didChangeWatchedFile ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event)).catch((error) => {\n            client.error(`Notify file events failed.`, error);\n        });\n    }\n    async sendPendingFullTextDocumentChanges(connection) {\n        return this._pendingChangeSemaphore.lock(async () => {\n            try {\n                const changes = this._didChangeTextDocumentFeature.getPendingDocumentChanges(this._pendingOpenNotifications);\n                if (changes.length === 0) {\n                    return;\n                }\n                for (const document of changes) {\n                    const params = this.code2ProtocolConverter.asChangeTextDocumentParams(document);\n                    // We await the send and not the delivery since it is more or less the same for\n                    // notifications.\n                    await connection.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);\n                    this._didChangeTextDocumentFeature.notificationSent(document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);\n                }\n            }\n            catch (error) {\n                this.error(`Sending pending changes failed`, error, false);\n                throw error;\n            }\n        });\n    }\n    triggerPendingChangeDelivery() {\n        this._pendingChangeDelayer.trigger(async () => {\n            const connection = this.activeConnection();\n            if (connection === undefined) {\n                this.triggerPendingChangeDelivery();\n                return;\n            }\n            await this.sendPendingFullTextDocumentChanges(connection);\n        }).catch((error) => this.error(`Delivering pending changes failed`, error, false));\n    }\n    handleDiagnostics(params) {\n        if (!this._diagnostics) {\n            return;\n        }\n        const key = params.uri;\n        if (this._diagnosticQueueState.state === 'busy' && this._diagnosticQueueState.document === key) {\n            // Cancel the active run;\n            this._diagnosticQueueState.tokenSource.cancel();\n        }\n        this._diagnosticQueue.set(params.uri, params.diagnostics);\n        this.triggerDiagnosticQueue();\n    }\n    triggerDiagnosticQueue() {\n        (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => { this.workDiagnosticQueue(); });\n    }\n    workDiagnosticQueue() {\n        if (this._diagnosticQueueState.state === 'busy') {\n            return;\n        }\n        const next = this._diagnosticQueue.entries().next();\n        if (next.done === true) {\n            // Nothing in the queue\n            return;\n        }\n        const [document, diagnostics] = next.value;\n        this._diagnosticQueue.delete(document);\n        const tokenSource = new vscode_1.CancellationTokenSource();\n        this._diagnosticQueueState = { state: 'busy', document: document, tokenSource };\n        this._p2c.asDiagnostics(diagnostics, tokenSource.token).then((converted) => {\n            if (!tokenSource.token.isCancellationRequested) {\n                const uri = this._p2c.asUri(document);\n                const middleware = this.clientOptions.middleware;\n                if (middleware.handleDiagnostics) {\n                    middleware.handleDiagnostics(uri, converted, (uri, diagnostics) => this.setDiagnostics(uri, diagnostics));\n                }\n                else {\n                    this.setDiagnostics(uri, converted);\n                }\n            }\n        }).finally(() => {\n            this._diagnosticQueueState = { state: 'idle' };\n            this.triggerDiagnosticQueue();\n        });\n    }\n    setDiagnostics(uri, diagnostics) {\n        if (!this._diagnostics) {\n            return;\n        }\n        this._diagnostics.set(uri, diagnostics);\n    }\n    getLocale() {\n        return vscode_1.env.language;\n    }\n    async $start() {\n        if (this.$state === ClientState.StartFailed) {\n            throw new Error(`Previous start failed. Can't restart server.`);\n        }\n        await this.start();\n        const connection = this.activeConnection();\n        if (connection === undefined) {\n            throw new Error(`Starting server failed`);\n        }\n        return connection;\n    }\n    async createConnection() {\n        let errorHandler = (error, message, count) => {\n            this.handleConnectionError(error, message, count).catch((error) => this.error(`Handling connection error failed`, error));\n        };\n        let closeHandler = () => {\n            this.handleConnectionClosed().catch((error) => this.error(`Handling connection close failed`, error));\n        };\n        const transports = await this.createMessageTransports(this._clientOptions.stdioEncoding || 'utf8');\n        this._connection = createConnection(transports.reader, transports.writer, errorHandler, closeHandler, this._clientOptions.connectionOptions);\n        return this._connection;\n    }\n    async handleConnectionClosed() {\n        // Check whether this is a normal shutdown in progress or the client stopped normally.\n        if (this.$state === ClientState.Stopped) {\n            return;\n        }\n        try {\n            if (this._connection !== undefined) {\n                this._connection.dispose();\n            }\n        }\n        catch (error) {\n            // Disposing a connection could fail if error cases.\n        }\n        let handlerResult = { action: CloseAction.DoNotRestart };\n        if (this.$state !== ClientState.Stopping) {\n            try {\n                handlerResult = await this._clientOptions.errorHandler.closed();\n            }\n            catch (error) {\n                // Ignore errors coming from the error handler.\n            }\n        }\n        this._connection = undefined;\n        if (handlerResult.action === CloseAction.DoNotRestart) {\n            this.error(handlerResult.message ?? 'Connection to server got closed. Server will not be restarted.', undefined, handlerResult.handled === true ? false : 'force');\n            this.cleanUp('stop');\n            if (this.$state === ClientState.Starting) {\n                this.$state = ClientState.StartFailed;\n            }\n            else {\n                this.$state = ClientState.Stopped;\n            }\n            this._onStop = Promise.resolve();\n            this._onStart = undefined;\n        }\n        else if (handlerResult.action === CloseAction.Restart) {\n            this.info(handlerResult.message ?? 'Connection to server got closed. Server will restart.', !handlerResult.handled);\n            this.cleanUp('restart');\n            this.$state = ClientState.Initial;\n            this._onStop = Promise.resolve();\n            this._onStart = undefined;\n            this.start().catch((error) => this.error(`Restarting server failed`, error, 'force'));\n        }\n    }\n    async handleConnectionError(error, message, count) {\n        const handlerResult = await this._clientOptions.errorHandler.error(error, message, count);\n        if (handlerResult.action === ErrorAction.Shutdown) {\n            this.error(handlerResult.message ?? `Client ${this._name}: connection to server is erroring.\\n${error.message}\\nShutting down server.`, undefined, handlerResult.handled === true ? false : 'force');\n            this.stop().catch((error) => {\n                this.error(`Stopping server failed`, error, false);\n            });\n        }\n        else {\n            this.error(handlerResult.message ??\n                `Client ${this._name}: connection to server is erroring.\\n${error.message}`, undefined, handlerResult.handled === true ? false : 'force');\n        }\n    }\n    hookConfigurationChanged(connection) {\n        this._listeners.push(vscode_1.workspace.onDidChangeConfiguration(() => {\n            this.refreshTrace(connection, true);\n        }));\n    }\n    refreshTrace(connection, sendNotification = false) {\n        const config = vscode_1.workspace.getConfiguration(this._id);\n        let trace = vscode_languageserver_protocol_1.Trace.Off;\n        let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;\n        if (config) {\n            const traceConfig = config.get('trace.server', 'off');\n            if (typeof traceConfig === 'string') {\n                trace = vscode_languageserver_protocol_1.Trace.fromString(traceConfig);\n            }\n            else {\n                trace = vscode_languageserver_protocol_1.Trace.fromString(config.get('trace.server.verbosity', 'off'));\n                traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString(config.get('trace.server.format', 'text'));\n            }\n        }\n        this._trace = trace;\n        this._traceFormat = traceFormat;\n        connection.trace(this._trace, this._tracer, {\n            sendNotification,\n            traceFormat: this._traceFormat\n        }).catch((error) => { this.error(`Updating trace failed with error`, error, false); });\n    }\n    hookFileEvents(_connection) {\n        let fileEvents = this._clientOptions.synchronize.fileEvents;\n        if (!fileEvents) {\n            return;\n        }\n        let watchers;\n        if (Is.array(fileEvents)) {\n            watchers = fileEvents;\n        }\n        else {\n            watchers = [fileEvents];\n        }\n        if (!watchers) {\n            return;\n        }\n        this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type.method).registerRaw(UUID.generateUuid(), watchers);\n    }\n    registerFeatures(features) {\n        for (let feature of features) {\n            this.registerFeature(feature);\n        }\n    }\n    registerFeature(feature) {\n        this._features.push(feature);\n        if (features_1.DynamicFeature.is(feature)) {\n            const registrationType = feature.registrationType;\n            this._dynamicFeatures.set(registrationType.method, feature);\n        }\n    }\n    getFeature(request) {\n        return this._dynamicFeatures.get(request);\n    }\n    hasDedicatedTextSynchronizationFeature(textDocument) {\n        const feature = this.getFeature(vscode_languageserver_protocol_1.NotebookDocumentSyncRegistrationType.method);\n        if (feature === undefined || !(feature instanceof notebook_1.NotebookDocumentSyncFeature)) {\n            return false;\n        }\n        return feature.handles(textDocument);\n    }\n    registerBuiltinFeatures() {\n        const pendingFullTextDocumentChanges = new Map();\n        this.registerFeature(new configuration_1.ConfigurationFeature(this));\n        this.registerFeature(new textSynchronization_1.DidOpenTextDocumentFeature(this, this._syncedDocuments));\n        this._didChangeTextDocumentFeature = new textSynchronization_1.DidChangeTextDocumentFeature(this, pendingFullTextDocumentChanges);\n        this._didChangeTextDocumentFeature.onPendingChangeAdded(() => {\n            this.triggerPendingChangeDelivery();\n        });\n        this.registerFeature(this._didChangeTextDocumentFeature);\n        this.registerFeature(new textSynchronization_1.WillSaveFeature(this));\n        this.registerFeature(new textSynchronization_1.WillSaveWaitUntilFeature(this));\n        this.registerFeature(new textSynchronization_1.DidSaveTextDocumentFeature(this));\n        this.registerFeature(new textSynchronization_1.DidCloseTextDocumentFeature(this, this._syncedDocuments, pendingFullTextDocumentChanges));\n        this.registerFeature(new fileSystemWatcher_1.FileSystemWatcherFeature(this, (event) => this.notifyFileEvent(event)));\n        this.registerFeature(new completion_1.CompletionItemFeature(this));\n        this.registerFeature(new hover_1.HoverFeature(this));\n        this.registerFeature(new signatureHelp_1.SignatureHelpFeature(this));\n        this.registerFeature(new definition_1.DefinitionFeature(this));\n        this.registerFeature(new reference_1.ReferencesFeature(this));\n        this.registerFeature(new documentHighlight_1.DocumentHighlightFeature(this));\n        this.registerFeature(new documentSymbol_1.DocumentSymbolFeature(this));\n        this.registerFeature(new workspaceSymbol_1.WorkspaceSymbolFeature(this));\n        this.registerFeature(new codeAction_1.CodeActionFeature(this));\n        this.registerFeature(new codeLens_1.CodeLensFeature(this));\n        this.registerFeature(new formatting_1.DocumentFormattingFeature(this));\n        this.registerFeature(new formatting_1.DocumentRangeFormattingFeature(this));\n        this.registerFeature(new formatting_1.DocumentOnTypeFormattingFeature(this));\n        this.registerFeature(new rename_1.RenameFeature(this));\n        this.registerFeature(new documentLink_1.DocumentLinkFeature(this));\n        this.registerFeature(new executeCommand_1.ExecuteCommandFeature(this));\n        this.registerFeature(new configuration_1.SyncConfigurationFeature(this));\n        this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this));\n        this.registerFeature(new implementation_1.ImplementationFeature(this));\n        this.registerFeature(new colorProvider_1.ColorProviderFeature(this));\n        // We only register the workspace folder feature if the client is not locked\n        // to a specific workspace folder.\n        if (this.clientOptions.workspaceFolder === undefined) {\n            this.registerFeature(new workspaceFolder_1.WorkspaceFoldersFeature(this));\n        }\n        this.registerFeature(new foldingRange_1.FoldingRangeFeature(this));\n        this.registerFeature(new declaration_1.DeclarationFeature(this));\n        this.registerFeature(new selectionRange_1.SelectionRangeFeature(this));\n        this.registerFeature(new progress_1.ProgressFeature(this));\n        this.registerFeature(new callHierarchy_1.CallHierarchyFeature(this));\n        this.registerFeature(new semanticTokens_1.SemanticTokensFeature(this));\n        this.registerFeature(new linkedEditingRange_1.LinkedEditingFeature(this));\n        this.registerFeature(new fileOperations_1.DidCreateFilesFeature(this));\n        this.registerFeature(new fileOperations_1.DidRenameFilesFeature(this));\n        this.registerFeature(new fileOperations_1.DidDeleteFilesFeature(this));\n        this.registerFeature(new fileOperations_1.WillCreateFilesFeature(this));\n        this.registerFeature(new fileOperations_1.WillRenameFilesFeature(this));\n        this.registerFeature(new fileOperations_1.WillDeleteFilesFeature(this));\n        this.registerFeature(new typeHierarchy_1.TypeHierarchyFeature(this));\n        this.registerFeature(new inlineValue_1.InlineValueFeature(this));\n        this.registerFeature(new inlayHint_1.InlayHintsFeature(this));\n        this.registerFeature(new diagnostic_1.DiagnosticFeature(this));\n        this.registerFeature(new notebook_1.NotebookDocumentSyncFeature(this));\n    }\n    registerProposedFeatures() {\n        this.registerFeatures(ProposedFeatures.createAll(this));\n    }\n    fillInitializeParams(params) {\n        for (let feature of this._features) {\n            if (Is.func(feature.fillInitializeParams)) {\n                feature.fillInitializeParams(params);\n            }\n        }\n    }\n    computeClientCapabilities() {\n        const result = {};\n        (0, features_1.ensure)(result, 'workspace').applyEdit = true;\n        const workspaceEdit = (0, features_1.ensure)((0, features_1.ensure)(result, 'workspace'), 'workspaceEdit');\n        workspaceEdit.documentChanges = true;\n        workspaceEdit.resourceOperations = [vscode_languageserver_protocol_1.ResourceOperationKind.Create, vscode_languageserver_protocol_1.ResourceOperationKind.Rename, vscode_languageserver_protocol_1.ResourceOperationKind.Delete];\n        workspaceEdit.failureHandling = vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional;\n        workspaceEdit.normalizesLineEndings = true;\n        workspaceEdit.changeAnnotationSupport = {\n            groupsOnLabel: true\n        };\n        const diagnostics = (0, features_1.ensure)((0, features_1.ensure)(result, 'textDocument'), 'publishDiagnostics');\n        diagnostics.relatedInformation = true;\n        diagnostics.versionSupport = false;\n        diagnostics.tagSupport = { valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated] };\n        diagnostics.codeDescriptionSupport = true;\n        diagnostics.dataSupport = true;\n        const windowCapabilities = (0, features_1.ensure)(result, 'window');\n        const showMessage = (0, features_1.ensure)(windowCapabilities, 'showMessage');\n        showMessage.messageActionItem = { additionalPropertiesSupport: true };\n        const showDocument = (0, features_1.ensure)(windowCapabilities, 'showDocument');\n        showDocument.support = true;\n        const generalCapabilities = (0, features_1.ensure)(result, 'general');\n        generalCapabilities.staleRequestSupport = {\n            cancel: true,\n            retryOnContentModified: Array.from(BaseLanguageClient.RequestsToCancelOnContentModified)\n        };\n        generalCapabilities.regularExpressions = { engine: 'ECMAScript', version: 'ES2020' };\n        generalCapabilities.markdown = {\n            parser: 'marked',\n            version: '1.1.0',\n        };\n        generalCapabilities.positionEncodings = ['utf-16'];\n        if (this._clientOptions.markdown.supportHtml) {\n            generalCapabilities.markdown.allowedTags = ['ul', 'li', 'p', 'code', 'blockquote', 'ol', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'em', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'div', 'del', 'a', 'strong', 'br', 'img', 'span'];\n        }\n        for (let feature of this._features) {\n            feature.fillClientCapabilities(result);\n        }\n        return result;\n    }\n    initializeFeatures(_connection) {\n        const documentSelector = this._clientOptions.documentSelector;\n        for (const feature of this._features) {\n            if (Is.func(feature.preInitialize)) {\n                feature.preInitialize(this._capabilities, documentSelector);\n            }\n        }\n        for (const feature of this._features) {\n            feature.initialize(this._capabilities, documentSelector);\n        }\n    }\n    async handleRegistrationRequest(params) {\n        const middleware = this.clientOptions.middleware?.handleRegisterCapability;\n        if (middleware) {\n            return middleware(params, nextParams => this.doRegisterCapability(nextParams));\n        }\n        else {\n            return this.doRegisterCapability(params);\n        }\n    }\n    async doRegisterCapability(params) {\n        // We will not receive a registration call before a client is running\n        // from a server. However if we stop or shutdown we might which might\n        // try to restart the server. So ignore registrations if we are not running\n        if (!this.isRunning()) {\n            for (const registration of params.registrations) {\n                this._ignoredRegistrations.add(registration.id);\n            }\n            return;\n        }\n        for (const registration of params.registrations) {\n            const feature = this._dynamicFeatures.get(registration.method);\n            if (feature === undefined) {\n                return Promise.reject(new Error(`No feature implementation for ${registration.method} found. Registration failed.`));\n            }\n            const options = registration.registerOptions ?? {};\n            options.documentSelector = options.documentSelector ?? this._clientOptions.documentSelector;\n            const data = {\n                id: registration.id,\n                registerOptions: options\n            };\n            try {\n                feature.register(data);\n            }\n            catch (err) {\n                return Promise.reject(err);\n            }\n        }\n    }\n    async handleUnregistrationRequest(params) {\n        const middleware = this.clientOptions.middleware?.handleUnregisterCapability;\n        if (middleware) {\n            return middleware(params, nextParams => this.doUnregisterCapability(nextParams));\n        }\n        else {\n            return this.doUnregisterCapability(params);\n        }\n    }\n    async doUnregisterCapability(params) {\n        for (const unregistration of params.unregisterations) {\n            if (this._ignoredRegistrations.has(unregistration.id)) {\n                continue;\n            }\n            const feature = this._dynamicFeatures.get(unregistration.method);\n            if (!feature) {\n                return Promise.reject(new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`));\n            }\n            feature.unregister(unregistration.id);\n        }\n    }\n    async handleApplyWorkspaceEdit(params) {\n        const workspaceEdit = params.edit;\n        // Make sure we convert workspace edits one after the other. Otherwise\n        // we might execute a workspace edit received first after we received another\n        // one since the conversion might race.\n        const converted = await this.workspaceEditLock.lock(() => {\n            return this._p2c.asWorkspaceEdit(workspaceEdit);\n        });\n        // This is some sort of workaround since the version check should be done by VS Code in the Workspace.applyEdit.\n        // However doing it here adds some safety since the server can lag more behind then an extension.\n        const openTextDocuments = new Map();\n        vscode_1.workspace.textDocuments.forEach((document) => openTextDocuments.set(document.uri.toString(), document));\n        let versionMismatch = false;\n        if (workspaceEdit.documentChanges) {\n            for (const change of workspaceEdit.documentChanges) {\n                if (vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && change.textDocument.version && change.textDocument.version >= 0) {\n                    const changeUri = this._p2c.asUri(change.textDocument.uri).toString();\n                    const textDocument = openTextDocuments.get(changeUri);\n                    if (textDocument && textDocument.version !== change.textDocument.version) {\n                        versionMismatch = true;\n                        break;\n                    }\n                }\n            }\n        }\n        if (versionMismatch) {\n            return Promise.resolve({ applied: false });\n        }\n        return Is.asPromise(vscode_1.workspace.applyEdit(converted).then((value) => { return { applied: value }; }));\n    }\n    handleFailedRequest(type, token, error, defaultValue, showNotification = true) {\n        // If we get a request cancel or a content modified don't log anything.\n        if (error instanceof vscode_languageserver_protocol_1.ResponseError) {\n            // The connection got disposed while we were waiting for a response.\n            // Simply return the default value. Is the best we can do.\n            if (error.code === vscode_languageserver_protocol_1.ErrorCodes.PendingResponseRejected || error.code === vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive) {\n                return defaultValue;\n            }\n            if (error.code === vscode_languageserver_protocol_1.LSPErrorCodes.RequestCancelled || error.code === vscode_languageserver_protocol_1.LSPErrorCodes.ServerCancelled) {\n                if (token !== undefined && token.isCancellationRequested) {\n                    return defaultValue;\n                }\n                else {\n                    if (error.data !== undefined) {\n                        throw new features_1.LSPCancellationError(error.data);\n                    }\n                    else {\n                        throw new vscode_1.CancellationError();\n                    }\n                }\n            }\n            else if (error.code === vscode_languageserver_protocol_1.LSPErrorCodes.ContentModified) {\n                if (BaseLanguageClient.RequestsToCancelOnContentModified.has(type.method) || BaseLanguageClient.CancellableResolveCalls.has(type.method)) {\n                    throw new vscode_1.CancellationError();\n                }\n                else {\n                    return defaultValue;\n                }\n            }\n        }\n        this.error(`Request ${type.method} failed.`, error, showNotification);\n        throw error;\n    }\n}\nexports.BaseLanguageClient = BaseLanguageClient;\nBaseLanguageClient.RequestsToCancelOnContentModified = new Set([\n    vscode_languageserver_protocol_1.SemanticTokensRequest.method,\n    vscode_languageserver_protocol_1.SemanticTokensRangeRequest.method,\n    vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.method\n]);\nBaseLanguageClient.CancellableResolveCalls = new Set([\n    vscode_languageserver_protocol_1.CompletionResolveRequest.method,\n    vscode_languageserver_protocol_1.CodeLensResolveRequest.method,\n    vscode_languageserver_protocol_1.CodeActionResolveRequest.method,\n    vscode_languageserver_protocol_1.InlayHintResolveRequest.method,\n    vscode_languageserver_protocol_1.DocumentLinkResolveRequest.method,\n    vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest.method\n]);\nclass ConsoleLogger {\n    error(message) {\n        (0, vscode_languageserver_protocol_1.RAL)().console.error(message);\n    }\n    warn(message) {\n        (0, vscode_languageserver_protocol_1.RAL)().console.warn(message);\n    }\n    info(message) {\n        (0, vscode_languageserver_protocol_1.RAL)().console.info(message);\n    }\n    log(message) {\n        (0, vscode_languageserver_protocol_1.RAL)().console.log(message);\n    }\n}\nfunction createConnection(input, output, errorHandler, closeHandler, options) {\n    const logger = new ConsoleLogger();\n    const connection = (0, vscode_languageserver_protocol_1.createProtocolConnection)(input, output, logger, options);\n    connection.onError((data) => { errorHandler(data[0], data[1], data[2]); });\n    connection.onClose(closeHandler);\n    const result = {\n        listen: () => connection.listen(),\n        sendRequest: connection.sendRequest,\n        onRequest: connection.onRequest,\n        hasPendingResponse: connection.hasPendingResponse,\n        sendNotification: connection.sendNotification,\n        onNotification: connection.onNotification,\n        onProgress: connection.onProgress,\n        sendProgress: connection.sendProgress,\n        trace: (value, tracer, sendNotificationOrTraceOptions) => {\n            const defaultTraceOptions = {\n                sendNotification: false,\n                traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text\n            };\n            if (sendNotificationOrTraceOptions === undefined) {\n                return connection.trace(value, tracer, defaultTraceOptions);\n            }\n            else if (Is.boolean(sendNotificationOrTraceOptions)) {\n                return connection.trace(value, tracer, sendNotificationOrTraceOptions);\n            }\n            else {\n                return connection.trace(value, tracer, sendNotificationOrTraceOptions);\n            }\n        },\n        initialize: (params) => {\n            // This needs to return and MUST not be await to avoid any async\n            // scheduling. Otherwise messages might overtake each other.\n            return connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params);\n        },\n        shutdown: () => {\n            // This needs to return and MUST not be await to avoid any async\n            // scheduling. Otherwise messages might overtake each other.\n            return connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, undefined);\n        },\n        exit: () => {\n            // This needs to return and MUST not be await to avoid any async\n            // scheduling. Otherwise messages might overtake each other.\n            return connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type);\n        },\n        end: () => connection.end(),\n        dispose: () => connection.dispose()\n    };\n    return result;\n}\n// Exporting proposed protocol.\nvar ProposedFeatures;\n(function (ProposedFeatures) {\n    function createAll(_client) {\n        let result = [\n            new inlineCompletion_1.InlineCompletionItemFeature(_client)\n        ];\n        return result;\n    }\n    ProposedFeatures.createAll = createAll;\n})(ProposedFeatures || (exports.ProposedFeatures = ProposedFeatures = {}));\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.terminate = void 0;\nconst cp = require(\"child_process\");\nconst path_1 = require(\"path\");\nconst isWindows = (process.platform === 'win32');\nconst isMacintosh = (process.platform === 'darwin');\nconst isLinux = (process.platform === 'linux');\nfunction terminate(process, cwd) {\n    if (isWindows) {\n        try {\n            // This we run in Atom execFileSync is available.\n            // Ignore stderr since this is otherwise piped to parent.stderr\n            // which might be already closed.\n            let options = {\n                stdio: ['pipe', 'pipe', 'ignore']\n            };\n            if (cwd) {\n                options.cwd = cwd;\n            }\n            cp.execFileSync('taskkill', ['/T', '/F', '/PID', process.pid.toString()], options);\n            return true;\n        }\n        catch (err) {\n            return false;\n        }\n    }\n    else if (isLinux || isMacintosh) {\n        try {\n            var cmd = (0, path_1.join)(__dirname, 'terminateProcess.sh');\n            var result = cp.spawnSync(cmd, [process.pid.toString()]);\n            return result.error ? false : true;\n        }\n        catch (err) {\n            return false;\n        }\n    }\n    else {\n        process.kill('SIGKILL');\n        return true;\n    }\n}\nexports.terminate = terminate;\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 * ----------------------------------------------------------------------------------------- */\n'use strict';\n\nmodule.exports = require('./lib/node/main');","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","const {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, safeSrc: src, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const r = new RegExp(`^${this.options.loose ? src[t.PRERELEASELOOSE] : src[t.PRERELEASE]}$`)\n        const match = `-${identifier}`.match(r)\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","class LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\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 * ------------------------------------------------------------------------------------------ */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiagnosticPullMode = exports.vsdiag = void 0;\n__exportStar(require(\"vscode-languageserver-protocol\"), exports);\n__exportStar(require(\"./features\"), exports);\nvar diagnostic_1 = require(\"./diagnostic\");\nObject.defineProperty(exports, \"vsdiag\", { enumerable: true, get: function () { return diagnostic_1.vsdiag; } });\nObject.defineProperty(exports, \"DiagnosticPullMode\", { enumerable: true, get: function () { return diagnostic_1.DiagnosticPullMode; } });\n__exportStar(require(\"./client\"), exports);\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 * ------------------------------------------------------------------------------------------ */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SettingMonitor = exports.LanguageClient = exports.TransportKind = void 0;\nconst cp = require(\"child_process\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst vscode_1 = require(\"vscode\");\nconst Is = require(\"../common/utils/is\");\nconst client_1 = require(\"../common/client\");\nconst processes_1 = require(\"./processes\");\nconst node_1 = require(\"vscode-languageserver-protocol/node\");\n// Import SemVer functions individually to avoid circular dependencies in SemVer\nconst semverParse = require(\"semver/functions/parse\");\nconst semverSatisfies = require(\"semver/functions/satisfies\");\n__exportStar(require(\"vscode-languageserver-protocol/node\"), exports);\n__exportStar(require(\"../common/api\"), exports);\nconst REQUIRED_VSCODE_VERSION = '^1.82.0'; // do not change format, updated by `updateVSCode` script\nvar TransportKind;\n(function (TransportKind) {\n    TransportKind[TransportKind[\"stdio\"] = 0] = \"stdio\";\n    TransportKind[TransportKind[\"ipc\"] = 1] = \"ipc\";\n    TransportKind[TransportKind[\"pipe\"] = 2] = \"pipe\";\n    TransportKind[TransportKind[\"socket\"] = 3] = \"socket\";\n})(TransportKind || (exports.TransportKind = TransportKind = {}));\nvar Transport;\n(function (Transport) {\n    function isSocket(value) {\n        const candidate = value;\n        return candidate && candidate.kind === TransportKind.socket && Is.number(candidate.port);\n    }\n    Transport.isSocket = isSocket;\n})(Transport || (Transport = {}));\nvar Executable;\n(function (Executable) {\n    function is(value) {\n        return Is.string(value.command);\n    }\n    Executable.is = is;\n})(Executable || (Executable = {}));\nvar NodeModule;\n(function (NodeModule) {\n    function is(value) {\n        return Is.string(value.module);\n    }\n    NodeModule.is = is;\n})(NodeModule || (NodeModule = {}));\nvar StreamInfo;\n(function (StreamInfo) {\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.writer !== undefined && candidate.reader !== undefined;\n    }\n    StreamInfo.is = is;\n})(StreamInfo || (StreamInfo = {}));\nvar ChildProcessInfo;\n(function (ChildProcessInfo) {\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.process !== undefined && typeof candidate.detached === 'boolean';\n    }\n    ChildProcessInfo.is = is;\n})(ChildProcessInfo || (ChildProcessInfo = {}));\nclass LanguageClient extends client_1.BaseLanguageClient {\n    constructor(arg1, arg2, arg3, arg4, arg5) {\n        let id;\n        let name;\n        let serverOptions;\n        let clientOptions;\n        let forceDebug;\n        if (Is.string(arg2)) {\n            id = arg1;\n            name = arg2;\n            serverOptions = arg3;\n            clientOptions = arg4;\n            forceDebug = !!arg5;\n        }\n        else {\n            id = arg1.toLowerCase();\n            name = arg1;\n            serverOptions = arg2;\n            clientOptions = arg3;\n            forceDebug = arg4;\n        }\n        if (forceDebug === undefined) {\n            forceDebug = false;\n        }\n        super(id, name, clientOptions);\n        this._serverOptions = serverOptions;\n        this._forceDebug = forceDebug;\n        this._isInDebugMode = forceDebug;\n        try {\n            this.checkVersion();\n        }\n        catch (error) {\n            if (Is.string(error.message)) {\n                this.outputChannel.appendLine(error.message);\n            }\n            throw error;\n        }\n    }\n    checkVersion() {\n        const codeVersion = semverParse(vscode_1.version);\n        if (!codeVersion) {\n            throw new Error(`No valid VS Code version detected. Version string is: ${vscode_1.version}`);\n        }\n        // Remove the insider pre-release since we stay API compatible.\n        if (codeVersion.prerelease && codeVersion.prerelease.length > 0) {\n            codeVersion.prerelease = [];\n        }\n        if (!semverSatisfies(codeVersion, REQUIRED_VSCODE_VERSION)) {\n            throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${vscode_1.version}`);\n        }\n    }\n    get isInDebugMode() {\n        return this._isInDebugMode;\n    }\n    async restart() {\n        await this.stop();\n        // We are in debug mode. Wait a little before we restart\n        // so that the debug port can be freed. We can safely ignore\n        // the disposable returned from start since it will call\n        // stop on the same client instance.\n        if (this.isInDebugMode) {\n            await new Promise((resolve) => setTimeout(resolve, 1000));\n            await this.start();\n        }\n        else {\n            await this.start();\n        }\n    }\n    stop(timeout = 2000) {\n        return super.stop(timeout).finally(() => {\n            if (this._serverProcess) {\n                const toCheck = this._serverProcess;\n                this._serverProcess = undefined;\n                if (this._isDetached === undefined || !this._isDetached) {\n                    this.checkProcessDied(toCheck);\n                }\n                this._isDetached = undefined;\n            }\n        });\n    }\n    checkProcessDied(childProcess) {\n        if (!childProcess || childProcess.pid === undefined) {\n            return;\n        }\n        setTimeout(() => {\n            // Test if the process is still alive. Throws an exception if not\n            try {\n                if (childProcess.pid !== undefined) {\n                    process.kill(childProcess.pid, 0);\n                    (0, processes_1.terminate)(childProcess);\n                }\n            }\n            catch (error) {\n                // All is fine.\n            }\n        }, 2000);\n    }\n    handleConnectionClosed() {\n        this._serverProcess = undefined;\n        return super.handleConnectionClosed();\n    }\n    fillInitializeParams(params) {\n        super.fillInitializeParams(params);\n        if (params.processId === null) {\n            params.processId = process.pid;\n        }\n    }\n    createMessageTransports(encoding) {\n        function getEnvironment(env, fork) {\n            if (!env && !fork) {\n                return undefined;\n            }\n            const result = Object.create(null);\n            Object.keys(process.env).forEach(key => result[key] = process.env[key]);\n            if (fork) {\n                result['ELECTRON_RUN_AS_NODE'] = '1';\n                result['ELECTRON_NO_ASAR'] = '1';\n            }\n            if (env) {\n                Object.keys(env).forEach(key => result[key] = env[key]);\n            }\n            return result;\n        }\n        const debugStartWith = ['--debug=', '--debug-brk=', '--inspect=', '--inspect-brk='];\n        const debugEquals = ['--debug', '--debug-brk', '--inspect', '--inspect-brk'];\n        function startedInDebugMode() {\n            let args = process.execArgv;\n            if (args) {\n                return args.some((arg) => {\n                    return debugStartWith.some(value => arg.startsWith(value)) ||\n                        debugEquals.some(value => arg === value);\n                });\n            }\n            return false;\n        }\n        function assertStdio(process) {\n            if (process.stdin === null || process.stdout === null || process.stderr === null) {\n                throw new Error('Process created without stdio streams');\n            }\n        }\n        const server = this._serverOptions;\n        // We got a function.\n        if (Is.func(server)) {\n            return server().then((result) => {\n                if (client_1.MessageTransports.is(result)) {\n                    this._isDetached = !!result.detached;\n                    return result;\n                }\n                else if (StreamInfo.is(result)) {\n                    this._isDetached = !!result.detached;\n                    return { reader: new node_1.StreamMessageReader(result.reader), writer: new node_1.StreamMessageWriter(result.writer) };\n                }\n                else {\n                    let cp;\n                    if (ChildProcessInfo.is(result)) {\n                        cp = result.process;\n                        this._isDetached = result.detached;\n                    }\n                    else {\n                        cp = result;\n                        this._isDetached = false;\n                    }\n                    cp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                    return { reader: new node_1.StreamMessageReader(cp.stdout), writer: new node_1.StreamMessageWriter(cp.stdin) };\n                }\n            });\n        }\n        let json;\n        let runDebug = server;\n        if (runDebug.run || runDebug.debug) {\n            if (this._forceDebug || startedInDebugMode()) {\n                json = runDebug.debug;\n                this._isInDebugMode = true;\n            }\n            else {\n                json = runDebug.run;\n                this._isInDebugMode = false;\n            }\n        }\n        else {\n            json = server;\n        }\n        return this._getServerWorkingDir(json.options).then(serverWorkingDir => {\n            if (NodeModule.is(json) && json.module) {\n                let node = json;\n                let transport = node.transport || TransportKind.stdio;\n                if (node.runtime) {\n                    const args = [];\n                    const options = node.options ?? Object.create(null);\n                    if (options.execArgv) {\n                        options.execArgv.forEach(element => args.push(element));\n                    }\n                    args.push(node.module);\n                    if (node.args) {\n                        node.args.forEach(element => args.push(element));\n                    }\n                    const execOptions = Object.create(null);\n                    execOptions.cwd = serverWorkingDir;\n                    execOptions.env = getEnvironment(options.env, false);\n                    const runtime = this._getRuntimePath(node.runtime, serverWorkingDir);\n                    let pipeName = undefined;\n                    if (transport === TransportKind.ipc) {\n                        // exec options not correctly typed in lib\n                        execOptions.stdio = [null, null, null, 'ipc'];\n                        args.push('--node-ipc');\n                    }\n                    else if (transport === TransportKind.stdio) {\n                        args.push('--stdio');\n                    }\n                    else if (transport === TransportKind.pipe) {\n                        pipeName = (0, node_1.generateRandomPipeName)();\n                        args.push(`--pipe=${pipeName}`);\n                    }\n                    else if (Transport.isSocket(transport)) {\n                        args.push(`--socket=${transport.port}`);\n                    }\n                    args.push(`--clientProcessId=${process.pid.toString()}`);\n                    if (transport === TransportKind.ipc || transport === TransportKind.stdio) {\n                        const serverProcess = cp.spawn(runtime, args, execOptions);\n                        if (!serverProcess || !serverProcess.pid) {\n                            return handleChildProcessStartError(serverProcess, `Launching server using runtime ${runtime} failed.`);\n                        }\n                        this._serverProcess = serverProcess;\n                        serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        if (transport === TransportKind.ipc) {\n                            serverProcess.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return Promise.resolve({ reader: new node_1.IPCMessageReader(serverProcess), writer: new node_1.IPCMessageWriter(serverProcess) });\n                        }\n                        else {\n                            return Promise.resolve({ reader: new node_1.StreamMessageReader(serverProcess.stdout), writer: new node_1.StreamMessageWriter(serverProcess.stdin) });\n                        }\n                    }\n                    else if (transport === TransportKind.pipe) {\n                        return (0, node_1.createClientPipeTransport)(pipeName).then((transport) => {\n                            const process = cp.spawn(runtime, args, execOptions);\n                            if (!process || !process.pid) {\n                                return handleChildProcessStartError(process, `Launching server using runtime ${runtime} failed.`);\n                            }\n                            this._serverProcess = process;\n                            process.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            process.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return transport.onConnected().then((protocol) => {\n                                return { reader: protocol[0], writer: protocol[1] };\n                            });\n                        });\n                    }\n                    else if (Transport.isSocket(transport)) {\n                        return (0, node_1.createClientSocketTransport)(transport.port).then((transport) => {\n                            const process = cp.spawn(runtime, args, execOptions);\n                            if (!process || !process.pid) {\n                                return handleChildProcessStartError(process, `Launching server using runtime ${runtime} failed.`);\n                            }\n                            this._serverProcess = process;\n                            process.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            process.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return transport.onConnected().then((protocol) => {\n                                return { reader: protocol[0], writer: protocol[1] };\n                            });\n                        });\n                    }\n                }\n                else {\n                    let pipeName = undefined;\n                    return new Promise((resolve, reject) => {\n                        const args = (node.args && node.args.slice()) ?? [];\n                        if (transport === TransportKind.ipc) {\n                            args.push('--node-ipc');\n                        }\n                        else if (transport === TransportKind.stdio) {\n                            args.push('--stdio');\n                        }\n                        else if (transport === TransportKind.pipe) {\n                            pipeName = (0, node_1.generateRandomPipeName)();\n                            args.push(`--pipe=${pipeName}`);\n                        }\n                        else if (Transport.isSocket(transport)) {\n                            args.push(`--socket=${transport.port}`);\n                        }\n                        args.push(`--clientProcessId=${process.pid.toString()}`);\n                        const options = node.options ?? Object.create(null);\n                        options.env = getEnvironment(options.env, true);\n                        options.execArgv = options.execArgv || [];\n                        options.cwd = serverWorkingDir;\n                        options.silent = true;\n                        if (transport === TransportKind.ipc || transport === TransportKind.stdio) {\n                            const sp = cp.fork(node.module, args || [], options);\n                            assertStdio(sp);\n                            this._serverProcess = sp;\n                            sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            if (transport === TransportKind.ipc) {\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                resolve({ reader: new node_1.IPCMessageReader(this._serverProcess), writer: new node_1.IPCMessageWriter(this._serverProcess) });\n                            }\n                            else {\n                                resolve({ reader: new node_1.StreamMessageReader(sp.stdout), writer: new node_1.StreamMessageWriter(sp.stdin) });\n                            }\n                        }\n                        else if (transport === TransportKind.pipe) {\n                            (0, node_1.createClientPipeTransport)(pipeName).then((transport) => {\n                                const sp = cp.fork(node.module, args || [], options);\n                                assertStdio(sp);\n                                this._serverProcess = sp;\n                                sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                transport.onConnected().then((protocol) => {\n                                    resolve({ reader: protocol[0], writer: protocol[1] });\n                                }, reject);\n                            }, reject);\n                        }\n                        else if (Transport.isSocket(transport)) {\n                            (0, node_1.createClientSocketTransport)(transport.port).then((transport) => {\n                                const sp = cp.fork(node.module, args || [], options);\n                                assertStdio(sp);\n                                this._serverProcess = sp;\n                                sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                transport.onConnected().then((protocol) => {\n                                    resolve({ reader: protocol[0], writer: protocol[1] });\n                                }, reject);\n                            }, reject);\n                        }\n                    });\n                }\n            }\n            else if (Executable.is(json) && json.command) {\n                const command = json;\n                const args = json.args !== undefined ? json.args.slice(0) : [];\n                let pipeName = undefined;\n                const transport = json.transport;\n                if (transport === TransportKind.stdio) {\n                    args.push('--stdio');\n                }\n                else if (transport === TransportKind.pipe) {\n                    pipeName = (0, node_1.generateRandomPipeName)();\n                    args.push(`--pipe=${pipeName}`);\n                }\n                else if (Transport.isSocket(transport)) {\n                    args.push(`--socket=${transport.port}`);\n                }\n                else if (transport === TransportKind.ipc) {\n                    throw new Error(`Transport kind ipc is not support for command executable`);\n                }\n                const options = Object.assign({}, command.options);\n                options.cwd = options.cwd || serverWorkingDir;\n                if (transport === undefined || transport === TransportKind.stdio) {\n                    const serverProcess = cp.spawn(command.command, args, options);\n                    if (!serverProcess || !serverProcess.pid) {\n                        return handleChildProcessStartError(serverProcess, `Launching server using command ${command.command} failed.`);\n                    }\n                    serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                    this._serverProcess = serverProcess;\n                    this._isDetached = !!options.detached;\n                    return Promise.resolve({ reader: new node_1.StreamMessageReader(serverProcess.stdout), writer: new node_1.StreamMessageWriter(serverProcess.stdin) });\n                }\n                else if (transport === TransportKind.pipe) {\n                    return (0, node_1.createClientPipeTransport)(pipeName).then((transport) => {\n                        const serverProcess = cp.spawn(command.command, args, options);\n                        if (!serverProcess || !serverProcess.pid) {\n                            return handleChildProcessStartError(serverProcess, `Launching server using command ${command.command} failed.`);\n                        }\n                        this._serverProcess = serverProcess;\n                        this._isDetached = !!options.detached;\n                        serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        serverProcess.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        return transport.onConnected().then((protocol) => {\n                            return { reader: protocol[0], writer: protocol[1] };\n                        });\n                    });\n                }\n                else if (Transport.isSocket(transport)) {\n                    return (0, node_1.createClientSocketTransport)(transport.port).then((transport) => {\n                        const serverProcess = cp.spawn(command.command, args, options);\n                        if (!serverProcess || !serverProcess.pid) {\n                            return handleChildProcessStartError(serverProcess, `Launching server using command ${command.command} failed.`);\n                        }\n                        this._serverProcess = serverProcess;\n                        this._isDetached = !!options.detached;\n                        serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        serverProcess.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        return transport.onConnected().then((protocol) => {\n                            return { reader: protocol[0], writer: protocol[1] };\n                        });\n                    });\n                }\n            }\n            return Promise.reject(new Error(`Unsupported server configuration ` + JSON.stringify(server, null, 4)));\n        }).finally(() => {\n            if (this._serverProcess !== undefined) {\n                this._serverProcess.on('exit', (code, signal) => {\n                    if (code !== null) {\n                        this.error(`Server process exited with code ${code}.`, undefined, false);\n                    }\n                    if (signal !== null) {\n                        this.error(`Server process exited with signal ${signal}.`, undefined, false);\n                    }\n                });\n            }\n        });\n    }\n    _getRuntimePath(runtime, serverWorkingDirectory) {\n        if (path.isAbsolute(runtime)) {\n            return runtime;\n        }\n        const mainRootPath = this._mainGetRootPath();\n        if (mainRootPath !== undefined) {\n            const result = path.join(mainRootPath, runtime);\n            if (fs.existsSync(result)) {\n                return result;\n            }\n        }\n        if (serverWorkingDirectory !== undefined) {\n            const result = path.join(serverWorkingDirectory, runtime);\n            if (fs.existsSync(result)) {\n                return result;\n            }\n        }\n        return runtime;\n    }\n    _mainGetRootPath() {\n        let folders = vscode_1.workspace.workspaceFolders;\n        if (!folders || folders.length === 0) {\n            return undefined;\n        }\n        let folder = folders[0];\n        if (folder.uri.scheme === 'file') {\n            return folder.uri.fsPath;\n        }\n        return undefined;\n    }\n    _getServerWorkingDir(options) {\n        let cwd = options && options.cwd;\n        if (!cwd) {\n            cwd = this.clientOptions.workspaceFolder\n                ? this.clientOptions.workspaceFolder.uri.fsPath\n                : this._mainGetRootPath();\n        }\n        if (cwd) {\n            // make sure the folder exists otherwise creating the process will fail\n            return new Promise(s => {\n                fs.lstat(cwd, (err, stats) => {\n                    s(!err && stats.isDirectory() ? cwd : undefined);\n                });\n            });\n        }\n        return Promise.resolve(undefined);\n    }\n}\nexports.LanguageClient = LanguageClient;\nclass SettingMonitor {\n    constructor(_client, _setting) {\n        this._client = _client;\n        this._setting = _setting;\n        this._listeners = [];\n    }\n    start() {\n        vscode_1.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this._listeners);\n        this.onDidChangeConfiguration();\n        return new vscode_1.Disposable(() => {\n            if (this._client.needsStop()) {\n                void this._client.stop();\n            }\n        });\n    }\n    onDidChangeConfiguration() {\n        let index = this._setting.indexOf('.');\n        let primary = index >= 0 ? this._setting.substr(0, index) : this._setting;\n        let rest = index >= 0 ? this._setting.substr(index + 1) : undefined;\n        let enabled = rest ? vscode_1.workspace.getConfiguration(primary).get(rest, false) : vscode_1.workspace.getConfiguration(primary);\n        if (enabled && this._client.needsStart()) {\n            this._client.start().catch((error) => this._client.error('Start failed after configuration change', error, 'force'));\n        }\n        else if (!enabled && this._client.needsStop()) {\n            void this._client.stop().catch((error) => this._client.error('Stop failed after configuration change', error, 'force'));\n        }\n    }\n}\nexports.SettingMonitor = SettingMonitor;\nfunction handleChildProcessStartError(process, message) {\n    if (process === null) {\n        return Promise.reject(message);\n    }\n    return new Promise((_, reject) => {\n        process.on('error', (err) => {\n            reject(`${message} ${err}`);\n        });\n        // the error event should always be run immediately,\n        // but race on it just in case\n        setImmediate(() => reject(message));\n    });\n}\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 * ----------------------------------------------------------------------------------------- */\n'use strict';\n\nmodule.exports = require('./lib/node/main');","import path from \"node:path\";\nimport type vscode from \"vscode\";\n\nimport type { LanguageClientOptions, ServerOptions } from \"vscode-languageclient/node.js\";\nimport { LanguageClient, TransportKind } from \"vscode-languageclient/node.js\";\nimport { IprotoLibraryFileSystemProvider } from \"./file-system-provider.js\";\n\nlet client: LanguageClient;\n\nexport function activate(context: vscode.ExtensionContext): void {\n\tIprotoLibraryFileSystemProvider.register(context);\n\tclient = startLanguageClient(context);\n}\n\nexport function deactivate(): Thenable<void> | undefined {\n\tif (client) {\n\t\treturn client.stop();\n\t}\n\treturn undefined;\n}\n\nfunction startLanguageClient(context: vscode.ExtensionContext): LanguageClient {\n\tconst serverModule = context.asAbsolutePath(path.join(\"out\", \"language.cjs\"));\n\t// The debug options for the server\n\t// --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging.\n\t// By setting `process.env.DEBUG_BREAK` to a truthy value, the language server will wait until a debugger is attached.\n\tconst debugOptions = {\n\t\texecArgv: [\"--nolazy\", `--inspect${process.env.DEBUG_BREAK ? \"-brk\" : \"\"}=${process.env.DEBUG_SOCKET || \"6009\"}`],\n\t};\n\n\t// If the extension is launched in debug mode then the debug server options are used\n\t// Otherwise the run options are used\n\tconst serverOptions: ServerOptions = {\n\t\trun: { module: serverModule, transport: TransportKind.ipc },\n\t\tdebug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions },\n\t};\n\n\t// Options to control the language client\n\tconst clientOptions: LanguageClientOptions = {\n\t\tdocumentSelector: [{ scheme: \"*\", language: \"iproto\" }],\n\t};\n\n\t// Create the language client and start the client.\n\tconst client = new LanguageClient(\"iproto\", \"Iproto\", serverOptions, clientOptions);\n\n\t// Start the client. This will also launch the server\n\tclient.start();\n\treturn client;\n}\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n *\r\n * @module langium\r\n */\r\n\r\nexport * from './default-module.js';\r\nexport * from './dependency-injection.js';\r\nexport * from './service-registry.js';\r\nexport * from './services.js';\r\nexport * from './syntax-tree.js';\r\nexport * from './documentation/index.js';\r\nexport * from './languages/index.js';\r\nexport * from './parser/index.js';\r\nexport * from './references/index.js';\r\nexport * from './serializer/index.js';\r\nexport * from './utils/index.js';\r\nexport * from './validation/index.js';\r\nexport * from './workspace/index.js';\r\n\r\n// Export the Langium Grammar AST definitions in the `GrammarAST` namespace\r\nimport * as GrammarAST from './languages/generated/ast.js';\r\nimport type { Grammar } from './languages/generated/ast.js';\r\nexport { Grammar, GrammarAST };\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { IToken } from '@chevrotain/types';\r\nimport type { Range } from 'vscode-languageserver-types';\r\nimport type { CstNode, CompositeCstNode, LeafCstNode } from '../syntax-tree.js';\r\nimport type { DocumentSegment } from '../workspace/documents.js';\r\nimport type { Stream, TreeStream } from './stream.js';\r\nimport { isCompositeCstNode, isLeafCstNode, isRootCstNode } from '../syntax-tree.js';\r\nimport { TreeStreamImpl } from './stream.js';\r\n\r\n/**\r\n * Create a stream of all CST nodes that are directly and indirectly contained in the given root node,\r\n * including the root node itself.\r\n */\r\nexport function streamCst(node: CstNode): TreeStream<CstNode> {\r\n    return new TreeStreamImpl(node, element => {\r\n        if (isCompositeCstNode(element)) {\r\n            return element.content;\r\n        } else {\r\n            return [];\r\n        }\r\n    }, { includeRoot: true });\r\n}\r\n\r\n/**\r\n * Create a stream of all leaf nodes that are directly and indirectly contained in the given root node.\r\n */\r\nexport function flattenCst(node: CstNode): Stream<LeafCstNode> {\r\n    return streamCst(node).filter(isLeafCstNode);\r\n}\r\n\r\n/**\r\n * Determines whether the specified cst node is a child of the specified parent node.\r\n */\r\nexport function isChildNode(child: CstNode, parent: CstNode): boolean {\r\n    while (child.container) {\r\n        child = child.container;\r\n        if (child === parent) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nexport function tokenToRange(token: IToken): Range {\r\n    // Chevrotain uses 1-based indices everywhere\r\n    // So we subtract 1 from every value to align with the LSP\r\n    return {\r\n        start: {\r\n            character: token.startColumn! - 1,\r\n            line: token.startLine! - 1\r\n        },\r\n        end: {\r\n            character: token.endColumn!, // endColumn uses the correct index\r\n            line: token.endLine! - 1\r\n        }\r\n    };\r\n}\r\n\r\nexport function toDocumentSegment(node: CstNode): DocumentSegment;\r\nexport function toDocumentSegment(node?: CstNode): DocumentSegment | undefined;\r\nexport function toDocumentSegment(node?: CstNode): DocumentSegment | undefined {\r\n    if (!node) {\r\n        return undefined;\r\n    }\r\n    const { offset, end, range } = node;\r\n    return {\r\n        range,\r\n        offset,\r\n        end,\r\n        length: end - offset\r\n    };\r\n}\r\n\r\nexport enum RangeComparison {\r\n    Before = 0,\r\n    After = 1,\r\n    OverlapFront = 2,\r\n    OverlapBack = 3,\r\n    Inside = 4,\r\n    Outside = 5,\r\n}\r\n\r\nexport function compareRange(range: Range, to: Range): RangeComparison {\r\n    if (range.end.line < to.start.line || (range.end.line === to.start.line && range.end.character <= to.start.character)) {\r\n        return RangeComparison.Before;\r\n    } else if (range.start.line > to.end.line || (range.start.line === to.end.line && range.start.character >= to.end.character)) {\r\n        return RangeComparison.After;\r\n    }\r\n    const startInside = range.start.line > to.start.line || (range.start.line === to.start.line && range.start.character >= to.start.character);\r\n    const endInside = range.end.line < to.end.line || (range.end.line === to.end.line && range.end.character <= to.end.character);\r\n    if (startInside && endInside) {\r\n        return RangeComparison.Inside;\r\n    } else if (startInside) {\r\n        return RangeComparison.OverlapBack;\r\n    } else if (endInside) {\r\n        return RangeComparison.OverlapFront;\r\n    } else {\r\n        return RangeComparison.Outside;\r\n    }\r\n}\r\n\r\nexport function inRange(range: Range, to: Range): boolean {\r\n    const comparison = compareRange(range, to);\r\n    return comparison > RangeComparison.After;\r\n}\r\n\r\n// The \\p{L} regex matches any unicode letter character, i.e. characters from non-english alphabets\r\n// Together with \\w it matches any kind of character which can commonly appear in IDs\r\nexport const DefaultNameRegexp = /^[\\w\\p{L}]$/u;\r\n\r\n/**\r\n * Performs `findLeafNodeAtOffset` with a minor difference: When encountering a character that matches the `nameRegexp` argument,\r\n * it will instead return the leaf node at the `offset - 1` position.\r\n *\r\n * For LSP services, users expect that the declaration of an element is available if the cursor is directly after the element.\r\n */\r\nexport function findDeclarationNodeAtOffset(cstNode: CstNode | undefined, offset: number, nameRegexp = DefaultNameRegexp): LeafCstNode | undefined {\r\n    if (cstNode) {\r\n        if (offset > 0) {\r\n            const localOffset = offset - cstNode.offset;\r\n            const textAtOffset = cstNode.text.charAt(localOffset);\r\n            if (!nameRegexp.test(textAtOffset)) {\r\n                offset--;\r\n            }\r\n        }\r\n        return findLeafNodeAtOffset(cstNode, offset);\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport function findCommentNode(cstNode: CstNode | undefined, commentNames: string[]): CstNode | undefined {\r\n    if (cstNode) {\r\n        const previous = getPreviousNode(cstNode, true);\r\n        if (previous && isCommentNode(previous, commentNames)) {\r\n            return previous;\r\n        }\r\n        if (isRootCstNode(cstNode)) {\r\n            // Go from the first non-hidden node through all nodes in reverse order\r\n            // We do this to find the comment node which directly precedes the root node\r\n            const endIndex = cstNode.content.findIndex(e => !e.hidden);\r\n            for (let i = endIndex - 1; i >= 0; i--) {\r\n                const child = cstNode.content[i];\r\n                if (isCommentNode(child, commentNames)) {\r\n                    return child;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport function isCommentNode(cstNode: CstNode, commentNames: string[]): boolean {\r\n    return isLeafCstNode(cstNode) && commentNames.includes(cstNode.tokenType.name);\r\n}\r\n\r\n/**\r\n * Finds the leaf CST node at the specified 0-based string offset.\r\n * Note that the given offset will be within the range of the returned leaf node.\r\n *\r\n * If the offset does not point to a CST node (but just white space), this method will return `undefined`.\r\n *\r\n * @param node The CST node to search through.\r\n * @param offset The specified offset.\r\n * @returns The CST node at the specified offset.\r\n */\r\nexport function findLeafNodeAtOffset(node: CstNode, offset: number): LeafCstNode | undefined {\r\n    if (isLeafCstNode(node)) {\r\n        return node;\r\n    } else if (isCompositeCstNode(node)) {\r\n        const searchResult = binarySearch(node, offset, false);\r\n        if (searchResult) {\r\n            return findLeafNodeAtOffset(searchResult, offset);\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Finds the leaf CST node at the specified 0-based string offset.\r\n * If no CST node exists at the specified position, it will return the leaf node before it.\r\n *\r\n * If there is no leaf node before the specified offset, this method will return `undefined`.\r\n *\r\n * @param node The CST node to search through.\r\n * @param offset The specified offset.\r\n * @returns The CST node closest to the specified offset.\r\n */\r\nexport function findLeafNodeBeforeOffset(node: CstNode, offset: number): LeafCstNode | undefined {\r\n    if (isLeafCstNode(node)) {\r\n        return node;\r\n    } else if (isCompositeCstNode(node)) {\r\n        const searchResult = binarySearch(node, offset, true);\r\n        if (searchResult) {\r\n            return findLeafNodeBeforeOffset(searchResult, offset);\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\n\r\nfunction binarySearch(node: CompositeCstNode, offset: number, closest: boolean): CstNode | undefined {\r\n    let left = 0;\r\n    let right = node.content.length - 1;\r\n    let closestNode: CstNode | undefined = undefined;\r\n\r\n    while (left <= right) {\r\n        const middle = Math.floor((left + right) / 2);\r\n        const middleNode = node.content[middle];\r\n\r\n        if (middleNode.offset <= offset && middleNode.end > offset) {\r\n            // Found an exact match\r\n            return middleNode;\r\n        }\r\n\r\n        if (middleNode.end <= offset) {\r\n            // Update the closest node (less than offset) and move to the right half\r\n            closestNode = closest ? middleNode : undefined;\r\n            left = middle + 1;\r\n        } else {\r\n            // Move to the left half\r\n            right = middle - 1;\r\n        }\r\n    }\r\n\r\n    return closestNode;\r\n}\r\n\r\nexport function getPreviousNode(node: CstNode, hidden = true): CstNode | undefined {\r\n    while (node.container) {\r\n        const parent = node.container;\r\n        let index = parent.content.indexOf(node);\r\n        while (index > 0) {\r\n            index--;\r\n            const previous = parent.content[index];\r\n            if (hidden || !previous.hidden) {\r\n                return previous;\r\n            }\r\n        }\r\n        node = parent;\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport function getNextNode(node: CstNode, hidden = true): CstNode | undefined {\r\n    while (node.container) {\r\n        const parent = node.container;\r\n        let index = parent.content.indexOf(node);\r\n        const last = parent.content.length - 1;\r\n        while (index < last) {\r\n            index++;\r\n            const next = parent.content[index];\r\n            if (hidden || !next.hidden) {\r\n                return next;\r\n            }\r\n        }\r\n        node = parent;\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport function getStartlineNode(node: CstNode): CstNode {\r\n    if (node.range.start.character === 0) {\r\n        return node;\r\n    }\r\n    const line = node.range.start.line;\r\n    let last = node;\r\n    let index: number | undefined;\r\n    while (node.container) {\r\n        const parent = node.container;\r\n        const selfIndex = index ?? parent.content.indexOf(node);\r\n        if (selfIndex === 0) {\r\n            node = parent;\r\n            index = undefined;\r\n        } else {\r\n            index = selfIndex - 1;\r\n            node = parent.content[index];\r\n        }\r\n        if (node.range.start.line !== line) {\r\n            break;\r\n        }\r\n        last = node;\r\n    }\r\n    return last;\r\n}\r\n\r\nexport function getInteriorNodes(start: CstNode, end: CstNode): CstNode[] {\r\n    const commonParent = getCommonParent(start, end);\r\n    if (!commonParent) {\r\n        return [];\r\n    }\r\n    return commonParent.parent.content.slice(commonParent.a + 1, commonParent.b);\r\n}\r\n\r\nfunction getCommonParent(a: CstNode, b: CstNode): CommonParent | undefined {\r\n    const aParents = getParentChain(a);\r\n    const bParents = getParentChain(b);\r\n    let current: CommonParent | undefined;\r\n    for (let i = 0; i < aParents.length && i < bParents.length; i++) {\r\n        const aParent = aParents[i];\r\n        const bParent = bParents[i];\r\n        if (aParent.parent === bParent.parent) {\r\n            current = {\r\n                parent: aParent.parent,\r\n                a: aParent.index,\r\n                b: bParent.index\r\n            };\r\n        } else {\r\n            break;\r\n        }\r\n    }\r\n    return current;\r\n}\r\n\r\ninterface CommonParent {\r\n    parent: CompositeCstNode\r\n    a: number\r\n    b: number\r\n}\r\n\r\nfunction getParentChain(node: CstNode): ParentLink[] {\r\n    const chain: ParentLink[] = [];\r\n    while (node.container) {\r\n        const parent = node.container;\r\n        const index = parent.content.indexOf(node);\r\n        chain.push({\r\n            parent,\r\n            index\r\n        });\r\n        node = parent;\r\n    }\r\n    return chain.reverse();\r\n}\r\n\r\ninterface ParentLink {\r\n    parent: CompositeCstNode\r\n    index: number\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { TokenType } from 'chevrotain';\r\nimport type { URI } from './utils/uri-utils.js';\r\nimport type { AbstractElement } from './languages/generated/ast.js';\r\nimport type { DocumentSegment, LangiumDocument } from './workspace/documents.js';\r\n\r\n/**\r\n * A node in the Abstract Syntax Tree (AST).\r\n */\r\nexport interface AstNode {\r\n    /** Every AST node has a type corresponding to what was specified in the grammar declaration. */\r\n    readonly $type: string;\r\n    /** The container node in the AST; every node except the root node has a container. */\r\n    readonly $container?: AstNode;\r\n    /** The property of the `$container` node that contains this node. This is either a direct reference or an array. */\r\n    readonly $containerProperty?: string;\r\n    /** In case `$containerProperty` is an array, the array index is stored here. */\r\n    readonly $containerIndex?: number;\r\n    /** The Concrete Syntax Tree (CST) node of the text range from which this node was parsed. */\r\n    readonly $cstNode?: CstNode;\r\n    /** The document containing the AST; only the root node has a direct reference to the document. */\r\n    readonly $document?: LangiumDocument;\r\n}\r\n\r\nexport function isAstNode(obj: unknown): obj is AstNode {\r\n    return typeof obj === 'object' && obj !== null && typeof (obj as AstNode).$type === 'string';\r\n}\r\n\r\nexport interface GenericAstNode extends AstNode {\r\n    [key: string]: unknown\r\n}\r\n\r\ntype SpecificNodeProperties<N extends AstNode> = keyof Omit<N, keyof AstNode | number | symbol>;\r\n\r\n/**\r\n * The property names of a given AST node type.\r\n */\r\nexport type Properties<N extends AstNode> = SpecificNodeProperties<N> extends never ? string : SpecificNodeProperties<N>\r\n\r\n/**\r\n * A cross-reference in the AST. Cross-references may or may not be successfully resolved.\r\n */\r\nexport interface Reference<T extends AstNode = AstNode> {\r\n    /**\r\n     * The target AST node of this reference. Accessing this property may trigger cross-reference\r\n     * resolution by the `Linker` in case it has not been done yet. If the reference cannot be resolved,\r\n     * the value is `undefined`.\r\n     */\r\n    readonly ref?: T;\r\n\r\n    /** If any problem occurred while resolving the reference, it is described by this property. */\r\n    readonly error?: LinkingError;\r\n    /** The CST node from which the reference was parsed */\r\n    readonly $refNode?: CstNode;\r\n    /** The actual text used to look up in the surrounding scope */\r\n    readonly $refText: string;\r\n    /** The node description for the AstNode returned by `ref`  */\r\n    readonly $nodeDescription?: AstNodeDescription;\r\n}\r\n\r\nexport function isReference(obj: unknown): obj is Reference {\r\n    return typeof obj === 'object' && obj !== null && typeof (obj as Reference).$refText === 'string';\r\n}\r\n\r\nexport type ResolvedReference<T extends AstNode = AstNode> = Reference<T> & {\r\n    readonly ref: T;\r\n}\r\n\r\n/**\r\n * A description of an AST node is used when constructing scopes and looking up cross-reference targets.\r\n */\r\nexport interface AstNodeDescription {\r\n    /** The target node; should be present only for local references (linking to the same document). */\r\n    node?: AstNode;\r\n    /**\r\n     * The document segment that represents the range of the name of the AST node.\r\n     */\r\n    nameSegment?: DocumentSegment;\r\n    /**\r\n     * The document segment that represents the full range of the AST node.\r\n     */\r\n    selectionSegment?: DocumentSegment;\r\n    /** `$type` property value of the AST node */\r\n    type: string;\r\n    /** Name of the AST node; this is usually determined by the `NameProvider` service. */\r\n    name: string;\r\n    /** URI to the document containing the AST node */\r\n    documentUri: URI;\r\n    /** Navigation path inside the document */\r\n    path: string;\r\n}\r\n\r\nexport function isAstNodeDescription(obj: unknown): obj is AstNodeDescription {\r\n    return typeof obj === 'object' && obj !== null\r\n        && typeof (obj as AstNodeDescription).name === 'string'\r\n        && typeof (obj as AstNodeDescription).type === 'string'\r\n        && typeof (obj as AstNodeDescription).path === 'string';\r\n}\r\n\r\n/**\r\n * Information about a cross-reference. This is used when traversing references in an AST or to describe\r\n * unresolved references.\r\n */\r\nexport interface ReferenceInfo {\r\n    reference: Reference\r\n    container: AstNode\r\n    property: string\r\n    index?: number\r\n}\r\n\r\n/**\r\n * Used to collect information when the `Linker` service fails to resolve a cross-reference.\r\n */\r\nexport interface LinkingError extends ReferenceInfo {\r\n    message: string;\r\n    targetDescription?: AstNodeDescription;\r\n}\r\n\r\nexport function isLinkingError(obj: unknown): obj is LinkingError {\r\n    return typeof obj === 'object' && obj !== null\r\n        && isAstNode((obj as LinkingError).container)\r\n        && isReference((obj as LinkingError).reference)\r\n        && typeof (obj as LinkingError).message === 'string';\r\n}\r\n\r\n/**\r\n * Service used for generic access to the structure of the AST. This service is shared between\r\n * all involved languages, so it operates on the superset of types of these languages.\r\n */\r\nexport interface AstReflection {\r\n    getAllTypes(): string[]\r\n    getAllSubTypes(type: string): string[]\r\n    getReferenceType(refInfo: ReferenceInfo): string\r\n    getTypeMetaData(type: string): TypeMetaData\r\n    isInstance(node: unknown, type: string): boolean\r\n    isSubtype(subtype: string, supertype: string): boolean\r\n}\r\n\r\n/**\r\n * An abstract implementation of the {@link AstReflection} interface.\r\n * Serves to cache subtype computation results to improve performance throughout different parts of Langium.\r\n */\r\nexport abstract class AbstractAstReflection implements AstReflection {\r\n\r\n    protected subtypes: Record<string, Record<string, boolean | undefined>> = {};\r\n    protected allSubtypes: Record<string, string[] | undefined> = {};\r\n\r\n    abstract getAllTypes(): string[];\r\n    abstract getReferenceType(refInfo: ReferenceInfo): string;\r\n    abstract getTypeMetaData(type: string): TypeMetaData;\r\n    protected abstract computeIsSubtype(subtype: string, supertype: string): boolean;\r\n\r\n    isInstance(node: unknown, type: string): boolean {\r\n        return isAstNode(node) && this.isSubtype(node.$type, type);\r\n    }\r\n\r\n    isSubtype(subtype: string, supertype: string): boolean {\r\n        if (subtype === supertype) {\r\n            return true;\r\n        }\r\n        let nested = this.subtypes[subtype];\r\n        if (!nested) {\r\n            nested = this.subtypes[subtype] = {};\r\n        }\r\n        const existing = nested[supertype];\r\n        if (existing !== undefined) {\r\n            return existing;\r\n        } else {\r\n            const result = this.computeIsSubtype(subtype, supertype);\r\n            nested[supertype] = result;\r\n            return result;\r\n        }\r\n    }\r\n\r\n    getAllSubTypes(type: string): string[] {\r\n        const existing = this.allSubtypes[type];\r\n        if (existing) {\r\n            return existing;\r\n        } else {\r\n            const allTypes = this.getAllTypes();\r\n            const types: string[] = [];\r\n            for (const possibleSubType of allTypes) {\r\n                if (this.isSubtype(possibleSubType, type)) {\r\n                    types.push(possibleSubType);\r\n                }\r\n            }\r\n            this.allSubtypes[type] = types;\r\n            return types;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Represents runtime meta data about a meta model type.\r\n */\r\nexport interface TypeMetaData {\r\n    /** The name of this meta model type. Corresponds to the `AstNode.$type` value. */\r\n    name: string\r\n    /** A list of properties. They can contain default values for their respective property in the AST. */\r\n    properties: TypeProperty[]\r\n}\r\n\r\n/**\r\n * Describes the meta data of a property of an AST node.\r\n *\r\n * The optional `defaultValue` indicates that the property is mandatory in the AST node.\r\n * For example, if an AST node contains an array, but no elements of this array have been parsed, we still expect an empty array instead of `undefined`.\r\n */\r\nexport interface TypeProperty {\r\n    name: string\r\n    defaultValue?: PropertyType\r\n}\r\n\r\n/**\r\n * Represents a default value for an AST property.\r\n */\r\nexport type PropertyType = number | string | boolean | PropertyType[];\r\n\r\n/**\r\n * A node in the Concrete Syntax Tree (CST).\r\n */\r\nexport interface CstNode extends DocumentSegment {\r\n    /** The container node in the CST */\r\n    readonly container?: CompositeCstNode;\r\n    /** @deprecated use `container` instead. */\r\n    readonly parent?: CompositeCstNode;\r\n    /** The actual text */\r\n    readonly text: string;\r\n    /** The root CST node */\r\n    readonly root: RootCstNode;\r\n    /** The grammar element from which this node was parsed */\r\n    readonly grammarSource: AbstractElement;\r\n    /** @deprecated use `grammarSource` instead. */\r\n    readonly feature: AbstractElement;\r\n    /** The AST node created from this CST node */\r\n    readonly astNode: AstNode;\r\n    /** @deprecated use `astNode` instead. */\r\n    readonly element: AstNode;\r\n    /** Whether the token is hidden, i.e. not explicitly part of the containing grammar rule */\r\n    readonly hidden: boolean;\r\n}\r\n\r\n/**\r\n * A composite CST node contains other nodes, but no directly associated token.\r\n */\r\nexport interface CompositeCstNode extends CstNode {\r\n    readonly content: CstNode[];\r\n    /** @deprecated use `content` instead. */\r\n    readonly children: CstNode[];\r\n}\r\n\r\nexport function isCompositeCstNode(node: unknown): node is CompositeCstNode {\r\n    return typeof node === 'object' && node !== null && Array.isArray((node as CompositeCstNode).content);\r\n}\r\n\r\n/**\r\n * A leaf CST node corresponds to a token in the input token stream.\r\n */\r\nexport interface LeafCstNode extends CstNode {\r\n    readonly tokenType: TokenType;\r\n}\r\n\r\nexport function isLeafCstNode(node: unknown): node is LeafCstNode {\r\n    return typeof node === 'object' && node !== null && typeof (node as LeafCstNode).tokenType === 'object';\r\n}\r\n\r\nexport interface RootCstNode extends CompositeCstNode {\r\n    readonly fullText: string\r\n}\r\n\r\nexport function isRootCstNode(node: unknown): node is RootCstNode {\r\n    return isCompositeCstNode(node) && typeof (node as RootCstNode).fullText === 'string';\r\n}\r\n\r\n/**\r\n * Returns a type to have only properties names (!) of a type T whose property value is of a certain type K.\r\n */\r\ntype ExtractKeysOfValueType<T, K> = { [I in keyof T]: T[I] extends K ? I : never }[keyof T];\r\n\r\n/**\r\n * Returns the property names (!) of an AstNode that are cross-references.\r\n * Meant to be used during cross-reference resolution in combination with `assertUnreachable(context.property)`.\r\n */\r\nexport type CrossReferencesOfAstNodeType<N extends AstNode> = (\r\n    ExtractKeysOfValueType<N, Reference|undefined>\r\n    | ExtractKeysOfValueType<N, Array<Reference|undefined>|undefined>\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\n) & {};\r\n\r\n/**\r\n * Represents the enumeration-like type, that lists all AstNode types of your grammar.\r\n */\r\nexport type AstTypeList<T> = Record<keyof T, AstNode>;\r\n\r\n/**\r\n * Returns all types that contain cross-references, A is meant to be the interface `XXXAstType` fromm your generated `ast.ts` file.\r\n * Meant to be used during cross-reference resolution in combination with `assertUnreachable(context.container)`.\r\n */\r\nexport type AstNodeTypesWithCrossReferences<A extends AstTypeList<A>> = {\r\n    [T in keyof A]: CrossReferencesOfAstNodeType<A[T]> extends never ? never : A[T]\r\n}[keyof A];\r\n\r\nexport type Mutable<T> = {\r\n    -readonly [P in keyof T]: T[P]\r\n};\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/**\r\n * A stream is a read-only sequence of values. While the contents of an array can be accessed\r\n * both sequentially and randomly (via index), a stream allows only sequential access.\r\n *\r\n * The advantage of this is that a stream can be evaluated lazily, so it does not require\r\n * to store intermediate values. This can boost performance when a large sequence is\r\n * processed via filtering, mapping etc. and accessed at most once. However, lazy\r\n * evaluation means that all processing is repeated when you access the sequence multiple\r\n * times; in such a case, it may be better to store the resulting sequence into an array.\r\n */\r\nexport interface Stream<T> extends Iterable<T> {\r\n\r\n    /**\r\n     * Returns an iterator for this stream. This is the same as calling the `Symbol.iterator` function property.\r\n     */\r\n    iterator(): IterableIterator<T>;\r\n\r\n    /**\r\n     * Determines whether this stream contains no elements.\r\n     */\r\n    isEmpty(): boolean;\r\n\r\n    /**\r\n     * Determines the number of elements in this stream.\r\n     */\r\n    count(): number;\r\n\r\n    /**\r\n     * Collects all elements of this stream into an array.\r\n     */\r\n    toArray(): T[];\r\n\r\n    /**\r\n     * Collects all elements of this stream into a Set.\r\n     */\r\n    toSet(): Set<T>;\r\n\r\n    /**\r\n     * Collects all elements of this stream into a Map, applying the provided functions to determine keys and values.\r\n     *\r\n     * @param keyFn The function to derive map keys. If omitted, the stream elements are used as keys.\r\n     * @param valueFn The function to derive map values. If omitted, the stream elements are used as values.\r\n     */\r\n    toMap<K = T, V = T>(keyFn?: (e: T) => K, valueFn?: (e: T) => V): Map<K, V>;\r\n\r\n    /**\r\n     * Returns a string representation of a stream.\r\n     */\r\n    toString(): string;\r\n\r\n    /**\r\n     * Combines two streams by returning a new stream that yields all elements of this stream and the other stream.\r\n     *\r\n     * @param other Stream to be concatenated with this one.\r\n     */\r\n    concat<T2>(other: Iterable<T2>): Stream<T | T2>;\r\n\r\n    /**\r\n     * Adds all elements of the stream into a string, separated by the specified separator string.\r\n     *\r\n     * @param separator A string used to separate one element of the stream from the next in the resulting string.\r\n     *        If omitted, the steam elements are separated with a comma.\r\n     */\r\n    join(separator?: string): string\r\n\r\n    /**\r\n     * Returns the index of the first occurrence of a value in the stream, or -1 if it is not present.\r\n     *\r\n     * @param searchElement The value to locate in the array.\r\n     * @param fromIndex The stream index at which to begin the search. If fromIndex is omitted, the search\r\n     *        starts at index 0.\r\n     */\r\n    indexOf(searchElement: T, fromIndex?: number): number;\r\n\r\n    /**\r\n     * Determines whether all members of the stream satisfy the specified test.\r\n     *\r\n     * @param predicate This method calls the predicate function for each element in the stream until the\r\n     *        predicate returns a value which is coercible to the Boolean value `false`, or until the end\r\n     *        of the stream.\r\n     */\r\n    every<S extends T>(predicate: (value: T) => value is S): this is Stream<S>;\r\n    every(predicate: (value: T) => unknown): boolean;\r\n\r\n    /**\r\n     * Determines whether any member of the stream satisfies the specified test.\r\n     *\r\n     * @param predicate This method calls the predicate function for each element in the stream until the\r\n     *        predicate returns a value which is coercible to the Boolean value `true`, or until the end\r\n     *        of the stream.\r\n     */\r\n    some(predicate: (value: T) => unknown): boolean;\r\n\r\n    /**\r\n     * Performs the specified action for each element in the stream.\r\n     *\r\n     * @param callbackfn Function called once for each element in the stream.\r\n     */\r\n    forEach(callbackfn: (value: T, index: number) => void): void;\r\n\r\n    /**\r\n     * Returns a stream that yields the results of calling the specified callback function on each element\r\n     * of the stream. The function is called when the resulting stream elements are actually accessed, so\r\n     * accessing the resulting stream multiple times means the function is also called multiple times for\r\n     * each element of the stream.\r\n     *\r\n     * @param callbackfn Lazily evaluated function mapping stream elements.\r\n     */\r\n    map<U>(callbackfn: (value: T) => U): Stream<U>;\r\n\r\n    /**\r\n     * Returns the elements of the stream that meet the condition specified in a callback function.\r\n     * The function is called when the resulting stream elements are actually accessed, so accessing the\r\n     * resulting stream multiple times means the function is also called multiple times for each element\r\n     * of the stream.\r\n     *\r\n     * @param predicate Lazily evaluated function checking a condition on stream elements.\r\n     */\r\n    filter<S extends T>(predicate: (value: T) => value is S): Stream<S>;\r\n    filter(predicate: (value: T) => unknown): Stream<T>;\r\n\r\n    /**\r\n     * Returns the elements of the stream that are _non-nullable_, which means they are neither `undefined`\r\n     * nor `null`.\r\n     */\r\n    nonNullable(): Stream<NonNullable<T>>;\r\n\r\n    /**\r\n     * Calls the specified callback function for all elements in the stream. The return value of the\r\n     * callback function is the accumulated result, and is provided as an argument in the next call to\r\n     * the callback function.\r\n     *\r\n     * @param callbackfn This method calls the function once for each element in the stream, providing\r\n     *        the previous and current values of the reduction.\r\n     * @param initialValue If specified, `initialValue` is used as the initial value to start the\r\n     *        accumulation. The first call to the function provides this value as an argument instead\r\n     *        of a stream value.\r\n     */\r\n    reduce(callbackfn: (previousValue: T, currentValue: T) => T): T | undefined;\r\n    reduce<U = T>(callbackfn: (previousValue: U, currentValue: T) => U, initialValue: U): U;\r\n\r\n    /**\r\n     * Calls the specified callback function for all elements in the stream, in descending order.\r\n     * The return value of the callback function is the accumulated result, and is provided as an\r\n     * argument in the next call to the callback function.\r\n     *\r\n     * @param callbackfn This method calls the function once for each element in the stream, providing\r\n     *        the previous and current values of the reduction.\r\n     * @param initialValue If specified, `initialValue` is used as the initial value to start the\r\n     *        accumulation. The first call to the function provides this value as an argument instead\r\n     *        of an array value.\r\n     */\r\n    reduceRight(callbackfn: (previousValue: T, currentValue: T) => T): T | undefined;\r\n    reduceRight<U = T>(callbackfn: (previousValue: U, currentValue: T) => U, initialValue: U): U;\r\n\r\n    /**\r\n     * Returns the value of the first element in the stream that meets the condition, or `undefined`\r\n     * if there is no such element.\r\n     *\r\n     * @param predicate This method calls `predicate` once for each element of the stream, in ascending\r\n     *        order, until it finds one where `predicate` returns a value which is coercible to the\r\n     *        Boolean value `true`.\r\n     */\r\n    find<S extends T>(predicate: (value: T) => value is S): S | undefined;\r\n    find(predicate: (value: T) => unknown): T | undefined;\r\n\r\n    /**\r\n     * Returns the index of the first element in the stream that meets the condition, or `-1`\r\n     * if there is no such element.\r\n     *\r\n     * @param predicate This method calls `predicate` once for each element of the stream, in ascending\r\n     *        order, until it finds one where `predicate` returns a value which is coercible to the\r\n     *        Boolean value `true`.\r\n     */\r\n    findIndex(predicate: (value: T) => unknown): number;\r\n\r\n    /**\r\n     * Determines whether the stream includes a certain element, returning `true` or `false` as appropriate.\r\n     *\r\n     * @param searchElement The element to search for.\r\n     */\r\n    includes(searchElement: T): boolean;\r\n\r\n    /**\r\n     * Calls a defined callback function on each element of the stream and then flattens the result into\r\n     * a new stream. This is identical to a `map` followed by `flat` with depth 1.\r\n     *\r\n     * @param callbackfn Lazily evaluated function mapping stream elements.\r\n     */\r\n    flatMap<U>(callbackfn: (value: T) => U | Iterable<U>): Stream<U>;\r\n\r\n    /**\r\n     * Returns a new stream with all sub-stream or sub-array elements concatenated into it recursively up\r\n     * to the specified depth.\r\n     *\r\n     * @param depth The maximum recursion depth. Defaults to 1.\r\n     */\r\n    flat<D extends number = 1>(depth?: D): FlatStream<T, D>;\r\n\r\n    /**\r\n     * Returns the first element in the stream, or `undefined` if the stream is empty.\r\n     */\r\n    head(): T | undefined;\r\n\r\n    /**\r\n     * Returns a stream that skips the first `skipCount` elements from this stream.\r\n     *\r\n     * @param skipCount The number of elements to skip. If this is larger than the number of elements in\r\n     *        the stream, an empty stream is returned. Defaults to 1.\r\n     */\r\n    tail(skipCount?: number): Stream<T>;\r\n\r\n    /**\r\n     * Returns a stream consisting of the elements of this stream, truncated to be no longer than `maxSize`\r\n     * in length.\r\n     *\r\n     * @param maxSize The number of elements the stream should be limited to\r\n     */\r\n    limit(maxSize: number): Stream<T>;\r\n\r\n    /**\r\n     * Returns a stream containing only the distinct elements from this stream.\r\n     * Equality is determined with the same rules as a standard `Set`.\r\n     *\r\n     * @param by A function returning the key used to check equality with a previous stream element.\r\n     *        If omitted, the stream elements themselves are used for comparison.\r\n     */\r\n    distinct<Key = T>(by?: (element: T) => Key): Stream<T>;\r\n\r\n    /**\r\n     * Returns a stream that contains all elements that don't exist in the {@link other} iterable.\r\n     * Equality is determined with the same rules as a standard `Set`.\r\n     * @param other The elements that should be exluded from this stream.\r\n     * @param key A function returning the key used to check quality.\r\n     *        If omitted, the stream elements themselves are used for comparison.\r\n     */\r\n    exclude<Key = T>(other: Iterable<T>, key?: (element: T) => Key): Stream<T>;\r\n\r\n}\r\n\r\nexport type FlatStream<T, Depth extends number> = {\r\n    'done': Stream<T>,\r\n    'recur': T extends Iterable<infer Content>\r\n        ? FlatStream<Content, MinusOne<Depth>>\r\n        : Stream<T>\r\n}[Depth extends 0 ? 'done' : 'recur'];\r\n\r\nexport type MinusOne<N extends number> = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][N];\r\n\r\n/**\r\n * The default implementation of `Stream` works with two input functions:\r\n *  - The first function creates the initial state of an iteration.\r\n *  - The second function gets the current state as argument and returns an `IteratorResult`.\r\n */\r\nexport class StreamImpl<S, T> implements Stream<T> {\r\n    protected readonly startFn: () => S;\r\n    protected readonly nextFn: (state: S) => IteratorResult<T>;\r\n\r\n    constructor(startFn: () => S, nextFn: (state: S) => IteratorResult<T, undefined>) {\r\n        this.startFn = startFn;\r\n        this.nextFn = nextFn;\r\n    }\r\n\r\n    iterator(): IterableIterator<T> {\r\n        const iterator = {\r\n            state: this.startFn(),\r\n            next: () => this.nextFn(iterator.state),\r\n            [Symbol.iterator]: () => iterator\r\n        };\r\n        return iterator;\r\n    }\r\n\r\n    [Symbol.iterator](): Iterator<T> {\r\n        return this.iterator();\r\n    }\r\n\r\n    isEmpty(): boolean {\r\n        const iterator = this.iterator();\r\n        return Boolean(iterator.next().done);\r\n    }\r\n\r\n    count(): number {\r\n        const iterator = this.iterator();\r\n        let count = 0;\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            count++;\r\n            next = iterator.next();\r\n        }\r\n        return count;\r\n    }\r\n\r\n    toArray(): T[] {\r\n        const result: T[] = [];\r\n        const iterator = this.iterator();\r\n        let next: IteratorResult<T>;\r\n        do {\r\n            next = iterator.next();\r\n            if (next.value !== undefined) {\r\n                result.push(next.value);\r\n            }\r\n        } while (!next.done);\r\n        return result;\r\n    }\r\n\r\n    toSet(): Set<T> {\r\n        return new Set(this);\r\n    }\r\n\r\n    toMap<K = T, V = T>(keyFn?: (e: T) => K, valueFn?: (e: T) => V): Map<K, V> {\r\n        const entryStream = this.map(element => <[K, V]>[\r\n            keyFn ? keyFn(element) : element,\r\n            valueFn ? valueFn(element) : element\r\n        ]);\r\n        return new Map(entryStream);\r\n    }\r\n\r\n    toString(): string {\r\n        return this.join();\r\n    }\r\n\r\n    concat<T2>(other: Iterable<T2>): Stream<T | T2> {\r\n        return new StreamImpl<{ first: S, firstDone: boolean, iterator: Iterator<T2, unknown, undefined> }, T | T2>(\r\n            () => ({ first: this.startFn(), firstDone: false, iterator: other[Symbol.iterator]() }),\r\n            state => {\r\n                let result: IteratorResult<T | T2>;\r\n                if (!state.firstDone) {\r\n                    do {\r\n                        result = this.nextFn(state.first);\r\n                        if (!result.done) {\r\n                            return result;\r\n                        }\r\n                    } while (!result.done);\r\n                    state.firstDone = true;\r\n                }\r\n                do {\r\n                    result = state.iterator.next();\r\n                    if (!result.done) {\r\n                        return result;\r\n                    }\r\n                } while (!result.done);\r\n                return DONE_RESULT;\r\n            }\r\n        );\r\n    }\r\n\r\n    join(separator = ','): string {\r\n        const iterator = this.iterator();\r\n        let value = '';\r\n        let result: IteratorResult<T>;\r\n        let addSeparator = false;\r\n        do {\r\n            result = iterator.next();\r\n            if (!result.done) {\r\n                if (addSeparator) {\r\n                    value += separator;\r\n                }\r\n                value += toString(result.value);\r\n            }\r\n            addSeparator = true;\r\n        } while (!result.done);\r\n        return value;\r\n    }\r\n\r\n    indexOf(searchElement: T, fromIndex = 0): number {\r\n        const iterator = this.iterator();\r\n        let index = 0;\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (index >= fromIndex && next.value === searchElement) {\r\n                return index;\r\n            }\r\n            next = iterator.next();\r\n            index++;\r\n        }\r\n        return -1;\r\n    }\r\n\r\n    // In the following definition the '& this' part in the return type is important\r\n    // _and_ the order within 'Stream<U> & this' is crucial!\r\n    // Otherwise Typescript would infer the type of 'this' as 'StreamImpl<S, T> & Stream<U>'\r\n    // (or '<subClass of StreamImpl<S, T> & Stream<U>') and usages like\r\n    // ```\r\n    //  const stream = new StreamImpl(...);\r\n    //  ... stream.every(<typeGuard>) & stream....\r\n    // ```\r\n    // cannot benefit from '<typeGuard>', as Typescript would priorize the signatures\r\n    // of 'StreamImpl<S, T>' (i.e. those of 'Stream<T>') over those of 'Stream<U>'.\r\n    // With the order of 'Stream<U> & this' the signatures of 'Stream<U>' get precedence.\r\n    every<U extends T>(predicate: (value: T) => value is U): this is Stream<U> & this;\r\n    every(predicate: (value: T) => unknown): boolean;\r\n    every(predicate: (value: T) => unknown): boolean {\r\n        const iterator = this.iterator();\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (!predicate(next.value)) {\r\n                return false;\r\n            }\r\n            next = iterator.next();\r\n        }\r\n        return true;\r\n    }\r\n\r\n    some(predicate: (value: T) => unknown): boolean {\r\n        const iterator = this.iterator();\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (predicate(next.value)) {\r\n                return true;\r\n            }\r\n            next = iterator.next();\r\n        }\r\n        return false;\r\n    }\r\n\r\n    forEach(callbackfn: (value: T, index: number) => void): void {\r\n        const iterator = this.iterator();\r\n        let index = 0;\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            callbackfn(next.value, index);\r\n            next = iterator.next();\r\n            index++;\r\n        }\r\n    }\r\n\r\n    map<U>(callbackfn: (value: T) => U): Stream<U> {\r\n        return new StreamImpl<S, U>(\r\n            this.startFn,\r\n            (state) => {\r\n                const { done, value } = this.nextFn(state);\r\n                if (done) {\r\n                    return DONE_RESULT;\r\n                } else {\r\n                    return { done: false, value: callbackfn(value) };\r\n                }\r\n            }\r\n        );\r\n    }\r\n\r\n    // for remarks on the return type definition refer to 'every<U extends T>(...)'\r\n    filter<U extends T>(predicate: (value: T) => value is U): Stream<U> & this;\r\n    filter(predicate: (value: T) => unknown): Stream<T> & this;\r\n    filter(predicate: (value: T) => unknown): Stream<T> {\r\n        return new StreamImpl<S, T>(\r\n            this.startFn,\r\n            state => {\r\n                let result: IteratorResult<T>;\r\n                do {\r\n                    result = this.nextFn(state);\r\n                    if (!result.done && predicate(result.value)) {\r\n                        return result;\r\n                    }\r\n                } while (!result.done);\r\n                return DONE_RESULT;\r\n            }\r\n        );\r\n    }\r\n\r\n    nonNullable(): Stream<NonNullable<T>> {\r\n        return this.filter(e => e !== undefined && e !== null) as Stream<NonNullable<T>>;\r\n    }\r\n\r\n    reduce(callbackfn: (previousValue: T, currentValue: T) => T): T | undefined;\r\n    reduce<U = T>(callbackfn: (previousValue: U, currentValue: T) => U, initialValue: U): U;\r\n    reduce<U>(callbackfn: (previousValue: U | T, currentValue: T) => U, initialValue?: U): U | T | undefined {\r\n        const iterator = this.iterator();\r\n        let previousValue: U | T | undefined = initialValue;\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (previousValue === undefined) {\r\n                previousValue = next.value;\r\n            } else {\r\n                previousValue = callbackfn(previousValue, next.value);\r\n            }\r\n            next = iterator.next();\r\n        }\r\n        return previousValue;\r\n    }\r\n\r\n    reduceRight(callbackfn: (previousValue: T, currentValue: T) => T): T | undefined;\r\n    reduceRight<U = T>(callbackfn: (previousValue: U, currentValue: T) => U, initialValue: U): U;\r\n    reduceRight<U>(callbackfn: (previousValue: U | T, currentValue: T) => U, initialValue?: U): U | T | undefined {\r\n        return this.recursiveReduce(this.iterator(), callbackfn, initialValue);\r\n    }\r\n\r\n    protected recursiveReduce<U>(iterator: Iterator<T>, callbackfn: (previousValue: U | T, currentValue: T) => U, initialValue?: U): U | T | undefined {\r\n        const next = iterator.next();\r\n        if (next.done) {\r\n            return initialValue;\r\n        }\r\n        const previousValue = this.recursiveReduce(iterator, callbackfn, initialValue);\r\n        if (previousValue === undefined) {\r\n            return next.value;\r\n        }\r\n        return callbackfn(previousValue, next.value);\r\n    }\r\n\r\n    find<S extends T>(predicate: (value: T) => value is S): S | undefined;\r\n    find(predicate: (value: T) => unknown): T | undefined;\r\n    find(predicate: (value: T) => unknown): T | undefined {\r\n        const iterator = this.iterator();\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (predicate(next.value)) {\r\n                return next.value;\r\n            }\r\n            next = iterator.next();\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    findIndex(predicate: (value: T) => unknown): number {\r\n        const iterator = this.iterator();\r\n        let index = 0;\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (predicate(next.value)) {\r\n                return index;\r\n            }\r\n            next = iterator.next();\r\n            index++;\r\n        }\r\n        return -1;\r\n    }\r\n\r\n    includes(searchElement: T): boolean {\r\n        const iterator = this.iterator();\r\n        let next = iterator.next();\r\n        while (!next.done) {\r\n            if (next.value === searchElement) {\r\n                return true;\r\n            }\r\n            next = iterator.next();\r\n        }\r\n        return false;\r\n    }\r\n\r\n    flatMap<U>(callbackfn: (value: T) => U | Iterable<U>): Stream<U> {\r\n        type FlatMapState = { this: S, iterator?: Iterator<U, undefined> }\r\n        return new StreamImpl<FlatMapState, U>(\r\n            () => ({ this: this.startFn() }),\r\n            (state) => {\r\n                do {\r\n                    if (state.iterator) {\r\n                        const next = state.iterator.next();\r\n                        if (next.done) {\r\n                            state.iterator = undefined;\r\n                        } else {\r\n                            return next;\r\n                        }\r\n                    }\r\n                    const { done, value } = this.nextFn(state.this);\r\n                    if (!done) {\r\n                        const mapped = callbackfn(value);\r\n                        if (isIterable(mapped)) {\r\n                            state.iterator = mapped[Symbol.iterator]();\r\n                        } else {\r\n                            return { done: false, value: mapped };\r\n                        }\r\n                    }\r\n                } while (state.iterator);\r\n                return DONE_RESULT;\r\n            }\r\n        );\r\n    }\r\n\r\n    flat<D extends number = 1>(depth?: D): FlatStream<T, D> {\r\n        if (depth === undefined) {\r\n            depth = 1 as D;\r\n        }\r\n        if (depth <= 0) {\r\n            return this as unknown as FlatStream<T, D>;\r\n        }\r\n        const stream = depth > 1 ? this.flat(depth - 1) as unknown as StreamImpl<S, T> : this;\r\n        type FlatMapState = { this: S, iterator?: Iterator<T, undefined> }\r\n        return new StreamImpl<FlatMapState, T>(\r\n            () => ({ this: stream.startFn() }),\r\n            (state) => {\r\n                do {\r\n                    if (state.iterator) {\r\n                        const next = state.iterator.next();\r\n                        if (next.done) {\r\n                            state.iterator = undefined;\r\n                        } else {\r\n                            return next;\r\n                        }\r\n                    }\r\n                    const { done, value } = stream.nextFn(state.this);\r\n                    if (!done) {\r\n                        if (isIterable(value)) {\r\n                            state.iterator = value[Symbol.iterator]() as Iterator<T>;\r\n                        } else {\r\n                            return { done: false, value: value };\r\n                        }\r\n                    }\r\n                } while (state.iterator);\r\n                return DONE_RESULT;\r\n            }\r\n        ) as unknown as FlatStream<T, D>;\r\n    }\r\n\r\n    head(): T | undefined {\r\n        const iterator = this.iterator();\r\n        const result = iterator.next();\r\n        if (result.done) {\r\n            return undefined;\r\n        }\r\n        return result.value;\r\n    }\r\n\r\n    tail(skipCount = 1): Stream<T> {\r\n        return new StreamImpl<S, T>(\r\n            () => {\r\n                const state = this.startFn();\r\n                for (let i = 0; i < skipCount; i++) {\r\n                    const next = this.nextFn(state);\r\n                    if (next.done) {\r\n                        return state;\r\n                    }\r\n                }\r\n                return state;\r\n            },\r\n            this.nextFn\r\n        );\r\n    }\r\n\r\n    limit(maxSize: number): Stream<T> {\r\n        return new StreamImpl<{ size: number, state: S }, T>(\r\n            () => ({ size: 0, state: this.startFn() }),\r\n            state => {\r\n                state.size++;\r\n                if (state.size > maxSize) {\r\n                    return DONE_RESULT;\r\n                }\r\n                return this.nextFn(state.state);\r\n            }\r\n        );\r\n    }\r\n\r\n    distinct<Key = T>(by?: (element: T) => Key): Stream<T> {\r\n        return new StreamImpl<{ set: Set<Key | T>, internalState: S }, T>(\r\n            () => ({ set: new Set<Key | T>(), internalState: this.startFn() }),\r\n            state => {\r\n                let result: IteratorResult<T>;\r\n                do {\r\n                    result = this.nextFn(state.internalState);\r\n                    if (!result.done) {\r\n                        const value = by ? by(result.value) : result.value;\r\n                        if (!state.set.has(value)) {\r\n                            state.set.add(value);\r\n                            return result;\r\n                        }\r\n                    }\r\n                } while (!result.done);\r\n                return DONE_RESULT;\r\n            }\r\n        );\r\n    }\r\n\r\n    exclude<Key = T>(other: Iterable<T>, key?: (element: T) => Key): Stream<T> {\r\n        const otherKeySet = new Set<Key | T>();\r\n        for (const item of other) {\r\n            const value = key ? key(item) : item;\r\n            otherKeySet.add(value);\r\n        }\r\n        return this.filter(e => {\r\n            const ownKey = key ? key(e) : e;\r\n            return !otherKeySet.has(ownKey);\r\n        });\r\n    }\r\n}\r\n\r\nfunction toString(item: unknown): string {\r\n    if (typeof item === 'string') {\r\n        return item as string;\r\n    }\r\n    if (typeof item === 'undefined') {\r\n        return 'undefined';\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if (typeof (item as any).toString === 'function') {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return (item as any).toString();\r\n    }\r\n    return Object.prototype.toString.call(item);\r\n}\r\n\r\nfunction isIterable<T>(obj: unknown): obj is Iterable<T> {\r\n    return !!obj && typeof (obj as Iterable<T>)[Symbol.iterator] === 'function';\r\n}\r\n\r\n/**\r\n * An empty stream of any type.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport const EMPTY_STREAM: Stream<any> = new StreamImpl<undefined, any>(() => undefined, () => DONE_RESULT);\r\n\r\n/**\r\n * Use this `IteratorResult` when implementing a `StreamImpl` to indicate that there are no more elements in the stream.\r\n */\r\nexport const DONE_RESULT: IteratorReturnResult<undefined> = Object.freeze({ done: true, value: undefined });\r\n\r\n/**\r\n * Create a stream from one or more iterables or array-likes.\r\n */\r\nexport function stream<T>(...collections: Array<Iterable<T> | ArrayLike<T>>): Stream<T> {\r\n    if (collections.length === 1) {\r\n        const collection = collections[0];\r\n        if (collection instanceof StreamImpl) {\r\n            return collection as Stream<T>;\r\n        }\r\n        if (isIterable(collection)) {\r\n            return new StreamImpl<Iterator<T, undefined>, T>(\r\n                () => collection[Symbol.iterator](),\r\n                (iterator) => iterator.next()\r\n            );\r\n        }\r\n        if (typeof collection.length === 'number') {\r\n            return new StreamImpl<{ index: number }, T>(\r\n                () => ({ index: 0 }),\r\n                (state) => {\r\n                    if (state.index < collection.length) {\r\n                        return { done: false, value: collection[state.index++] };\r\n                    } else {\r\n                        return DONE_RESULT;\r\n                    }\r\n                }\r\n            );\r\n        }\r\n    }\r\n    if (collections.length > 1) {\r\n        type State = { collIndex: number, iterator?: Iterator<T, undefined>, array?: ArrayLike<T>, arrIndex: number };\r\n        return new StreamImpl<State, T>(\r\n            () => ({ collIndex: 0, arrIndex: 0 }),\r\n            (state) => {\r\n                do {\r\n                    if (state.iterator) {\r\n                        const next = state.iterator.next();\r\n                        if (!next.done) {\r\n                            return next;\r\n                        }\r\n                        state.iterator = undefined;\r\n                    }\r\n                    if (state.array) {\r\n                        if (state.arrIndex < state.array.length) {\r\n                            return { done: false, value: state.array[state.arrIndex++] };\r\n                        }\r\n                        state.array = undefined;\r\n                        state.arrIndex = 0;\r\n                    }\r\n                    if (state.collIndex < collections.length) {\r\n                        const collection = collections[state.collIndex++];\r\n                        if (isIterable(collection)) {\r\n                            state.iterator = collection[Symbol.iterator]();\r\n                        } else if (collection && typeof collection.length === 'number') {\r\n                            state.array = collection;\r\n                        }\r\n                    }\r\n                } while (state.iterator || state.array || state.collIndex < collections.length);\r\n                return DONE_RESULT;\r\n            }\r\n        );\r\n    }\r\n    return EMPTY_STREAM;\r\n}\r\n\r\n/**\r\n * A tree iterator adds the ability to prune the current iteration.\r\n */\r\nexport interface TreeIterator<T> extends IterableIterator<T> {\r\n    /**\r\n     * Skip the whole subtree below the last returned element. The iteration continues as if that\r\n     * element had no children.\r\n     */\r\n    prune(): void\r\n}\r\n\r\n/**\r\n * A tree stream is used to stream the elements of a tree, for example an AST or CST.\r\n */\r\nexport interface TreeStream<T> extends Stream<T> {\r\n    iterator(): TreeIterator<T>\r\n}\r\n\r\n/**\r\n * The default implementation of `TreeStream` takes a root element and a function that computes the\r\n * children of its argument. Whether the root node included in the stream is controlled with the\r\n * `includeRoot` option, which defaults to `false`.\r\n */\r\nexport class TreeStreamImpl<T>\r\n    extends StreamImpl<{ iterators: Array<Iterator<T>>, pruned: boolean }, T>\r\n    implements TreeStream<T> {\r\n\r\n    constructor(root: T, children: (node: T) => Iterable<T>, options?: { includeRoot?: boolean }) {\r\n        super(\r\n            () => ({\r\n                iterators: options?.includeRoot ? [[root][Symbol.iterator]()] : [children(root)[Symbol.iterator]()],\r\n                pruned: false\r\n            }),\r\n            state => {\r\n                if (state.pruned) {\r\n                    state.iterators.pop();\r\n                    state.pruned = false;\r\n                }\r\n                while (state.iterators.length > 0) {\r\n                    const iterator = state.iterators[state.iterators.length - 1];\r\n                    const next = iterator.next();\r\n                    if (next.done) {\r\n                        state.iterators.pop();\r\n                    } else {\r\n                        state.iterators.push(children(next.value)[Symbol.iterator]());\r\n                        return next;\r\n                    }\r\n                }\r\n                return DONE_RESULT;\r\n            }\r\n        );\r\n    }\r\n\r\n    override iterator(): TreeIterator<T> {\r\n        const iterator = {\r\n            state: this.startFn(),\r\n            next: () => this.nextFn(iterator.state),\r\n            prune: () => {\r\n                iterator.state.pruned = true;\r\n            },\r\n            [Symbol.iterator]: () => iterator\r\n        };\r\n        return iterator;\r\n    }\r\n}\r\n\r\n/**\r\n * A set of utility functions that reduce a stream to a single value.\r\n */\r\nexport namespace Reduction {\r\n\r\n    /**\r\n     * Compute the sum of a number stream.\r\n     */\r\n    export function sum(stream: Stream<number>): number {\r\n        return stream.reduce((a, b) => a + b, 0);\r\n    }\r\n\r\n    /**\r\n     * Compute the product of a number stream.\r\n     */\r\n    export function product(stream: Stream<number>): number {\r\n        return stream.reduce((a, b) => a * b, 0);\r\n    }\r\n\r\n    /**\r\n     * Compute the minimum of a number stream. Returns `undefined` if the stream is empty.\r\n     */\r\n    export function min(stream: Stream<number>): number | undefined {\r\n        return stream.reduce((a, b) => Math.min(a, b));\r\n    }\r\n\r\n    /**\r\n     * Compute the maximum of a number stream. Returns `undefined` if the stream is empty.\r\n     */\r\n    export function max(stream: Stream<number>): number | undefined {\r\n        return stream.reduce((a, b) => Math.max(a, b));\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021-2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { assertUnreachable } from '../utils/errors.js';\r\nimport * as ast from '../languages/generated/ast.js';\r\nimport type { AstNode, CstNode } from '../syntax-tree.js';\r\nimport { isCompositeCstNode } from '../syntax-tree.js';\r\nimport { getContainerOfType, streamAllContents } from './ast-utils.js';\r\nimport { streamCst } from './cst-utils.js';\r\nimport { escapeRegExp, isWhitespace } from './regexp-utils.js';\r\n\r\n/**\r\n * Returns the entry rule of the given grammar, if any. If the grammar file does not contain an entry rule,\r\n * the result is `undefined`.\r\n */\r\nexport function getEntryRule(grammar: ast.Grammar): ast.ParserRule | undefined {\r\n    return grammar.rules.find(e => ast.isParserRule(e) && e.entry) as ast.ParserRule;\r\n}\r\n\r\n/**\r\n * Returns all hidden terminal rules of the given grammar, if any.\r\n */\r\nexport function getHiddenRules(grammar: ast.Grammar) {\r\n    return grammar.rules.filter((e): e is ast.TerminalRule => ast.isTerminalRule(e) && e.hidden);\r\n}\r\n\r\n/**\r\n * Returns all rules that can be reached from the topmost rules of the specified grammar (entry and hidden terminal rules).\r\n *\r\n * @param grammar The grammar that contains all rules\r\n * @param allTerminals Whether or not to include terminals that are referenced only by other terminals\r\n * @returns A list of referenced parser and terminal rules. If the grammar contains no entry rule,\r\n *      this function returns all rules of the specified grammar.\r\n */\r\nexport function getAllReachableRules(grammar: ast.Grammar, allTerminals: boolean): Set<ast.AbstractRule> {\r\n    const ruleNames = new Set<string>();\r\n    const entryRule = getEntryRule(grammar);\r\n    if (!entryRule) {\r\n        return new Set(grammar.rules);\r\n    }\r\n\r\n    const topMostRules = [entryRule as ast.AbstractRule].concat(getHiddenRules(grammar));\r\n    for (const rule of topMostRules) {\r\n        ruleDfs(rule, ruleNames, allTerminals);\r\n    }\r\n\r\n    const rules = new Set<ast.AbstractRule>();\r\n    for (const rule of grammar.rules) {\r\n        if (ruleNames.has(rule.name) || (ast.isTerminalRule(rule) && rule.hidden)) {\r\n            rules.add(rule);\r\n        }\r\n    }\r\n    return rules;\r\n}\r\n\r\nfunction ruleDfs(rule: ast.AbstractRule, visitedSet: Set<string>, allTerminals: boolean): void {\r\n    visitedSet.add(rule.name);\r\n    streamAllContents(rule).forEach(node => {\r\n        if (ast.isRuleCall(node) || (allTerminals && ast.isTerminalRuleCall(node))) {\r\n            const refRule = node.rule.ref;\r\n            if (refRule && !visitedSet.has(refRule.name)) {\r\n                ruleDfs(refRule, visitedSet, allTerminals);\r\n            }\r\n        }\r\n    });\r\n}\r\n\r\n/**\r\n * Determines the grammar expression used to parse a cross-reference (usually a reference to a terminal rule).\r\n * A cross-reference can declare this expression explicitly in the form `[Type : Terminal]`, but if `Terminal`\r\n * is omitted, this function attempts to infer it from the name of the referenced `Type` (using `findNameAssignment`).\r\n *\r\n * Returns the grammar expression used to parse the given cross-reference, or `undefined` if it is not declared\r\n * and cannot be inferred.\r\n */\r\nexport function getCrossReferenceTerminal(crossRef: ast.CrossReference): ast.AbstractElement | undefined {\r\n    if (crossRef.terminal) {\r\n        return crossRef.terminal;\r\n    } else if (crossRef.type.ref) {\r\n        const nameAssigment = findNameAssignment(crossRef.type.ref);\r\n        return nameAssigment?.terminal;\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Determines whether the given terminal rule represents a comment. This is true if the rule is marked\r\n * as `hidden` and it does not match white space. This means every hidden token (i.e. excluded from the AST)\r\n * that contains visible characters is considered a comment.\r\n */\r\nexport function isCommentTerminal(terminalRule: ast.TerminalRule): boolean {\r\n    return terminalRule.hidden && !isWhitespace(terminalRegex(terminalRule));\r\n}\r\n\r\n/**\r\n * Find all CST nodes within the given node that contribute to the specified property.\r\n *\r\n * @param node A CST node in which to look for property assignments. If this is undefined, the result is an empty array.\r\n * @param property A property name of the constructed AST node. If this is undefined, the result is an empty array.\r\n */\r\nexport function findNodesForProperty(node: CstNode | undefined, property: string | undefined): CstNode[] {\r\n    if (!node || !property) {\r\n        return [];\r\n    }\r\n    return findNodesForPropertyInternal(node, property, node.astNode, true);\r\n}\r\n\r\n/**\r\n * Find a single CST node within the given node that contributes to the specified property.\r\n *\r\n * @param node A CST node in which to look for property assignments. If this is undefined, the result is `undefined`.\r\n * @param property A property name of the constructed AST node. If this is undefined, the result is `undefined`.\r\n * @param index If no index is specified or the index is less than zero, the first found node is returned. If the\r\n *        specified index exceeds the number of assignments to the property, the last found node is returned. Otherwise,\r\n *        the node with the specified index is returned.\r\n */\r\nexport function findNodeForProperty(node: CstNode | undefined, property: string | undefined, index?: number): CstNode | undefined {\r\n    if (!node || !property) {\r\n        return undefined;\r\n    }\r\n    const nodes = findNodesForPropertyInternal(node, property, node.astNode, true);\r\n    if (nodes.length === 0) {\r\n        return undefined;\r\n    }\r\n    if (index !== undefined) {\r\n        index = Math.max(0, Math.min(index, nodes.length - 1));\r\n    } else {\r\n        index = 0;\r\n    }\r\n    return nodes[index];\r\n}\r\n\r\nfunction findNodesForPropertyInternal(node: CstNode, property: string, element: AstNode | undefined, first: boolean): CstNode[] {\r\n    if (!first) {\r\n        const nodeFeature = getContainerOfType(node.grammarSource, ast.isAssignment);\r\n        if (nodeFeature && nodeFeature.feature === property) {\r\n            return [node];\r\n        }\r\n    }\r\n    if (isCompositeCstNode(node) && node.astNode === element) {\r\n        return node.content.flatMap(e => findNodesForPropertyInternal(e, property, element, false));\r\n    }\r\n    return [];\r\n}\r\n\r\n/**\r\n * Find all CST nodes within the given node that correspond to the specified keyword.\r\n *\r\n * @param node A CST node in which to look for keywords. If this is undefined, the result is an empty array.\r\n * @param keyword A keyword as specified in the grammar.\r\n */\r\nexport function findNodesForKeyword(node: CstNode | undefined, keyword: string): CstNode[] {\r\n    if (!node) {\r\n        return [];\r\n    }\r\n    return findNodesForKeywordInternal(node, keyword, node?.astNode);\r\n}\r\n\r\n/**\r\n * Find a single CST node within the given node that corresponds to the specified keyword.\r\n *\r\n * @param node A CST node in which to look for keywords. If this is undefined, the result is `undefined`.\r\n * @param keyword A keyword as specified in the grammar.\r\n * @param index If no index is specified or the index is less than zero, the first found node is returned. If the\r\n *        specified index exceeds the number of keyword occurrences, the last found node is returned. Otherwise,\r\n *        the node with the specified index is returned.\r\n */\r\nexport function findNodeForKeyword(node: CstNode | undefined, keyword: string, index?: number): CstNode | undefined {\r\n    if (!node) {\r\n        return undefined;\r\n    }\r\n    const nodes = findNodesForKeywordInternal(node, keyword, node?.astNode);\r\n    if (nodes.length === 0) {\r\n        return undefined;\r\n    }\r\n    if (index !== undefined) {\r\n        index = Math.max(0, Math.min(index, nodes.length - 1));\r\n    } else {\r\n        index = 0;\r\n    }\r\n    return nodes[index];\r\n}\r\n\r\nexport function findNodesForKeywordInternal(node: CstNode, keyword: string, element: AstNode | undefined): CstNode[] {\r\n    if (node.astNode !== element) {\r\n        return [];\r\n    }\r\n    if (ast.isKeyword(node.grammarSource) && node.grammarSource.value === keyword) {\r\n        return [node];\r\n    }\r\n    const treeIterator = streamCst(node).iterator();\r\n    let result: IteratorResult<CstNode>;\r\n    const keywordNodes: CstNode[] = [];\r\n    do {\r\n        result = treeIterator.next();\r\n        if (!result.done) {\r\n            const childNode = result.value;\r\n            if (childNode.astNode === element) {\r\n                if (ast.isKeyword(childNode.grammarSource) && childNode.grammarSource.value === keyword) {\r\n                    keywordNodes.push(childNode);\r\n                }\r\n            } else {\r\n                treeIterator.prune();\r\n            }\r\n        }\r\n    } while (!result.done);\r\n    return keywordNodes;\r\n}\r\n\r\n/**\r\n * If the given CST node was parsed in the context of a property assignment, the respective `Assignment` grammar\r\n * node is returned. If no assignment is found, the result is `undefined`.\r\n *\r\n * @param cstNode A CST node for which to find a property assignment.\r\n */\r\nexport function findAssignment(cstNode: CstNode): ast.Assignment | undefined {\r\n    const astNode = cstNode.astNode;\r\n    // Only search until the ast node of the parent cst node is no longer the original ast node\r\n    // This would make us jump to a preceding rule call, which contains only unrelated assignments\r\n    while (astNode === cstNode.container?.astNode) {\r\n        const assignment = getContainerOfType(cstNode.grammarSource, ast.isAssignment);\r\n        if (assignment) {\r\n            return assignment;\r\n        }\r\n        cstNode = cstNode.container;\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Find an assignment to the `name` property for the given grammar type. This requires the `type` to be inferred\r\n * from a parser rule, and that rule must contain an assignment to the `name` property. In all other cases,\r\n * this function returns `undefined`.\r\n */\r\nexport function findNameAssignment(type: ast.AbstractType): ast.Assignment | undefined {\r\n    let startNode: AstNode = type;\r\n    if (ast.isInferredType(startNode)) {\r\n        // for inferred types, the location to start searching for the name-assignment is different\r\n        if (ast.isAction(startNode.$container)) {\r\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\r\n            startNode = startNode.$container.$container!;\r\n        } else if (ast.isParserRule(startNode.$container)) {\r\n            // investigate the parser rule with the explicitly inferred type\r\n            startNode = startNode.$container;\r\n        } else {\r\n            assertUnreachable(startNode.$container);\r\n        }\r\n    }\r\n    return findNameAssignmentInternal(type, startNode, new Map());\r\n}\r\n\r\nfunction findNameAssignmentInternal(type: ast.AbstractType, startNode: AstNode, cache: Map<ast.AbstractType, ast.Assignment | undefined>): ast.Assignment | undefined {\r\n    // the cache is only required to prevent infinite loops\r\n    function go(node: AstNode, refType: ast.AbstractType): ast.Assignment | undefined {\r\n        let childAssignment: ast.Assignment | undefined = undefined;\r\n        const parentAssignment = getContainerOfType(node, ast.isAssignment);\r\n        // No parent assignment implies unassigned rule call\r\n        if (!parentAssignment) {\r\n            childAssignment = findNameAssignmentInternal(refType, refType, cache);\r\n        }\r\n        cache.set(type, childAssignment);\r\n        return childAssignment;\r\n    }\r\n\r\n    if (cache.has(type)) {\r\n        return cache.get(type);\r\n    }\r\n    cache.set(type, undefined);\r\n    for (const node of streamAllContents(startNode)) {\r\n        if (ast.isAssignment(node) && node.feature.toLowerCase() === 'name') {\r\n            cache.set(type, node);\r\n            return node;\r\n        } else if (ast.isRuleCall(node) && ast.isParserRule(node.rule.ref)) {\r\n            return go(node, node.rule.ref);\r\n        } else if (ast.isSimpleType(node) && node.typeRef?.ref) {\r\n            return go(node, node.typeRef.ref);\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport function getActionAtElement(element: ast.AbstractElement): ast.Action | undefined {\r\n    const parent = element.$container;\r\n    if (ast.isGroup(parent)) {\r\n        const elements = parent.elements;\r\n        const index = elements.indexOf(element);\r\n        for (let i = index - 1; i >= 0; i--) {\r\n            const item = elements[i];\r\n            if (ast.isAction(item)) {\r\n                return item;\r\n            } else {\r\n                const action = streamAllContents(elements[i]).find(ast.isAction);\r\n                if (action) {\r\n                    return action;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (ast.isAbstractElement(parent)) {\r\n        return getActionAtElement(parent);\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nexport type Cardinality = '?' | '*' | '+' | undefined;\r\nexport type Operator = '=' | '+=' | '?=' | undefined;\r\n\r\nexport function isOptionalCardinality(cardinality?: Cardinality, element?: ast.AbstractElement): boolean {\r\n    return cardinality === '?' || cardinality === '*' || (ast.isGroup(element) && Boolean(element.guardCondition));\r\n}\r\n\r\nexport function isArrayCardinality(cardinality?: Cardinality): boolean {\r\n    return cardinality === '*' || cardinality === '+';\r\n}\r\n\r\nexport function isArrayOperator(operator?: Operator): boolean {\r\n    return operator === '+=';\r\n}\r\n\r\n/**\r\n * Determines whether the given parser rule is a _data type rule_, meaning that it has a\r\n * primitive return type like `number`, `boolean`, etc.\r\n */\r\nexport function isDataTypeRule(rule: ast.ParserRule): boolean {\r\n    return isDataTypeRuleInternal(rule, new Set());\r\n}\r\n\r\nfunction isDataTypeRuleInternal(rule: ast.ParserRule, visited: Set<ast.ParserRule>): boolean {\r\n    if (visited.has(rule)) {\r\n        return true;\r\n    } else {\r\n        visited.add(rule);\r\n    }\r\n    for (const node of streamAllContents(rule)) {\r\n        if (ast.isRuleCall(node)) {\r\n            if (!node.rule.ref) {\r\n                // RuleCall to unresolved rule. Don't assume `rule` is a DataType rule.\r\n                return false;\r\n            }\r\n            if (ast.isParserRule(node.rule.ref) && !isDataTypeRuleInternal(node.rule.ref, visited)) {\r\n                return false;\r\n            }\r\n        } else if (ast.isAssignment(node)) {\r\n            return false;\r\n        } else if (ast.isAction(node)) {\r\n            return false;\r\n        }\r\n    }\r\n    return Boolean(rule.definition);\r\n}\r\n\r\nexport function isDataType(type: ast.Type): boolean {\r\n    return isDataTypeInternal(type.type, new Set());\r\n}\r\n\r\nfunction isDataTypeInternal(type: ast.TypeDefinition, visited: Set<ast.TypeDefinition>): boolean {\r\n    if (visited.has(type)) {\r\n        return true;\r\n    } else {\r\n        visited.add(type);\r\n    }\r\n    if (ast.isArrayType(type)) {\r\n        return false;\r\n    } else if (ast.isReferenceType(type)) {\r\n        return false;\r\n    } else if (ast.isUnionType(type)) {\r\n        return type.types.every(e => isDataTypeInternal(e, visited));\r\n    } else if (ast.isSimpleType(type)) {\r\n        if (type.primitiveType !== undefined) {\r\n            return true;\r\n        } else if (type.stringType !== undefined) {\r\n            return true;\r\n        } else if (type.typeRef !== undefined) {\r\n            const ref = type.typeRef.ref;\r\n            if (ast.isType(ref)) {\r\n                return isDataTypeInternal(ref.type, visited);\r\n            } else {\r\n                return false;\r\n            }\r\n        } else {\r\n            return false;\r\n        }\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nexport function getExplicitRuleType(rule: ast.ParserRule): string | undefined {\r\n    if (rule.inferredType) {\r\n        return rule.inferredType.name;\r\n    } else if (rule.dataType) {\r\n        return rule.dataType;\r\n    } else if (rule.returnType) {\r\n        const refType = rule.returnType.ref;\r\n        if (refType) {\r\n            // check if we need to check Action as return type\r\n            if (ast.isParserRule(refType)) {\r\n                return refType.name;\r\n            } else if (ast.isInterface(refType) || ast.isType(refType)) {\r\n                return refType.name;\r\n            }\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport function getTypeName(type: ast.AbstractType | ast.Action): string {\r\n    if (ast.isParserRule(type)) {\r\n        return isDataTypeRule(type) ? type.name : getExplicitRuleType(type) ?? type.name;\r\n    } else if (ast.isInterface(type) || ast.isType(type) || ast.isReturnType(type)) {\r\n        return type.name;\r\n    } else if (ast.isAction(type)) {\r\n        const actionType = getActionType(type);\r\n        if (actionType) {\r\n            return actionType;\r\n        }\r\n    } else if (ast.isInferredType(type)) {\r\n        return type.name;\r\n    }\r\n    throw new Error('Cannot get name of Unknown Type');\r\n}\r\n\r\nexport function getActionType(action: ast.Action): string | undefined {\r\n    if (action.inferredType) {\r\n        return action.inferredType.name;\r\n    } else if (action.type?.ref) {\r\n        return getTypeName(action.type.ref);\r\n    }\r\n    return undefined; // not inferring and not referencing a valid type\r\n}\r\n\r\n/**\r\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.\r\n * For data type rules, the name of the rule is returned,\r\n * e.g. \"INT_value returns number: MY_INT;\" returns \"INT_value\".\r\n * @param rule the given rule\r\n * @returns the name of the AST node type of the rule\r\n */\r\nexport function getRuleTypeName(rule: ast.AbstractRule): string {\r\n    if (ast.isTerminalRule(rule)) {\r\n        return rule.type?.name ?? 'string';\r\n    } else {\r\n        return isDataTypeRule(rule) ? rule.name : getExplicitRuleType(rule) ?? rule.name;\r\n    }\r\n}\r\n\r\n/**\r\n * This function is used at runtime to get the actual type of the values produced by the given rule at runtime.\r\n * For data type rules, the name of the declared return type of the rule is returned (if any),\r\n * e.g. \"INT_value returns number: MY_INT;\" returns \"number\".\r\n * @param rule the given rule\r\n * @returns the name of the type of the produced values of the rule at runtime\r\n */\r\nexport function getRuleType(rule: ast.AbstractRule): string {\r\n    if (ast.isTerminalRule(rule)) {\r\n        return rule.type?.name ?? 'string';\r\n    } else {\r\n        return getExplicitRuleType(rule) ?? rule.name;\r\n    }\r\n}\r\n\r\nexport function terminalRegex(terminalRule: ast.TerminalRule): RegExp {\r\n    const flags: Flags = {\r\n        s: false,\r\n        i: false,\r\n        u: false\r\n    };\r\n    const source = abstractElementToRegex(terminalRule.definition, flags);\r\n    const flagText = Object.entries(flags).filter(([, value]) => value).map(([name]) => name).join('');\r\n    return new RegExp(source, flagText);\r\n}\r\n\r\n// Using [\\s\\S]* allows to match everything, compared to . which doesn't match line terminators\r\nconst WILDCARD = /[\\s\\S]/.source;\r\n\r\ntype Flags = {\r\n    s: boolean;\r\n    i: boolean;\r\n    u: boolean;\r\n}\r\n\r\nfunction abstractElementToRegex(element: ast.AbstractElement, flags?: Flags): string {\r\n    if (ast.isTerminalAlternatives(element)) {\r\n        return terminalAlternativesToRegex(element);\r\n    } else if (ast.isTerminalGroup(element)) {\r\n        return terminalGroupToRegex(element);\r\n    } else if (ast.isCharacterRange(element)) {\r\n        return characterRangeToRegex(element);\r\n    } else if (ast.isTerminalRuleCall(element)) {\r\n        const rule = element.rule.ref;\r\n        if (!rule) {\r\n            throw new Error('Missing rule reference.');\r\n        }\r\n        return withCardinality(abstractElementToRegex(rule.definition), {\r\n            cardinality: element.cardinality,\r\n            lookahead: element.lookahead\r\n        });\r\n    } else if (ast.isNegatedToken(element)) {\r\n        return negateTokenToRegex(element);\r\n    } else if (ast.isUntilToken(element)) {\r\n        return untilTokenToRegex(element);\r\n    } else if (ast.isRegexToken(element)) {\r\n        const lastSlash = element.regex.lastIndexOf('/');\r\n        const source = element.regex.substring(1, lastSlash);\r\n        const regexFlags = element.regex.substring(lastSlash + 1);\r\n        if (flags) {\r\n            flags.i = regexFlags.includes('i');\r\n            flags.s = regexFlags.includes('s');\r\n            flags.u = regexFlags.includes('u');\r\n        }\r\n        return withCardinality(source, {\r\n            cardinality: element.cardinality,\r\n            lookahead: element.lookahead,\r\n            wrap: false\r\n        });\r\n    } else if (ast.isWildcard(element)) {\r\n        return withCardinality(WILDCARD, {\r\n            cardinality: element.cardinality,\r\n            lookahead: element.lookahead\r\n        });\r\n    } else {\r\n        throw new Error(`Invalid terminal element: ${element?.$type}`);\r\n    }\r\n}\r\n\r\nfunction terminalAlternativesToRegex(alternatives: ast.TerminalAlternatives): string {\r\n    return withCardinality(alternatives.elements.map(e => abstractElementToRegex(e)).join('|'), {\r\n        cardinality: alternatives.cardinality,\r\n        lookahead: alternatives.lookahead\r\n    });\r\n}\r\n\r\nfunction terminalGroupToRegex(group: ast.TerminalGroup): string {\r\n    return withCardinality(group.elements.map(e => abstractElementToRegex(e)).join(''), {\r\n        cardinality: group.cardinality,\r\n        lookahead: group.lookahead\r\n    });\r\n}\r\n\r\nfunction untilTokenToRegex(until: ast.UntilToken): string {\r\n    return withCardinality(`${WILDCARD}*?${abstractElementToRegex(until.terminal)}`, {\r\n        cardinality: until.cardinality,\r\n        lookahead: until.lookahead\r\n    });\r\n}\r\n\r\nfunction negateTokenToRegex(negate: ast.NegatedToken): string {\r\n    return withCardinality(`(?!${abstractElementToRegex(negate.terminal)})${WILDCARD}*?`, {\r\n        cardinality: negate.cardinality,\r\n        lookahead: negate.lookahead\r\n    });\r\n}\r\n\r\nfunction characterRangeToRegex(range: ast.CharacterRange): string {\r\n    if (range.right) {\r\n        return withCardinality(`[${keywordToRegex(range.left)}-${keywordToRegex(range.right)}]`, {\r\n            cardinality: range.cardinality,\r\n            lookahead: range.lookahead,\r\n            wrap: false\r\n        });\r\n    }\r\n    return withCardinality(keywordToRegex(range.left), {\r\n        cardinality: range.cardinality,\r\n        lookahead: range.lookahead,\r\n        wrap: false\r\n    });\r\n}\r\n\r\nfunction keywordToRegex(keyword: ast.Keyword): string {\r\n    return escapeRegExp(keyword.value);\r\n}\r\n\r\nfunction withCardinality(regex: string, options: {\r\n    cardinality?: string\r\n    wrap?: boolean\r\n    lookahead?: string\r\n}): string {\r\n    if (options.wrap !== false || options.lookahead) {\r\n        regex = `(${options.lookahead ?? ''}${regex})`;\r\n    }\r\n    if (options.cardinality) {\r\n        return `${regex}${options.cardinality}`;\r\n    }\r\n    return regex;\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CstNode } from '../syntax-tree.js';\r\n\r\nexport class ErrorWithLocation extends Error {\r\n    constructor(node: CstNode | undefined, message: string) {\r\n        super(node ? `${message} at ${node.range.start.line}:${node.range.start.character}` : message);\r\n    }\r\n}\r\n\r\nexport function assertUnreachable(_: never): never {\r\n    throw new Error('Error! The input value was not handled.');\r\n}\r\n","/******************************************************************************\r\n * This file was generated by langium-cli 3.3.0.\r\n * DO NOT EDIT MANUALLY!\r\n ******************************************************************************/\r\n\r\n/* eslint-disable */\r\nimport type { AstNode, Reference, ReferenceInfo, TypeMetaData } from '../../syntax-tree.js';\r\nimport { AbstractAstReflection } from '../../syntax-tree.js';\r\n\r\nexport const LangiumGrammarTerminals = {\r\n    ID: /\\^?[_a-zA-Z][\\w_]*/,\r\n    STRING: /\"(\\\\.|[^\"\\\\])*\"|'(\\\\.|[^'\\\\])*'/,\r\n    NUMBER: /NaN|-?((\\d*\\.\\d+|\\d+)([Ee][+-]?\\d+)?|Infinity)/,\r\n    RegexLiteral: /\\/(?![*+?])(?:[^\\r\\n\\[/\\\\]|\\\\.|\\[(?:[^\\r\\n\\]\\\\]|\\\\.)*\\])+\\/[a-z]*/,\r\n    WS: /\\s+/,\r\n    ML_COMMENT: /\\/\\*[\\s\\S]*?\\*\\//,\r\n    SL_COMMENT: /\\/\\/[^\\n\\r]*/,\r\n};\r\n\r\nexport type LangiumGrammarTerminalNames = keyof typeof LangiumGrammarTerminals;\r\n\r\nexport type LangiumGrammarKeywordNames = \r\n    | \"!\"\r\n    | \"&\"\r\n    | \"(\"\r\n    | \")\"\r\n    | \"*\"\r\n    | \"+\"\r\n    | \"+=\"\r\n    | \",\"\r\n    | \"->\"\r\n    | \".\"\r\n    | \"..\"\r\n    | \":\"\r\n    | \";\"\r\n    | \"<\"\r\n    | \"=\"\r\n    | \"=>\"\r\n    | \">\"\r\n    | \"?\"\r\n    | \"?!\"\r\n    | \"?<!\"\r\n    | \"?<=\"\r\n    | \"?=\"\r\n    | \"@\"\r\n    | \"Date\"\r\n    | \"EOF\"\r\n    | \"[\"\r\n    | \"]\"\r\n    | \"bigint\"\r\n    | \"boolean\"\r\n    | \"current\"\r\n    | \"entry\"\r\n    | \"extends\"\r\n    | \"false\"\r\n    | \"fragment\"\r\n    | \"grammar\"\r\n    | \"hidden\"\r\n    | \"import\"\r\n    | \"infer\"\r\n    | \"infers\"\r\n    | \"interface\"\r\n    | \"number\"\r\n    | \"returns\"\r\n    | \"string\"\r\n    | \"terminal\"\r\n    | \"true\"\r\n    | \"type\"\r\n    | \"with\"\r\n    | \"{\"\r\n    | \"|\"\r\n    | \"}\";\r\n\r\nexport type LangiumGrammarTokenNames = LangiumGrammarTerminalNames | LangiumGrammarKeywordNames;\r\n\r\nexport type AbstractRule = ParserRule | TerminalRule;\r\n\r\nexport const AbstractRule = 'AbstractRule';\r\n\r\nexport function isAbstractRule(item: unknown): item is AbstractRule {\r\n    return reflection.isInstance(item, AbstractRule);\r\n}\r\n\r\nexport type AbstractType = InferredType | Interface | ParserRule | Type;\r\n\r\nexport const AbstractType = 'AbstractType';\r\n\r\nexport function isAbstractType(item: unknown): item is AbstractType {\r\n    return reflection.isInstance(item, AbstractType);\r\n}\r\n\r\nexport type Condition = BooleanLiteral | Conjunction | Disjunction | Negation | ParameterReference;\r\n\r\nexport const Condition = 'Condition';\r\n\r\nexport function isCondition(item: unknown): item is Condition {\r\n    return reflection.isInstance(item, Condition);\r\n}\r\n\r\nexport type FeatureName = 'current' | 'entry' | 'extends' | 'false' | 'fragment' | 'grammar' | 'hidden' | 'import' | 'infer' | 'infers' | 'interface' | 'returns' | 'terminal' | 'true' | 'type' | 'with' | PrimitiveType | string;\r\n\r\nexport function isFeatureName(item: unknown): item is FeatureName {\r\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)));\r\n}\r\n\r\nexport type PrimitiveType = 'Date' | 'bigint' | 'boolean' | 'number' | 'string';\r\n\r\nexport function isPrimitiveType(item: unknown): item is PrimitiveType {\r\n    return item === 'string' || item === 'number' || item === 'boolean' || item === 'Date' || item === 'bigint';\r\n}\r\n\r\nexport type TypeDefinition = ArrayType | ReferenceType | SimpleType | UnionType;\r\n\r\nexport const TypeDefinition = 'TypeDefinition';\r\n\r\nexport function isTypeDefinition(item: unknown): item is TypeDefinition {\r\n    return reflection.isInstance(item, TypeDefinition);\r\n}\r\n\r\nexport type ValueLiteral = ArrayLiteral | BooleanLiteral | NumberLiteral | StringLiteral;\r\n\r\nexport const ValueLiteral = 'ValueLiteral';\r\n\r\nexport function isValueLiteral(item: unknown): item is ValueLiteral {\r\n    return reflection.isInstance(item, ValueLiteral);\r\n}\r\n\r\nexport interface AbstractElement extends AstNode {\r\n    readonly $type: 'AbstractElement' | 'Action' | 'Alternatives' | 'Assignment' | 'CharacterRange' | 'CrossReference' | 'EndOfFile' | 'Group' | 'Keyword' | 'NegatedToken' | 'RegexToken' | 'RuleCall' | 'TerminalAlternatives' | 'TerminalGroup' | 'TerminalRuleCall' | 'UnorderedGroup' | 'UntilToken' | 'Wildcard';\r\n    cardinality?: '*' | '+' | '?';\r\n    lookahead?: '?!' | '?<!' | '?<=' | '?=';\r\n}\r\n\r\nexport const AbstractElement = 'AbstractElement';\r\n\r\nexport function isAbstractElement(item: unknown): item is AbstractElement {\r\n    return reflection.isInstance(item, AbstractElement);\r\n}\r\n\r\nexport interface ArrayLiteral extends AstNode {\r\n    readonly $container: ArrayLiteral | TypeAttribute;\r\n    readonly $type: 'ArrayLiteral';\r\n    elements: Array<ValueLiteral>;\r\n}\r\n\r\nexport const ArrayLiteral = 'ArrayLiteral';\r\n\r\nexport function isArrayLiteral(item: unknown): item is ArrayLiteral {\r\n    return reflection.isInstance(item, ArrayLiteral);\r\n}\r\n\r\nexport interface ArrayType extends AstNode {\r\n    readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType;\r\n    readonly $type: 'ArrayType';\r\n    elementType: TypeDefinition;\r\n}\r\n\r\nexport const ArrayType = 'ArrayType';\r\n\r\nexport function isArrayType(item: unknown): item is ArrayType {\r\n    return reflection.isInstance(item, ArrayType);\r\n}\r\n\r\nexport interface BooleanLiteral extends AstNode {\r\n    readonly $container: ArrayLiteral | Conjunction | Disjunction | Group | NamedArgument | Negation | TypeAttribute;\r\n    readonly $type: 'BooleanLiteral';\r\n    true: boolean;\r\n}\r\n\r\nexport const BooleanLiteral = 'BooleanLiteral';\r\n\r\nexport function isBooleanLiteral(item: unknown): item is BooleanLiteral {\r\n    return reflection.isInstance(item, BooleanLiteral);\r\n}\r\n\r\nexport interface Conjunction extends AstNode {\r\n    readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation;\r\n    readonly $type: 'Conjunction';\r\n    left: Condition;\r\n    right: Condition;\r\n}\r\n\r\nexport const Conjunction = 'Conjunction';\r\n\r\nexport function isConjunction(item: unknown): item is Conjunction {\r\n    return reflection.isInstance(item, Conjunction);\r\n}\r\n\r\nexport interface Disjunction extends AstNode {\r\n    readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation;\r\n    readonly $type: 'Disjunction';\r\n    left: Condition;\r\n    right: Condition;\r\n}\r\n\r\nexport const Disjunction = 'Disjunction';\r\n\r\nexport function isDisjunction(item: unknown): item is Disjunction {\r\n    return reflection.isInstance(item, Disjunction);\r\n}\r\n\r\nexport interface Grammar extends AstNode {\r\n    readonly $type: 'Grammar';\r\n    definesHiddenTokens: boolean;\r\n    hiddenTokens: Array<Reference<AbstractRule>>;\r\n    imports: Array<GrammarImport>;\r\n    interfaces: Array<Interface>;\r\n    isDeclared: boolean;\r\n    name?: string;\r\n    rules: Array<AbstractRule>;\r\n    types: Array<Type>;\r\n    usedGrammars: Array<Reference<Grammar>>;\r\n}\r\n\r\nexport const Grammar = 'Grammar';\r\n\r\nexport function isGrammar(item: unknown): item is Grammar {\r\n    return reflection.isInstance(item, Grammar);\r\n}\r\n\r\nexport interface GrammarImport extends AstNode {\r\n    readonly $container: Grammar;\r\n    readonly $type: 'GrammarImport';\r\n    path: string;\r\n}\r\n\r\nexport const GrammarImport = 'GrammarImport';\r\n\r\nexport function isGrammarImport(item: unknown): item is GrammarImport {\r\n    return reflection.isInstance(item, GrammarImport);\r\n}\r\n\r\nexport interface InferredType extends AstNode {\r\n    readonly $container: Action | ParserRule;\r\n    readonly $type: 'InferredType';\r\n    name: string;\r\n}\r\n\r\nexport const InferredType = 'InferredType';\r\n\r\nexport function isInferredType(item: unknown): item is InferredType {\r\n    return reflection.isInstance(item, InferredType);\r\n}\r\n\r\nexport interface Interface extends AstNode {\r\n    readonly $container: Grammar;\r\n    readonly $type: 'Interface';\r\n    attributes: Array<TypeAttribute>;\r\n    name: string;\r\n    superTypes: Array<Reference<AbstractType>>;\r\n}\r\n\r\nexport const Interface = 'Interface';\r\n\r\nexport function isInterface(item: unknown): item is Interface {\r\n    return reflection.isInstance(item, Interface);\r\n}\r\n\r\nexport interface NamedArgument extends AstNode {\r\n    readonly $container: RuleCall;\r\n    readonly $type: 'NamedArgument';\r\n    calledByName: boolean;\r\n    parameter?: Reference<Parameter>;\r\n    value: Condition;\r\n}\r\n\r\nexport const NamedArgument = 'NamedArgument';\r\n\r\nexport function isNamedArgument(item: unknown): item is NamedArgument {\r\n    return reflection.isInstance(item, NamedArgument);\r\n}\r\n\r\nexport interface Negation extends AstNode {\r\n    readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation;\r\n    readonly $type: 'Negation';\r\n    value: Condition;\r\n}\r\n\r\nexport const Negation = 'Negation';\r\n\r\nexport function isNegation(item: unknown): item is Negation {\r\n    return reflection.isInstance(item, Negation);\r\n}\r\n\r\nexport interface NumberLiteral extends AstNode {\r\n    readonly $container: ArrayLiteral | TypeAttribute;\r\n    readonly $type: 'NumberLiteral';\r\n    value: number;\r\n}\r\n\r\nexport const NumberLiteral = 'NumberLiteral';\r\n\r\nexport function isNumberLiteral(item: unknown): item is NumberLiteral {\r\n    return reflection.isInstance(item, NumberLiteral);\r\n}\r\n\r\nexport interface Parameter extends AstNode {\r\n    readonly $container: ParserRule;\r\n    readonly $type: 'Parameter';\r\n    name: string;\r\n}\r\n\r\nexport const Parameter = 'Parameter';\r\n\r\nexport function isParameter(item: unknown): item is Parameter {\r\n    return reflection.isInstance(item, Parameter);\r\n}\r\n\r\nexport interface ParameterReference extends AstNode {\r\n    readonly $container: Conjunction | Disjunction | Group | NamedArgument | Negation;\r\n    readonly $type: 'ParameterReference';\r\n    parameter: Reference<Parameter>;\r\n}\r\n\r\nexport const ParameterReference = 'ParameterReference';\r\n\r\nexport function isParameterReference(item: unknown): item is ParameterReference {\r\n    return reflection.isInstance(item, ParameterReference);\r\n}\r\n\r\nexport interface ParserRule extends AstNode {\r\n    readonly $container: Grammar;\r\n    readonly $type: 'ParserRule';\r\n    dataType?: PrimitiveType;\r\n    definesHiddenTokens: boolean;\r\n    definition: AbstractElement;\r\n    entry: boolean;\r\n    fragment: boolean;\r\n    hiddenTokens: Array<Reference<AbstractRule>>;\r\n    inferredType?: InferredType;\r\n    name: string;\r\n    parameters: Array<Parameter>;\r\n    returnType?: Reference<AbstractType>;\r\n    wildcard: boolean;\r\n}\r\n\r\nexport const ParserRule = 'ParserRule';\r\n\r\nexport function isParserRule(item: unknown): item is ParserRule {\r\n    return reflection.isInstance(item, ParserRule);\r\n}\r\n\r\nexport interface ReferenceType extends AstNode {\r\n    readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType;\r\n    readonly $type: 'ReferenceType';\r\n    referenceType: TypeDefinition;\r\n}\r\n\r\nexport const ReferenceType = 'ReferenceType';\r\n\r\nexport function isReferenceType(item: unknown): item is ReferenceType {\r\n    return reflection.isInstance(item, ReferenceType);\r\n}\r\n\r\nexport interface ReturnType extends AstNode {\r\n    readonly $container: TerminalRule;\r\n    readonly $type: 'ReturnType';\r\n    name: PrimitiveType | string;\r\n}\r\n\r\nexport const ReturnType = 'ReturnType';\r\n\r\nexport function isReturnType(item: unknown): item is ReturnType {\r\n    return reflection.isInstance(item, ReturnType);\r\n}\r\n\r\nexport interface SimpleType extends AstNode {\r\n    readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType;\r\n    readonly $type: 'SimpleType';\r\n    primitiveType?: PrimitiveType;\r\n    stringType?: string;\r\n    typeRef?: Reference<AbstractType>;\r\n}\r\n\r\nexport const SimpleType = 'SimpleType';\r\n\r\nexport function isSimpleType(item: unknown): item is SimpleType {\r\n    return reflection.isInstance(item, SimpleType);\r\n}\r\n\r\nexport interface StringLiteral extends AstNode {\r\n    readonly $container: ArrayLiteral | TypeAttribute;\r\n    readonly $type: 'StringLiteral';\r\n    value: string;\r\n}\r\n\r\nexport const StringLiteral = 'StringLiteral';\r\n\r\nexport function isStringLiteral(item: unknown): item is StringLiteral {\r\n    return reflection.isInstance(item, StringLiteral);\r\n}\r\n\r\nexport interface TerminalRule extends AstNode {\r\n    readonly $container: Grammar;\r\n    readonly $type: 'TerminalRule';\r\n    definition: AbstractElement;\r\n    fragment: boolean;\r\n    hidden: boolean;\r\n    name: string;\r\n    type?: ReturnType;\r\n}\r\n\r\nexport const TerminalRule = 'TerminalRule';\r\n\r\nexport function isTerminalRule(item: unknown): item is TerminalRule {\r\n    return reflection.isInstance(item, TerminalRule);\r\n}\r\n\r\nexport interface Type extends AstNode {\r\n    readonly $container: Grammar;\r\n    readonly $type: 'Type';\r\n    name: string;\r\n    type: TypeDefinition;\r\n}\r\n\r\nexport const Type = 'Type';\r\n\r\nexport function isType(item: unknown): item is Type {\r\n    return reflection.isInstance(item, Type);\r\n}\r\n\r\nexport interface TypeAttribute extends AstNode {\r\n    readonly $container: Interface;\r\n    readonly $type: 'TypeAttribute';\r\n    defaultValue?: ValueLiteral;\r\n    isOptional: boolean;\r\n    name: FeatureName;\r\n    type: TypeDefinition;\r\n}\r\n\r\nexport const TypeAttribute = 'TypeAttribute';\r\n\r\nexport function isTypeAttribute(item: unknown): item is TypeAttribute {\r\n    return reflection.isInstance(item, TypeAttribute);\r\n}\r\n\r\nexport interface UnionType extends AstNode {\r\n    readonly $container: ArrayType | ReferenceType | Type | TypeAttribute | UnionType;\r\n    readonly $type: 'UnionType';\r\n    types: Array<TypeDefinition>;\r\n}\r\n\r\nexport const UnionType = 'UnionType';\r\n\r\nexport function isUnionType(item: unknown): item is UnionType {\r\n    return reflection.isInstance(item, UnionType);\r\n}\r\n\r\nexport interface Action extends AbstractElement {\r\n    readonly $type: 'Action';\r\n    feature?: FeatureName;\r\n    inferredType?: InferredType;\r\n    operator?: '+=' | '=';\r\n    type?: Reference<AbstractType>;\r\n}\r\n\r\nexport const Action = 'Action';\r\n\r\nexport function isAction(item: unknown): item is Action {\r\n    return reflection.isInstance(item, Action);\r\n}\r\n\r\nexport interface Alternatives extends AbstractElement {\r\n    readonly $type: 'Alternatives';\r\n    elements: Array<AbstractElement>;\r\n}\r\n\r\nexport const Alternatives = 'Alternatives';\r\n\r\nexport function isAlternatives(item: unknown): item is Alternatives {\r\n    return reflection.isInstance(item, Alternatives);\r\n}\r\n\r\nexport interface Assignment extends AbstractElement {\r\n    readonly $type: 'Assignment';\r\n    feature: FeatureName;\r\n    operator: '+=' | '=' | '?=';\r\n    terminal: AbstractElement;\r\n}\r\n\r\nexport const Assignment = 'Assignment';\r\n\r\nexport function isAssignment(item: unknown): item is Assignment {\r\n    return reflection.isInstance(item, Assignment);\r\n}\r\n\r\nexport interface CharacterRange extends AbstractElement {\r\n    readonly $type: 'CharacterRange';\r\n    left: Keyword;\r\n    right?: Keyword;\r\n}\r\n\r\nexport const CharacterRange = 'CharacterRange';\r\n\r\nexport function isCharacterRange(item: unknown): item is CharacterRange {\r\n    return reflection.isInstance(item, CharacterRange);\r\n}\r\n\r\nexport interface CrossReference extends AbstractElement {\r\n    readonly $type: 'CrossReference';\r\n    deprecatedSyntax: boolean;\r\n    terminal?: AbstractElement;\r\n    type: Reference<AbstractType>;\r\n}\r\n\r\nexport const CrossReference = 'CrossReference';\r\n\r\nexport function isCrossReference(item: unknown): item is CrossReference {\r\n    return reflection.isInstance(item, CrossReference);\r\n}\r\n\r\nexport interface EndOfFile extends AbstractElement {\r\n    readonly $type: 'EndOfFile';\r\n}\r\n\r\nexport const EndOfFile = 'EndOfFile';\r\n\r\nexport function isEndOfFile(item: unknown): item is EndOfFile {\r\n    return reflection.isInstance(item, EndOfFile);\r\n}\r\n\r\nexport interface Group extends AbstractElement {\r\n    readonly $type: 'Group';\r\n    elements: Array<AbstractElement>;\r\n    guardCondition?: Condition;\r\n}\r\n\r\nexport const Group = 'Group';\r\n\r\nexport function isGroup(item: unknown): item is Group {\r\n    return reflection.isInstance(item, Group);\r\n}\r\n\r\nexport interface Keyword extends AbstractElement {\r\n    readonly $container: CharacterRange;\r\n    readonly $type: 'Keyword';\r\n    value: string;\r\n}\r\n\r\nexport const Keyword = 'Keyword';\r\n\r\nexport function isKeyword(item: unknown): item is Keyword {\r\n    return reflection.isInstance(item, Keyword);\r\n}\r\n\r\nexport interface NegatedToken extends AbstractElement {\r\n    readonly $type: 'NegatedToken';\r\n    terminal: AbstractElement;\r\n}\r\n\r\nexport const NegatedToken = 'NegatedToken';\r\n\r\nexport function isNegatedToken(item: unknown): item is NegatedToken {\r\n    return reflection.isInstance(item, NegatedToken);\r\n}\r\n\r\nexport interface RegexToken extends AbstractElement {\r\n    readonly $type: 'RegexToken';\r\n    regex: string;\r\n}\r\n\r\nexport const RegexToken = 'RegexToken';\r\n\r\nexport function isRegexToken(item: unknown): item is RegexToken {\r\n    return reflection.isInstance(item, RegexToken);\r\n}\r\n\r\nexport interface RuleCall extends AbstractElement {\r\n    readonly $type: 'RuleCall';\r\n    arguments: Array<NamedArgument>;\r\n    rule: Reference<AbstractRule>;\r\n}\r\n\r\nexport const RuleCall = 'RuleCall';\r\n\r\nexport function isRuleCall(item: unknown): item is RuleCall {\r\n    return reflection.isInstance(item, RuleCall);\r\n}\r\n\r\nexport interface TerminalAlternatives extends AbstractElement {\r\n    readonly $type: 'TerminalAlternatives';\r\n    elements: Array<AbstractElement>;\r\n}\r\n\r\nexport const TerminalAlternatives = 'TerminalAlternatives';\r\n\r\nexport function isTerminalAlternatives(item: unknown): item is TerminalAlternatives {\r\n    return reflection.isInstance(item, TerminalAlternatives);\r\n}\r\n\r\nexport interface TerminalGroup extends AbstractElement {\r\n    readonly $type: 'TerminalGroup';\r\n    elements: Array<AbstractElement>;\r\n}\r\n\r\nexport const TerminalGroup = 'TerminalGroup';\r\n\r\nexport function isTerminalGroup(item: unknown): item is TerminalGroup {\r\n    return reflection.isInstance(item, TerminalGroup);\r\n}\r\n\r\nexport interface TerminalRuleCall extends AbstractElement {\r\n    readonly $type: 'TerminalRuleCall';\r\n    rule: Reference<TerminalRule>;\r\n}\r\n\r\nexport const TerminalRuleCall = 'TerminalRuleCall';\r\n\r\nexport function isTerminalRuleCall(item: unknown): item is TerminalRuleCall {\r\n    return reflection.isInstance(item, TerminalRuleCall);\r\n}\r\n\r\nexport interface UnorderedGroup extends AbstractElement {\r\n    readonly $type: 'UnorderedGroup';\r\n    elements: Array<AbstractElement>;\r\n}\r\n\r\nexport const UnorderedGroup = 'UnorderedGroup';\r\n\r\nexport function isUnorderedGroup(item: unknown): item is UnorderedGroup {\r\n    return reflection.isInstance(item, UnorderedGroup);\r\n}\r\n\r\nexport interface UntilToken extends AbstractElement {\r\n    readonly $type: 'UntilToken';\r\n    terminal: AbstractElement;\r\n}\r\n\r\nexport const UntilToken = 'UntilToken';\r\n\r\nexport function isUntilToken(item: unknown): item is UntilToken {\r\n    return reflection.isInstance(item, UntilToken);\r\n}\r\n\r\nexport interface Wildcard extends AbstractElement {\r\n    readonly $type: 'Wildcard';\r\n}\r\n\r\nexport const Wildcard = 'Wildcard';\r\n\r\nexport function isWildcard(item: unknown): item is Wildcard {\r\n    return reflection.isInstance(item, Wildcard);\r\n}\r\n\r\nexport type LangiumGrammarAstType = {\r\n    AbstractElement: AbstractElement\r\n    AbstractRule: AbstractRule\r\n    AbstractType: AbstractType\r\n    Action: Action\r\n    Alternatives: Alternatives\r\n    ArrayLiteral: ArrayLiteral\r\n    ArrayType: ArrayType\r\n    Assignment: Assignment\r\n    BooleanLiteral: BooleanLiteral\r\n    CharacterRange: CharacterRange\r\n    Condition: Condition\r\n    Conjunction: Conjunction\r\n    CrossReference: CrossReference\r\n    Disjunction: Disjunction\r\n    EndOfFile: EndOfFile\r\n    Grammar: Grammar\r\n    GrammarImport: GrammarImport\r\n    Group: Group\r\n    InferredType: InferredType\r\n    Interface: Interface\r\n    Keyword: Keyword\r\n    NamedArgument: NamedArgument\r\n    NegatedToken: NegatedToken\r\n    Negation: Negation\r\n    NumberLiteral: NumberLiteral\r\n    Parameter: Parameter\r\n    ParameterReference: ParameterReference\r\n    ParserRule: ParserRule\r\n    ReferenceType: ReferenceType\r\n    RegexToken: RegexToken\r\n    ReturnType: ReturnType\r\n    RuleCall: RuleCall\r\n    SimpleType: SimpleType\r\n    StringLiteral: StringLiteral\r\n    TerminalAlternatives: TerminalAlternatives\r\n    TerminalGroup: TerminalGroup\r\n    TerminalRule: TerminalRule\r\n    TerminalRuleCall: TerminalRuleCall\r\n    Type: Type\r\n    TypeAttribute: TypeAttribute\r\n    TypeDefinition: TypeDefinition\r\n    UnionType: UnionType\r\n    UnorderedGroup: UnorderedGroup\r\n    UntilToken: UntilToken\r\n    ValueLiteral: ValueLiteral\r\n    Wildcard: Wildcard\r\n}\r\n\r\nexport class LangiumGrammarAstReflection extends AbstractAstReflection {\r\n\r\n    getAllTypes(): string[] {\r\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];\r\n    }\r\n\r\n    protected override computeIsSubtype(subtype: string, supertype: string): boolean {\r\n        switch (subtype) {\r\n            case Action:\r\n            case Alternatives:\r\n            case Assignment:\r\n            case CharacterRange:\r\n            case CrossReference:\r\n            case EndOfFile:\r\n            case Group:\r\n            case Keyword:\r\n            case NegatedToken:\r\n            case RegexToken:\r\n            case RuleCall:\r\n            case TerminalAlternatives:\r\n            case TerminalGroup:\r\n            case TerminalRuleCall:\r\n            case UnorderedGroup:\r\n            case UntilToken:\r\n            case Wildcard: {\r\n                return this.isSubtype(AbstractElement, supertype);\r\n            }\r\n            case ArrayLiteral:\r\n            case NumberLiteral:\r\n            case StringLiteral: {\r\n                return this.isSubtype(ValueLiteral, supertype);\r\n            }\r\n            case ArrayType:\r\n            case ReferenceType:\r\n            case SimpleType:\r\n            case UnionType: {\r\n                return this.isSubtype(TypeDefinition, supertype);\r\n            }\r\n            case BooleanLiteral: {\r\n                return this.isSubtype(Condition, supertype) || this.isSubtype(ValueLiteral, supertype);\r\n            }\r\n            case Conjunction:\r\n            case Disjunction:\r\n            case Negation:\r\n            case ParameterReference: {\r\n                return this.isSubtype(Condition, supertype);\r\n            }\r\n            case InferredType:\r\n            case Interface:\r\n            case Type: {\r\n                return this.isSubtype(AbstractType, supertype);\r\n            }\r\n            case ParserRule: {\r\n                return this.isSubtype(AbstractRule, supertype) || this.isSubtype(AbstractType, supertype);\r\n            }\r\n            case TerminalRule: {\r\n                return this.isSubtype(AbstractRule, supertype);\r\n            }\r\n            default: {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    getReferenceType(refInfo: ReferenceInfo): string {\r\n        const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\r\n        switch (referenceId) {\r\n            case 'Action:type':\r\n            case 'CrossReference:type':\r\n            case 'Interface:superTypes':\r\n            case 'ParserRule:returnType':\r\n            case 'SimpleType:typeRef': {\r\n                return AbstractType;\r\n            }\r\n            case 'Grammar:hiddenTokens':\r\n            case 'ParserRule:hiddenTokens':\r\n            case 'RuleCall:rule': {\r\n                return AbstractRule;\r\n            }\r\n            case 'Grammar:usedGrammars': {\r\n                return Grammar;\r\n            }\r\n            case 'NamedArgument:parameter':\r\n            case 'ParameterReference:parameter': {\r\n                return Parameter;\r\n            }\r\n            case 'TerminalRuleCall:rule': {\r\n                return TerminalRule;\r\n            }\r\n            default: {\r\n                throw new Error(`${referenceId} is not a valid reference id.`);\r\n            }\r\n        }\r\n    }\r\n\r\n    getTypeMetaData(type: string): TypeMetaData {\r\n        switch (type) {\r\n            case AbstractElement: {\r\n                return {\r\n                    name: AbstractElement,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case ArrayLiteral: {\r\n                return {\r\n                    name: ArrayLiteral,\r\n                    properties: [\r\n                        { name: 'elements', defaultValue: [] }\r\n                    ]\r\n                };\r\n            }\r\n            case ArrayType: {\r\n                return {\r\n                    name: ArrayType,\r\n                    properties: [\r\n                        { name: 'elementType' }\r\n                    ]\r\n                };\r\n            }\r\n            case BooleanLiteral: {\r\n                return {\r\n                    name: BooleanLiteral,\r\n                    properties: [\r\n                        { name: 'true', defaultValue: false }\r\n                    ]\r\n                };\r\n            }\r\n            case Conjunction: {\r\n                return {\r\n                    name: Conjunction,\r\n                    properties: [\r\n                        { name: 'left' },\r\n                        { name: 'right' }\r\n                    ]\r\n                };\r\n            }\r\n            case Disjunction: {\r\n                return {\r\n                    name: Disjunction,\r\n                    properties: [\r\n                        { name: 'left' },\r\n                        { name: 'right' }\r\n                    ]\r\n                };\r\n            }\r\n            case Grammar: {\r\n                return {\r\n                    name: Grammar,\r\n                    properties: [\r\n                        { name: 'definesHiddenTokens', defaultValue: false },\r\n                        { name: 'hiddenTokens', defaultValue: [] },\r\n                        { name: 'imports', defaultValue: [] },\r\n                        { name: 'interfaces', defaultValue: [] },\r\n                        { name: 'isDeclared', defaultValue: false },\r\n                        { name: 'name' },\r\n                        { name: 'rules', defaultValue: [] },\r\n                        { name: 'types', defaultValue: [] },\r\n                        { name: 'usedGrammars', defaultValue: [] }\r\n                    ]\r\n                };\r\n            }\r\n            case GrammarImport: {\r\n                return {\r\n                    name: GrammarImport,\r\n                    properties: [\r\n                        { name: 'path' }\r\n                    ]\r\n                };\r\n            }\r\n            case InferredType: {\r\n                return {\r\n                    name: InferredType,\r\n                    properties: [\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case Interface: {\r\n                return {\r\n                    name: Interface,\r\n                    properties: [\r\n                        { name: 'attributes', defaultValue: [] },\r\n                        { name: 'name' },\r\n                        { name: 'superTypes', defaultValue: [] }\r\n                    ]\r\n                };\r\n            }\r\n            case NamedArgument: {\r\n                return {\r\n                    name: NamedArgument,\r\n                    properties: [\r\n                        { name: 'calledByName', defaultValue: false },\r\n                        { name: 'parameter' },\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case Negation: {\r\n                return {\r\n                    name: Negation,\r\n                    properties: [\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case NumberLiteral: {\r\n                return {\r\n                    name: NumberLiteral,\r\n                    properties: [\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case Parameter: {\r\n                return {\r\n                    name: Parameter,\r\n                    properties: [\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case ParameterReference: {\r\n                return {\r\n                    name: ParameterReference,\r\n                    properties: [\r\n                        { name: 'parameter' }\r\n                    ]\r\n                };\r\n            }\r\n            case ParserRule: {\r\n                return {\r\n                    name: ParserRule,\r\n                    properties: [\r\n                        { name: 'dataType' },\r\n                        { name: 'definesHiddenTokens', defaultValue: false },\r\n                        { name: 'definition' },\r\n                        { name: 'entry', defaultValue: false },\r\n                        { name: 'fragment', defaultValue: false },\r\n                        { name: 'hiddenTokens', defaultValue: [] },\r\n                        { name: 'inferredType' },\r\n                        { name: 'name' },\r\n                        { name: 'parameters', defaultValue: [] },\r\n                        { name: 'returnType' },\r\n                        { name: 'wildcard', defaultValue: false }\r\n                    ]\r\n                };\r\n            }\r\n            case ReferenceType: {\r\n                return {\r\n                    name: ReferenceType,\r\n                    properties: [\r\n                        { name: 'referenceType' }\r\n                    ]\r\n                };\r\n            }\r\n            case ReturnType: {\r\n                return {\r\n                    name: ReturnType,\r\n                    properties: [\r\n                        { name: 'name' }\r\n                    ]\r\n                };\r\n            }\r\n            case SimpleType: {\r\n                return {\r\n                    name: SimpleType,\r\n                    properties: [\r\n                        { name: 'primitiveType' },\r\n                        { name: 'stringType' },\r\n                        { name: 'typeRef' }\r\n                    ]\r\n                };\r\n            }\r\n            case StringLiteral: {\r\n                return {\r\n                    name: StringLiteral,\r\n                    properties: [\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case TerminalRule: {\r\n                return {\r\n                    name: TerminalRule,\r\n                    properties: [\r\n                        { name: 'definition' },\r\n                        { name: 'fragment', defaultValue: false },\r\n                        { name: 'hidden', defaultValue: false },\r\n                        { name: 'name' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case Type: {\r\n                return {\r\n                    name: Type,\r\n                    properties: [\r\n                        { name: 'name' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case TypeAttribute: {\r\n                return {\r\n                    name: TypeAttribute,\r\n                    properties: [\r\n                        { name: 'defaultValue' },\r\n                        { name: 'isOptional', defaultValue: false },\r\n                        { name: 'name' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case UnionType: {\r\n                return {\r\n                    name: UnionType,\r\n                    properties: [\r\n                        { name: 'types', defaultValue: [] }\r\n                    ]\r\n                };\r\n            }\r\n            case Action: {\r\n                return {\r\n                    name: Action,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'feature' },\r\n                        { name: 'inferredType' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'operator' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case Alternatives: {\r\n                return {\r\n                    name: Alternatives,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'elements', defaultValue: [] },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case Assignment: {\r\n                return {\r\n                    name: Assignment,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'feature' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'operator' },\r\n                        { name: 'terminal' }\r\n                    ]\r\n                };\r\n            }\r\n            case CharacterRange: {\r\n                return {\r\n                    name: CharacterRange,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'left' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'right' }\r\n                    ]\r\n                };\r\n            }\r\n            case CrossReference: {\r\n                return {\r\n                    name: CrossReference,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'deprecatedSyntax', defaultValue: false },\r\n                        { name: 'lookahead' },\r\n                        { name: 'terminal' },\r\n                        { name: 'type' }\r\n                    ]\r\n                };\r\n            }\r\n            case EndOfFile: {\r\n                return {\r\n                    name: EndOfFile,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case Group: {\r\n                return {\r\n                    name: Group,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'elements', defaultValue: [] },\r\n                        { name: 'guardCondition' },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case Keyword: {\r\n                return {\r\n                    name: Keyword,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'value' }\r\n                    ]\r\n                };\r\n            }\r\n            case NegatedToken: {\r\n                return {\r\n                    name: NegatedToken,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'terminal' }\r\n                    ]\r\n                };\r\n            }\r\n            case RegexToken: {\r\n                return {\r\n                    name: RegexToken,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'regex' }\r\n                    ]\r\n                };\r\n            }\r\n            case RuleCall: {\r\n                return {\r\n                    name: RuleCall,\r\n                    properties: [\r\n                        { name: 'arguments', defaultValue: [] },\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'rule' }\r\n                    ]\r\n                };\r\n            }\r\n            case TerminalAlternatives: {\r\n                return {\r\n                    name: TerminalAlternatives,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'elements', defaultValue: [] },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case TerminalGroup: {\r\n                return {\r\n                    name: TerminalGroup,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'elements', defaultValue: [] },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case TerminalRuleCall: {\r\n                return {\r\n                    name: TerminalRuleCall,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'rule' }\r\n                    ]\r\n                };\r\n            }\r\n            case UnorderedGroup: {\r\n                return {\r\n                    name: UnorderedGroup,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'elements', defaultValue: [] },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            case UntilToken: {\r\n                return {\r\n                    name: UntilToken,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' },\r\n                        { name: 'terminal' }\r\n                    ]\r\n                };\r\n            }\r\n            case Wildcard: {\r\n                return {\r\n                    name: Wildcard,\r\n                    properties: [\r\n                        { name: 'cardinality' },\r\n                        { name: 'lookahead' }\r\n                    ]\r\n                };\r\n            }\r\n            default: {\r\n                return {\r\n                    name: type,\r\n                    properties: []\r\n                };\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport const reflection = new LangiumGrammarAstReflection();\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { Range } from 'vscode-languageserver-types';\r\nimport type { AstNode, AstReflection, CstNode, GenericAstNode, Mutable, PropertyType, Reference, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { Stream, TreeStream } from './stream.js';\r\nimport type { LangiumDocument } from '../workspace/documents.js';\r\nimport { isAstNode, isReference } from '../syntax-tree.js';\r\nimport { DONE_RESULT, stream, StreamImpl, TreeStreamImpl } from './stream.js';\r\nimport { inRange } from './cst-utils.js';\r\n\r\n/**\r\n * Link the `$container` and other related properties of every AST node that is directly contained\r\n * in the given `node`.\r\n */\r\nexport function linkContentToContainer(node: AstNode): void {\r\n    for (const [name, value] of Object.entries(node)) {\r\n        if (!name.startsWith('$')) {\r\n            if (Array.isArray(value)) {\r\n                value.forEach((item, index) => {\r\n                    if (isAstNode(item)) {\r\n                        (item as Mutable<AstNode>).$container = node;\r\n                        (item as Mutable<AstNode>).$containerProperty = name;\r\n                        (item as Mutable<AstNode>).$containerIndex = index;\r\n                    }\r\n                });\r\n            } else if (isAstNode(value)) {\r\n                (value as Mutable<AstNode>).$container = node;\r\n                (value as Mutable<AstNode>).$containerProperty = name;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Walk along the hierarchy of containers from the given AST node to the root and return the first\r\n * node that matches the type predicate. If the start node itself matches, it is returned.\r\n * If no container matches, `undefined` is returned.\r\n */\r\nexport function getContainerOfType<T extends AstNode>(node: AstNode | undefined, typePredicate: (n: AstNode) => n is T): T | undefined {\r\n    let item = node;\r\n    while (item) {\r\n        if (typePredicate(item)) {\r\n            return item;\r\n        }\r\n        item = item.$container;\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Walk along the hierarchy of containers from the given AST node to the root and check for existence\r\n * of a container that matches the given predicate. The start node is included in the checks.\r\n */\r\nexport function hasContainerOfType(node: AstNode | undefined, predicate: (n: AstNode) => boolean): boolean {\r\n    let item = node;\r\n    while (item) {\r\n        if (predicate(item)) {\r\n            return true;\r\n        }\r\n        item = item.$container;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * Retrieve the document in which the given AST node is contained. A reference to the document is\r\n * usually held by the root node of the AST.\r\n *\r\n * @throws an error if the node is not contained in a document.\r\n */\r\nexport function getDocument<T extends AstNode = AstNode>(node: AstNode): LangiumDocument<T> {\r\n    const rootNode = findRootNode(node);\r\n    const result = rootNode.$document;\r\n    if (!result) {\r\n        throw new Error('AST node has no document.');\r\n    }\r\n    return result as LangiumDocument<T>;\r\n}\r\n\r\n/**\r\n * Returns the root node of the given AST node by following the `$container` references.\r\n */\r\nexport function findRootNode(node: AstNode): AstNode {\r\n    while (node.$container) {\r\n        node = node.$container;\r\n    }\r\n    return node;\r\n}\r\n\r\nexport interface AstStreamOptions {\r\n    /**\r\n     * Optional target range that the nodes in the stream need to intersect\r\n     */\r\n    range?: Range\r\n}\r\n\r\n/**\r\n * Create a stream of all AST nodes that are directly contained in the given node. This includes\r\n * single-valued as well as multi-valued (array) properties.\r\n */\r\nexport function streamContents(node: AstNode, options?: AstStreamOptions): Stream<AstNode> {\r\n    if (!node) {\r\n        throw new Error('Node must be an AstNode.');\r\n    }\r\n    const range = options?.range;\r\n    type State = { keys: string[], keyIndex: number, arrayIndex: number };\r\n    return new StreamImpl<State, AstNode>(() => ({\r\n        keys: Object.keys(node),\r\n        keyIndex: 0,\r\n        arrayIndex: 0\r\n    }), state => {\r\n        while (state.keyIndex < state.keys.length) {\r\n            const property = state.keys[state.keyIndex];\r\n            if (!property.startsWith('$')) {\r\n                const value = (node as GenericAstNode)[property];\r\n                if (isAstNode(value)) {\r\n                    state.keyIndex++;\r\n                    if (isAstNodeInRange(value, range)) {\r\n                        return { done: false, value };\r\n                    }\r\n                } else if (Array.isArray(value)) {\r\n                    while (state.arrayIndex < value.length) {\r\n                        const index = state.arrayIndex++;\r\n                        const element = value[index];\r\n                        if (isAstNode(element) && isAstNodeInRange(element, range)) {\r\n                            return { done: false, value: element };\r\n                        }\r\n                    }\r\n                    state.arrayIndex = 0;\r\n                }\r\n            }\r\n            state.keyIndex++;\r\n        }\r\n        return DONE_RESULT;\r\n    });\r\n}\r\n\r\n/**\r\n * Create a stream of all AST nodes that are directly and indirectly contained in the given root node.\r\n * This does not include the root node itself.\r\n */\r\nexport function streamAllContents(root: AstNode, options?: AstStreamOptions): TreeStream<AstNode> {\r\n    if (!root) {\r\n        throw new Error('Root node must be an AstNode.');\r\n    }\r\n    return new TreeStreamImpl(root, node => streamContents(node, options));\r\n}\r\n\r\n/**\r\n * Create a stream of all AST nodes that are directly and indirectly contained in the given root node,\r\n * including the root node itself.\r\n */\r\nexport function streamAst(root: AstNode, options?: AstStreamOptions): TreeStream<AstNode> {\r\n    if (!root) {\r\n        throw new Error('Root node must be an AstNode.');\r\n    } else if (options?.range && !isAstNodeInRange(root, options.range)) {\r\n        // Return an empty stream if the root node isn't in range\r\n        return new TreeStreamImpl(root, () => []);\r\n    }\r\n    return new TreeStreamImpl(root, node => streamContents(node, options), { includeRoot: true });\r\n}\r\n\r\nfunction isAstNodeInRange(astNode: AstNode, range?: Range): boolean {\r\n    if (!range) {\r\n        return true;\r\n    }\r\n    const nodeRange = astNode.$cstNode?.range;\r\n    if (!nodeRange) {\r\n        return false;\r\n    }\r\n    return inRange(nodeRange, range);\r\n}\r\n\r\n/**\r\n * Create a stream of all cross-references that are held by the given AST node. This includes\r\n * single-valued as well as multi-valued (array) properties.\r\n */\r\nexport function streamReferences(node: AstNode): Stream<ReferenceInfo> {\r\n    type State = { keys: string[], keyIndex: number, arrayIndex: number };\r\n    return new StreamImpl<State, ReferenceInfo>(() => ({\r\n        keys: Object.keys(node),\r\n        keyIndex: 0,\r\n        arrayIndex: 0\r\n    }), state => {\r\n        while (state.keyIndex < state.keys.length) {\r\n            const property = state.keys[state.keyIndex];\r\n            if (!property.startsWith('$')) {\r\n                const value = (node as GenericAstNode)[property];\r\n                if (isReference(value)) {\r\n                    state.keyIndex++;\r\n                    return { done: false, value: { reference: value, container: node, property } };\r\n                } else if (Array.isArray(value)) {\r\n                    while (state.arrayIndex < value.length) {\r\n                        const index = state.arrayIndex++;\r\n                        const element = value[index];\r\n                        if (isReference(element)) {\r\n                            return { done: false, value: { reference: element, container: node, property, index } };\r\n                        }\r\n                    }\r\n                    state.arrayIndex = 0;\r\n                }\r\n            }\r\n            state.keyIndex++;\r\n        }\r\n        return DONE_RESULT;\r\n    });\r\n}\r\n\r\n/**\r\n * Returns a Stream of references to the target node from the AstNode tree\r\n *\r\n * @param targetNode AstNode we are looking for\r\n * @param lookup AstNode where we search for references. If not provided, the root node of the document is used as the default value\r\n */\r\nexport function findLocalReferences(targetNode: AstNode, lookup = getDocument(targetNode).parseResult.value): Stream<Reference> {\r\n    const refs: Reference[] = [];\r\n    streamAst(lookup).forEach(node => {\r\n        streamReferences(node).forEach(refInfo => {\r\n            if (refInfo.reference.ref === targetNode) {\r\n                refs.push(refInfo.reference);\r\n            }\r\n        });\r\n    });\r\n    return stream(refs);\r\n}\r\n\r\n/**\r\n * Assigns all mandatory AST properties to the specified node.\r\n *\r\n * @param reflection Reflection object used to gather mandatory properties for the node.\r\n * @param node Specified node is modified in place and properties are directly assigned.\r\n */\r\nexport function assignMandatoryProperties(reflection: AstReflection, node: AstNode): void {\r\n    const typeMetaData = reflection.getTypeMetaData(node.$type);\r\n    const genericNode = node as GenericAstNode;\r\n    for (const property of typeMetaData.properties) {\r\n        // Only set the value if the property is not already set and if it has a default value\r\n        if (property.defaultValue !== undefined && genericNode[property.name] === undefined) {\r\n            genericNode[property.name] = copyDefaultValue(property.defaultValue);\r\n        }\r\n    }\r\n}\r\n\r\nfunction copyDefaultValue(propertyType: PropertyType): PropertyType {\r\n    if (Array.isArray(propertyType)) {\r\n        return [...propertyType.map(copyDefaultValue)];\r\n    } else {\r\n        return propertyType;\r\n    }\r\n}\r\n\r\n/**\r\n * Creates a deep copy of the specified AST node.\r\n * The resulting copy will only contain semantically relevant information, such as the `$type` property and AST properties.\r\n *\r\n * References are copied without resolved cross reference. The specified function is used to rebuild them.\r\n */\r\nexport function copyAstNode<T extends AstNode = AstNode>(node: T, buildReference: (node: AstNode, property: string, refNode: CstNode | undefined, refText: string) => Reference<AstNode>): T {\r\n    const copy: GenericAstNode = { $type: node.$type };\r\n\r\n    for (const [name, value] of Object.entries(node)) {\r\n        if (!name.startsWith('$')) {\r\n            if (isAstNode(value)) {\r\n                copy[name] = copyAstNode(value, buildReference);\r\n            } else if (isReference(value)) {\r\n                copy[name] = buildReference(\r\n                    copy,\r\n                    name,\r\n                    value.$refNode,\r\n                    value.$refText\r\n                );\r\n            } else if (Array.isArray(value)) {\r\n                const copiedArray: unknown[] = [];\r\n                for (const element of value) {\r\n                    if (isAstNode(element)) {\r\n                        copiedArray.push(copyAstNode(element, buildReference));\r\n                    } else if (isReference(element)) {\r\n                        copiedArray.push(\r\n                            buildReference(\r\n                                copy,\r\n                                name,\r\n                                element.$refNode,\r\n                                element.$refText\r\n                            )\r\n                        );\r\n                    } else {\r\n                        copiedArray.push(element);\r\n                    }\r\n                }\r\n                copy[name] = copiedArray;\r\n            } else {\r\n                copy[name] = value;\r\n            }\r\n        }\r\n    }\r\n\r\n    linkContentToContainer(copy);\r\n    return copy as unknown as T;\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { Set, Group, Character, IRegExpAST } from '@chevrotain/regexp-to-ast';\r\nimport { RegExpParser, BaseRegExpVisitor } from '@chevrotain/regexp-to-ast';\r\n\r\nexport const NEWLINE_REGEXP = /\\r?\\n/gm;\r\n\r\nconst regexpParser = new RegExpParser();\r\n\r\n/**\r\n * This class is in charge of heuristically identifying start/end tokens of terminals.\r\n *\r\n * The way this works is by doing the following:\r\n * 1. Traverse the regular expression in the \"start state\"\r\n * 2. Add any encountered sets/single characters to the \"start regexp\"\r\n * 3. Once we encounter any variable-length content (i.e. with quantifiers such as +/?/*), we enter the \"end state\"\r\n * 4. In the end state, any sets/single characters are added to an \"end stack\".\r\n * 5. If we re-encounter any variable-length content we reset the end stack\r\n * 6. We continue visiting the regex until the end, reseting the end stack and rebuilding it as necessary\r\n *\r\n * After traversing a regular expression the `startRegexp/endRegexp` properties allow access to the stored start/end of the terminal\r\n */\r\nclass TerminalRegExpVisitor extends BaseRegExpVisitor {\r\n\r\n    private isStarting = true;\r\n    startRegexp: string;\r\n    private endRegexpStack: string[] = [];\r\n    multiline = false;\r\n    regex: string;\r\n\r\n    get endRegex(): string {\r\n        return this.endRegexpStack.join('');\r\n    }\r\n\r\n    reset(regex: string): void {\r\n        this.multiline = false;\r\n        this.regex = regex;\r\n        this.startRegexp = '';\r\n        this.isStarting = true;\r\n        this.endRegexpStack = [];\r\n    }\r\n\r\n    override visitGroup(node: Group) {\r\n        if (node.quantifier) {\r\n            this.isStarting = false;\r\n            this.endRegexpStack = [];\r\n        }\r\n    }\r\n\r\n    override visitCharacter(node: Character): void {\r\n        const char = String.fromCharCode(node.value);\r\n        if (!this.multiline && char === '\\n') {\r\n            this.multiline = true;\r\n        }\r\n        if (node.quantifier) {\r\n            this.isStarting = false;\r\n            this.endRegexpStack = [];\r\n        } else {\r\n            const escapedChar = escapeRegExp(char);\r\n            this.endRegexpStack.push(escapedChar);\r\n            if (this.isStarting) {\r\n                this.startRegexp += escapedChar;\r\n            }\r\n        }\r\n    }\r\n\r\n    override visitSet(node: Set): void {\r\n        if (!this.multiline) {\r\n            const set = this.regex.substring(node.loc.begin, node.loc.end);\r\n            const regex = new RegExp(set);\r\n            this.multiline = Boolean('\\n'.match(regex));\r\n        }\r\n        if (node.quantifier) {\r\n            this.isStarting = false;\r\n            this.endRegexpStack = [];\r\n        } else {\r\n            const set = this.regex.substring(node.loc.begin, node.loc.end);\r\n            this.endRegexpStack.push(set);\r\n            if (this.isStarting) {\r\n                this.startRegexp += set;\r\n            }\r\n        }\r\n    }\r\n\r\n    override visitChildren(node: IRegExpAST): void {\r\n        if (node.type === 'Group') {\r\n            // Ignore children of groups with quantifier (+/*/?)\r\n            // These groups are unrelated to start/end tokens of terminals\r\n            const group = node as Group;\r\n            if (group.quantifier) {\r\n                return;\r\n            }\r\n        }\r\n        super.visitChildren(node);\r\n    }\r\n}\r\n\r\nconst visitor = new TerminalRegExpVisitor();\r\n\r\nexport function getTerminalParts(regexp: RegExp | string): Array<{ start: string, end: string }> {\r\n    try {\r\n        if (typeof regexp !== 'string') {\r\n            regexp = regexp.source;\r\n        }\r\n        regexp = `/${regexp}/`;\r\n        const pattern = regexpParser.pattern(regexp);\r\n        const parts: Array<{ start: string, end: string }> = [];\r\n        for (const alternative of pattern.value.value) {\r\n            visitor.reset(regexp);\r\n            visitor.visit(alternative);\r\n            parts.push({\r\n                start: visitor.startRegexp,\r\n                end: visitor.endRegex\r\n            });\r\n        }\r\n        return parts;\r\n    } catch {\r\n        return [];\r\n    }\r\n}\r\n\r\nexport function isMultilineComment(regexp: RegExp | string): boolean {\r\n    try {\r\n        if (typeof regexp === 'string') {\r\n            regexp = new RegExp(regexp);\r\n        }\r\n        regexp = regexp.toString();\r\n        visitor.reset(regexp);\r\n        // Parsing the pattern might fail (since it's user code)\r\n        visitor.visit(regexpParser.pattern(regexp));\r\n        return visitor.multiline;\r\n    } catch {\r\n        return false;\r\n    }\r\n}\r\n\r\n/**\r\n * A set of all characters that are considered whitespace by the '\\s' RegExp character class.\r\n * Taken from [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions/Character_classes).\r\n */\r\nexport const whitespaceCharacters = (\r\n    '\\f\\n\\r\\t\\v\\u0020\\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007' +\r\n    '\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff').split('');\r\n\r\nexport function isWhitespace(value: RegExp | string): boolean {\r\n    const regexp = typeof value === 'string' ? new RegExp(value) : value;\r\n    return whitespaceCharacters.some((ws) => regexp.test(ws));\r\n}\r\n\r\nexport function escapeRegExp(value: string): string {\r\n    return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n\r\nexport function getCaseInsensitivePattern(keyword: string): string {\r\n    return Array.prototype.map.call(keyword, letter =>\r\n        /\\w/.test(letter) ? `[${letter.toLowerCase()}${letter.toUpperCase()}]` : escapeRegExp(letter)\r\n    ).join('');\r\n}\r\n\r\n/**\r\n * Determines whether the given input has a partial match with the specified regex.\r\n * @param regex The regex to partially match against\r\n * @param input The input string\r\n * @returns Whether any match exists.\r\n */\r\nexport function partialMatches(regex: RegExp | string, input: string): boolean {\r\n    const partial = partialRegExp(regex);\r\n    const match = input.match(partial);\r\n    return !!match && match[0].length > 0;\r\n}\r\n\r\n/**\r\n * Builds a partial regex from the input regex. A partial regex is able to match incomplete input strings. E.g.\r\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.\r\n * @param regex The input regex to be converted.\r\n * @returns A partial regex constructed from the input regex.\r\n */\r\nexport function partialRegExp(regex: RegExp | string): RegExp {\r\n    if (typeof regex === 'string') {\r\n        regex = new RegExp(regex);\r\n    }\r\n    const re = regex, source = regex.source;\r\n    let i = 0;\r\n\r\n    function process() {\r\n        let result = '',\r\n            tmp;\r\n\r\n        function appendRaw(nbChars: number) {\r\n            result += source.substr(i, nbChars);\r\n            i += nbChars;\r\n        }\r\n\r\n        function appendOptional(nbChars: number) {\r\n            result += '(?:' + source.substr(i, nbChars) + '|$)';\r\n            i += nbChars;\r\n        }\r\n\r\n        while (i < source.length) {\r\n            switch (source[i]) {\r\n                case '\\\\':\r\n                    switch (source[i + 1]) {\r\n                        case 'c':\r\n                            appendOptional(3);\r\n                            break;\r\n                        case 'x':\r\n                            appendOptional(4);\r\n                            break;\r\n                        case 'u':\r\n                            if (re.unicode) {\r\n                                if (source[i + 2] === '{') {\r\n                                    appendOptional(source.indexOf('}', i) - i + 1);\r\n                                } else {\r\n                                    appendOptional(6);\r\n                                }\r\n                            } else {\r\n                                appendOptional(2);\r\n                            }\r\n                            break;\r\n                        case 'p':\r\n                        case 'P':\r\n                            if (re.unicode) {\r\n                                appendOptional(source.indexOf('}', i) - i + 1);\r\n                            } else {\r\n                                appendOptional(2);\r\n                            }\r\n                            break;\r\n                        case 'k':\r\n                            appendOptional(source.indexOf('>', i) - i + 1);\r\n                            break;\r\n                        default:\r\n                            appendOptional(2);\r\n                            break;\r\n                    }\r\n                    break;\r\n\r\n                case '[':\r\n                    tmp = /\\[(?:\\\\.|.)*?\\]/g;\r\n                    tmp.lastIndex = i;\r\n                    tmp = tmp.exec(source) || [];\r\n                    appendOptional(tmp[0].length);\r\n                    break;\r\n\r\n                case '|':\r\n                case '^':\r\n                case '$':\r\n                case '*':\r\n                case '+':\r\n                case '?':\r\n                    appendRaw(1);\r\n                    break;\r\n                case '{':\r\n                    tmp = /\\{\\d+,?\\d*\\}/g;\r\n                    tmp.lastIndex = i;\r\n                    tmp = tmp.exec(source);\r\n                    if (tmp) {\r\n                        appendRaw(tmp[0].length);\r\n                    } else {\r\n                        appendOptional(1);\r\n                    }\r\n                    break;\r\n                case '(':\r\n                    if (source[i + 1] === '?') {\r\n                        switch (source[i + 2]) {\r\n                            case ':':\r\n                                result += '(?:';\r\n                                i += 3;\r\n                                result += process() + '|$)';\r\n                                break;\r\n                            case '=':\r\n                                result += '(?=';\r\n                                i += 3;\r\n                                result += process() + ')';\r\n                                break;\r\n                            case '!':\r\n                                tmp = i;\r\n                                i += 3;\r\n                                process();\r\n                                result += source.substr(tmp, i - tmp);\r\n                                break;\r\n                            case '<':\r\n                                switch (source[i + 3]) {\r\n                                    case '=':\r\n                                    case '!':\r\n                                        tmp = i;\r\n                                        i += 4;\r\n                                        process();\r\n                                        result += source.substr(tmp, i - tmp);\r\n                                        break;\r\n                                    default:\r\n                                        appendRaw(source.indexOf('>', i) - i + 1);\r\n                                        result += process() + '|$)';\r\n                                        break;\r\n                                }\r\n                                break;\r\n                        }\r\n                    } else {\r\n                        appendRaw(1);\r\n                        result += process() + '|$)';\r\n                    }\r\n                    break;\r\n                case ')':\r\n                    ++i;\r\n                    return result;\r\n                default:\r\n                    appendOptional(1);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    return new RegExp(process(), regex.flags);\r\n}\r\n","import type { Character, IRegExpAST, RegExpFlags } from \"../types\";\n\nexport function cc(char: string): number {\n  return char.charCodeAt(0);\n}\n\nexport function insertToSet<T>(item: T | T[], set: T[]) {\n  if (Array.isArray(item)) {\n    item.forEach(function (subItem) {\n      set.push(subItem);\n    });\n  } else {\n    set.push(item);\n  }\n}\n\nexport function addFlag(\n  flagObj: RegExpFlags,\n  flagKey: keyof Omit<RegExpFlags, keyof IRegExpAST>,\n) {\n  if (flagObj[flagKey] === true) {\n    throw \"duplicate flag \" + flagKey;\n  }\n\n  const x: boolean = flagObj[flagKey];\n  flagObj[flagKey] = true;\n}\n\nexport function ASSERT_EXISTS<T = Object>(obj: any): obj is T {\n  // istanbul ignore next\n  if (obj === undefined) {\n    throw Error(\"Internal Error - Should never get here!\");\n  }\n  return true;\n}\n\n// istanbul ignore next\nexport function ASSERT_NEVER_REACH_HERE(): any {\n  throw Error(\"Internal Error - Should never get here!\");\n}\n\nexport function isCharacter(obj: { type: string }): obj is Character {\n  return obj[\"type\"] === \"Character\";\n}\n","import { cc } from \"./utils.js\";\n\nexport const digitsCharCodes: number[] = [];\nfor (let i = cc(\"0\"); i <= cc(\"9\"); i++) {\n  digitsCharCodes.push(i);\n}\n\nexport const wordCharCodes: number[] = [cc(\"_\")].concat(digitsCharCodes);\nfor (let i = cc(\"a\"); i <= cc(\"z\"); i++) {\n  wordCharCodes.push(i);\n}\n\nfor (let i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n  wordCharCodes.push(i);\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\nexport const whitespaceCodes: number[] = [\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","import type {\n  Alternative,\n  Assertion,\n  Atom,\n  Character,\n  Disjunction,\n  Group,\n  GroupBackReference,\n  Location,\n  Quantifier,\n  Range,\n  RegExpFlags,\n  RegExpPattern,\n  Set,\n  Term,\n} from \"../types\";\nimport {\n  addFlag,\n  ASSERT_EXISTS,\n  ASSERT_NEVER_REACH_HERE,\n  cc,\n  insertToSet,\n  isCharacter,\n} from \"./utils.js\";\nimport {\n  digitsCharCodes,\n  whitespaceCodes,\n  wordCharCodes,\n} from \"./character-classes.js\";\n\n// consts and utilities\nconst hexDigitPattern = /[0-9a-fA-F]/;\nconst decimalPattern = /[0-9]/;\nconst decimalPatternNoZero = /[1-9]/;\n\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  protected idx: number = 0;\n  protected input: string = \"\";\n  protected groupIdx: number = 0;\n\n  protected saveState() {\n    return {\n      idx: this.idx,\n      input: this.input,\n      groupIdx: this.groupIdx,\n    };\n  }\n\n  protected restoreState(newState: {\n    idx: number;\n    input: string;\n    groupIdx: number;\n  }) {\n    this.idx = newState.idx;\n    this.input = newState.input;\n    this.groupIdx = newState.groupIdx;\n  }\n\n  public pattern(input: string): RegExpPattern {\n    // parser state\n    this.idx = 0;\n    this.input = input;\n    this.groupIdx = 0;\n\n    this.consumeChar(\"/\");\n    const value = this.disjunction();\n    this.consumeChar(\"/\");\n\n    const flags: RegExpFlags = {\n      type: \"Flags\",\n      loc: { begin: this.idx, end: input.length },\n      global: false,\n      ignoreCase: false,\n      multiLine: false,\n      unicode: false,\n      sticky: false,\n    };\n\n    while (this.isRegExpFlag()) {\n      switch (this.popChar()) {\n        case \"g\":\n          addFlag(flags, \"global\");\n          break;\n        case \"i\":\n          addFlag(flags, \"ignoreCase\");\n          break;\n        case \"m\":\n          addFlag(flags, \"multiLine\");\n          break;\n        case \"u\":\n          addFlag(flags, \"unicode\");\n          break;\n        case \"y\":\n          addFlag(flags, \"sticky\");\n          break;\n      }\n    }\n\n    if (this.idx !== this.input.length) {\n      throw Error(\"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\n  protected disjunction(): Disjunction {\n    const alts = [];\n    const begin = this.idx;\n\n    alts.push(this.alternative());\n\n    while (this.peekChar() === \"|\") {\n      this.consumeChar(\"|\");\n      alts.push(this.alternative());\n    }\n\n    return { type: \"Disjunction\", value: alts, loc: this.loc(begin) };\n  }\n\n  protected alternative(): Alternative {\n    const terms = [];\n    const begin = this.idx;\n\n    while (this.isTerm()) {\n      terms.push(this.term());\n    }\n\n    return { type: \"Alternative\", value: terms, loc: this.loc(begin) };\n  }\n\n  protected term(): Term {\n    if (this.isAssertion()) {\n      return this.assertion();\n    } else {\n      return this.atom();\n    }\n  }\n\n  protected assertion(): 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\n        let type: \"Lookahead\" | \"NegativeLookahead\" | undefined;\n        switch (this.popChar()) {\n          case \"=\":\n            type = \"Lookahead\";\n            break;\n          case \"!\":\n            type = \"NegativeLookahead\";\n            break;\n        }\n        ASSERT_EXISTS(type);\n\n        const disjunction = this.disjunction();\n\n        this.consumeChar(\")\");\n\n        return {\n          type: type!,\n          value: disjunction,\n          loc: this.loc(begin),\n        };\n    }\n    // istanbul ignore next\n    return ASSERT_NEVER_REACH_HERE();\n  }\n\n  protected quantifier(\n    isBacktracking: boolean = false,\n  ): Quantifier | undefined {\n    let range: Partial<Quantifier> | undefined = 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            } else {\n              range = {\n                atLeast: atLeast,\n                atMost: Infinity,\n              };\n            }\n            this.consumeChar(\"}\");\n            break;\n        }\n        // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n        // causes severe performance degradations\n        if (isBacktracking === true && range === undefined) {\n          return undefined;\n        }\n        ASSERT_EXISTS(range);\n        break;\n    }\n\n    // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n    // causes severe performance degradations\n    if (isBacktracking === true && range === undefined) {\n      return undefined;\n    }\n\n    // istanbul ignore else\n    if (ASSERT_EXISTS(range)) {\n      if (this.peekChar(0) === \"?\") {\n        this.consumeChar(\"?\");\n        range.greedy = false;\n      } else {\n        range.greedy = true;\n      }\n\n      range.type = \"Quantifier\";\n      range.loc = this.loc(begin);\n      return range as Quantifier;\n    }\n  }\n\n  protected atom(): Atom {\n    let atom: Omit<Atom, \"loc\" | \"type\"> | undefined;\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\n    if (atom === undefined && this.isPatternCharacter()) {\n      atom = this.patternCharacter();\n    }\n\n    // istanbul ignore else\n    if (ASSERT_EXISTS<Atom>(atom)) {\n      atom.loc = this.loc(begin);\n\n      if (this.isQuantifier()) {\n        atom.quantifier = this.quantifier();\n      }\n\n      return atom;\n    }\n\n    // istanbul ignore next\n    return ASSERT_NEVER_REACH_HERE();\n  }\n\n  protected dotAll(): Omit<Set, \"loc\"> {\n    this.consumeChar(\".\");\n    return {\n      type: \"Set\",\n      complement: true,\n      value: [cc(\"\\n\"), cc(\"\\r\"), cc(\"\\u2028\"), cc(\"\\u2029\")],\n    };\n  }\n\n  protected atomEscape(): Omit<GroupBackReference | Set | Character, \"loc\"> {\n    this.consumeChar(\"\\\\\");\n\n    switch (this.peekChar()) {\n      case \"1\":\n      case \"2\":\n      case \"3\":\n      case \"4\":\n      case \"5\":\n      case \"6\":\n      case \"7\":\n      case \"8\":\n      case \"9\":\n        return this.decimalEscapeAtom();\n      case \"d\":\n      case \"D\":\n      case \"s\":\n      case \"S\":\n      case \"w\":\n      case \"W\":\n        return this.characterClassEscape();\n      case \"f\":\n      case \"n\":\n      case \"r\":\n      case \"t\":\n      case \"v\":\n        return this.controlEscapeAtom();\n      case \"c\":\n        return this.controlLetterEscapeAtom();\n      case \"0\":\n        return this.nulCharacterAtom();\n      case \"x\":\n        return this.hexEscapeSequenceAtom();\n      case \"u\":\n        return this.regExpUnicodeEscapeSequenceAtom();\n      default:\n        return this.identityEscapeAtom();\n    }\n  }\n\n  protected decimalEscapeAtom(): Omit<GroupBackReference, \"loc\"> {\n    const value = this.positiveInteger();\n\n    return { type: \"GroupBackReference\", value: value };\n  }\n\n  protected characterClassEscape(): Omit<Set, \"loc\"> {\n    let set: (number | Range)[] | undefined;\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\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\n  protected controlEscapeAtom(): Omit<Character, \"loc\"> {\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\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\n  protected controlLetterEscapeAtom(): Omit<Character, \"loc\"> {\n    this.consumeChar(\"c\");\n    const letter = this.popChar();\n    if (/[a-zA-Z]/.test(letter) === false) {\n      throw Error(\"Invalid \");\n    }\n\n    const letterCode = letter.toUpperCase().charCodeAt(0) - 64;\n    return { type: \"Character\", value: letterCode };\n  }\n\n  protected nulCharacterAtom(): Omit<Character, \"loc\"> {\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\n  protected hexEscapeSequenceAtom(): Omit<Character, \"loc\"> {\n    this.consumeChar(\"x\");\n    return this.parseHexDigits(2);\n  }\n\n  protected regExpUnicodeEscapeSequenceAtom(): Omit<Character, \"loc\"> {\n    this.consumeChar(\"u\");\n    return this.parseHexDigits(4);\n  }\n\n  protected identityEscapeAtom(): Omit<Character, \"loc\"> {\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\n  protected classPatternCharacterAtom(): Omit<Character, \"loc\"> {\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\n  protected characterClass(): Omit<Set, \"loc\"> {\n    const set: (number | Range)[] = [];\n    let complement = false;\n    this.consumeChar(\"[\");\n    if (this.peekChar(0) === \"^\") {\n      this.consumeChar(\"^\");\n      complement = true;\n    }\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\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        } else {\n          // literal dash\n          insertToSet(from.value, set);\n          set.push(cc(\"-\"));\n          insertToSet(to.value, set);\n        }\n      } else {\n        insertToSet(from.value, set);\n      }\n    }\n\n    this.consumeChar(\"]\");\n\n    return { type: \"Set\", complement: complement, value: set };\n  }\n\n  protected classAtom(): Omit<Character | Set, \"loc\"> {\n    switch (this.peekChar()) {\n      // istanbul ignore next\n      case \"]\":\n      // istanbul ignore next\n      case \"\\n\":\n      // istanbul ignore next\n      case \"\\r\":\n      // istanbul ignore next\n      case \"\\u2028\":\n      // istanbul ignore next\n      case \"\\u2029\":\n        throw Error(\"TBD\");\n      case \"\\\\\":\n        return this.classEscape();\n      default:\n        return this.classPatternCharacterAtom();\n    }\n  }\n\n  protected classEscape(): Omit<Character | Set, \"loc\"> {\n    this.consumeChar(\"\\\\\");\n    switch (this.peekChar()) {\n      // Matches a backspace.\n      // (Not to be confused with \\b word boundary outside characterClass)\n      case \"b\":\n        this.consumeChar(\"b\");\n        return { type: \"Character\", value: cc(\"\\u0008\") };\n      case \"d\":\n      case \"D\":\n      case \"s\":\n      case \"S\":\n      case \"w\":\n      case \"W\":\n        return this.characterClassEscape();\n      case \"f\":\n      case \"n\":\n      case \"r\":\n      case \"t\":\n      case \"v\":\n        return this.controlEscapeAtom();\n      case \"c\":\n        return this.controlLetterEscapeAtom();\n      case \"0\":\n        return this.nulCharacterAtom();\n      case \"x\":\n        return this.hexEscapeSequenceAtom();\n      case \"u\":\n        return this.regExpUnicodeEscapeSequenceAtom();\n      default:\n        return this.identityEscapeAtom();\n    }\n  }\n\n  protected group(): Omit<Group, \"loc\"> {\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\n    const groupAst: Omit<Group, \"loc\"> = {\n      type: \"Group\",\n      capturing: capturing,\n      value: value,\n    };\n\n    if (capturing) {\n      groupAst[\"idx\"] = this.groupIdx;\n    }\n\n    return groupAst;\n  }\n\n  protected positiveInteger(): number {\n    let number = this.popChar();\n\n    // istanbul ignore next - can't ever get here due to previous lookahead checks\n    // still implementing this error checking in case this ever changes.\n    if (decimalPatternNoZero.test(number) === false) {\n      throw Error(\"Expecting a positive integer\");\n    }\n\n    while (decimalPattern.test(this.peekChar(0))) {\n      number += this.popChar();\n    }\n\n    return parseInt(number, 10);\n  }\n\n  protected integerIncludingZero(): number {\n    let number = this.popChar();\n    if (decimalPattern.test(number) === false) {\n      throw Error(\"Expecting an integer\");\n    }\n\n    while (decimalPattern.test(this.peekChar(0))) {\n      number += this.popChar();\n    }\n\n    return parseInt(number, 10);\n  }\n\n  protected patternCharacter(): Omit<Character, \"loc\"> {\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  protected isRegExpFlag(): boolean {\n    switch (this.peekChar(0)) {\n      case \"g\":\n      case \"i\":\n      case \"m\":\n      case \"u\":\n      case \"y\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  protected isRangeDash(): boolean {\n    return this.peekChar() === \"-\" && this.isClassAtom(1);\n  }\n\n  protected isDigit(): boolean {\n    return decimalPattern.test(this.peekChar(0));\n  }\n\n  protected isClassAtom(howMuch = 0): boolean {\n    switch (this.peekChar(howMuch)) {\n      case \"]\":\n      case \"\\n\":\n      case \"\\r\":\n      case \"\\u2028\":\n      case \"\\u2029\":\n        return false;\n      default:\n        return true;\n    }\n  }\n\n  protected isTerm() {\n    return this.isAtom() || this.isAssertion();\n  }\n\n  protected isAtom(): boolean {\n    if (this.isPatternCharacter()) {\n      return true;\n    }\n\n    switch (this.peekChar(0)) {\n      case \".\":\n      case \"\\\\\": // atomEscape\n      case \"[\": // characterClass\n      // TODO: isAtom must be called before isAssertion - disambiguate\n      case \"(\": // group\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  protected isAssertion(): boolean {\n    switch (this.peekChar(0)) {\n      case \"^\":\n      case \"$\":\n        return true;\n      // '\\b' or '\\B'\n      case \"\\\\\":\n        switch (this.peekChar(1)) {\n          case \"b\":\n          case \"B\":\n            return true;\n          default:\n            return false;\n        }\n      // '(?=' or '(?!'\n      case \"(\":\n        return (\n          this.peekChar(1) === \"?\" &&\n          (this.peekChar(2) === \"=\" || this.peekChar(2) === \"!\")\n        );\n      default:\n        return false;\n    }\n  }\n\n  protected isQuantifier(): boolean {\n    const prevState = this.saveState();\n    try {\n      return this.quantifier(true) !== undefined;\n    } catch (e) {\n      return false;\n    } finally {\n      this.restoreState(prevState);\n    }\n  }\n\n  protected isPatternCharacter(): boolean {\n    switch (this.peekChar()) {\n      case \"^\":\n      case \"$\":\n      case \"\\\\\":\n      case \".\":\n      case \"*\":\n      case \"+\":\n      case \"?\":\n      case \"(\":\n      case \")\":\n      case \"[\":\n      case \"|\":\n      case \"/\":\n      case \"\\n\":\n      case \"\\r\":\n      case \"\\u2028\":\n      case \"\\u2029\":\n        return false;\n      default:\n        return true;\n    }\n  }\n\n  protected parseHexDigits(howMany: number): Omit<Character, \"loc\"> {\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\n  protected peekChar(howMuch = 0): string {\n    return this.input[this.idx + howMuch];\n  }\n\n  protected popChar(): string {\n    const nextChar = this.peekChar(0);\n    this.consumeChar(undefined);\n    return nextChar;\n  }\n\n  protected consumeChar(char: string | undefined): void {\n    if (char !== undefined && this.input[this.idx] !== char) {\n      throw Error(\n        \"Expected: '\" +\n          char +\n          \"' but found: '\" +\n          this.input[this.idx] +\n          \"' at offset: \" +\n          this.idx,\n      );\n    }\n\n    if (this.idx >= this.input.length) {\n      throw Error(\"Unexpected end of input\");\n    }\n    this.idx++;\n  }\n\n  protected loc(begin: number): Location {\n    return { begin: begin, end: this.idx };\n  }\n}\n","import type {\n  Alternative,\n  Assertion,\n  Character,\n  Disjunction,\n  Group,\n  GroupBackReference,\n  IRegExpAST,\n  Quantifier,\n  RegExpAstPart,\n  RegExpFlags,\n  RegExpPattern,\n  Set,\n} from \"../types\";\n\nexport class BaseRegExpVisitor {\n  public visitChildren(node: IRegExpAST) {\n    for (const key in node) {\n      const child = (node as any)[key];\n      /* istanbul ignore else */\n      if (node.hasOwnProperty(key)) {\n        if (child.type !== undefined) {\n          this.visit(child);\n        } else if (Array.isArray(child)) {\n          child.forEach((subChild) => {\n            this.visit(subChild);\n          }, this);\n        }\n      }\n    }\n  }\n\n  public visit(node: RegExpAstPart): void {\n    switch (node.type) {\n      case \"Pattern\":\n        this.visitPattern(node);\n        break;\n      case \"Flags\":\n        this.visitFlags(node);\n        break;\n      case \"Disjunction\":\n        this.visitDisjunction(node);\n        break;\n      case \"Alternative\":\n        this.visitAlternative(node);\n        break;\n      case \"StartAnchor\":\n        this.visitStartAnchor(node);\n        break;\n      case \"EndAnchor\":\n        this.visitEndAnchor(node);\n        break;\n      case \"WordBoundary\":\n        this.visitWordBoundary(node);\n        break;\n      case \"NonWordBoundary\":\n        this.visitNonWordBoundary(node);\n        break;\n      case \"Lookahead\":\n        this.visitLookahead(node);\n        break;\n      case \"NegativeLookahead\":\n        this.visitNegativeLookahead(node);\n        break;\n      case \"Character\":\n        this.visitCharacter(node);\n        break;\n      case \"Set\":\n        this.visitSet(node);\n        break;\n      case \"Group\":\n        this.visitGroup(node);\n        break;\n      case \"GroupBackReference\":\n        this.visitGroupBackReference(node);\n        break;\n      case \"Quantifier\":\n        this.visitQuantifier(node);\n        break;\n    }\n\n    this.visitChildren(node);\n  }\n\n  public visitPattern(node: RegExpPattern): void {}\n\n  public visitFlags(node: RegExpFlags): void {}\n\n  public visitDisjunction(node: Disjunction): void {}\n\n  public visitAlternative(node: Alternative): void {}\n\n  // Assertion\n  public visitStartAnchor(node: Assertion): void {}\n\n  public visitEndAnchor(node: Assertion): void {}\n\n  public visitWordBoundary(node: Assertion): void {}\n\n  public visitNonWordBoundary(node: Assertion): void {}\n\n  public visitLookahead(node: Assertion): void {}\n\n  public visitNegativeLookahead(node: Assertion): void {}\n\n  // atoms\n  public visitCharacter(node: Character): void {}\n\n  public visitSet(node: Set): void {}\n\n  public visitGroup(node: Group): void {}\n\n  public visitGroupBackReference(node: GroupBackReference): void {}\n\n  public visitQuantifier(node: Quantifier): void {}\n}\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { DefaultNameRegexp } from '../utils/cst-utils.js';\r\nimport { isCommentTerminal, terminalRegex } from '../utils/grammar-utils.js';\r\nimport { isMultilineComment } from '../utils/regexp-utils.js';\r\nimport { isTerminalRule } from './generated/ast.js';\r\n\r\nexport interface GrammarConfig {\r\n    /**\r\n     * Lists all rule names which are classified as multiline comment rules\r\n     */\r\n    multilineCommentRules: string[]\r\n    /**\r\n     * A regular expression which matches characters of names\r\n     */\r\n    nameRegexp: RegExp\r\n}\r\n\r\n/**\r\n * Create the default grammar configuration (used by `createDefaultModule`). This can be overridden in a\r\n * language-specific module.\r\n */\r\nexport function createGrammarConfig(services: LangiumCoreServices): GrammarConfig {\r\n    const rules: string[] = [];\r\n    const grammar = services.Grammar;\r\n    for (const rule of grammar.rules) {\r\n        if (isTerminalRule(rule) && isCommentTerminal(rule) && isMultilineComment(terminalRegex(rule))) {\r\n            rules.push(rule.name);\r\n        }\r\n    }\r\n    return {\r\n        multilineCommentRules: rules,\r\n        nameRegexp: DefaultNameRegexp\r\n    };\r\n}\r\n","/** 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","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arrayIncludesWith;\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","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n *  else `false`.\n */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    var value = array[index],\n        current = iteratee(value);\n\n    if (current != null && (computed === undefined\n          ? (current === current && !isSymbol(current))\n          : comparator(current, computed)\n        )) {\n      var computed = current,\n          result = value;\n    }\n  }\n  return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nexport default min;\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","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","export function PRINT_ERROR(msg: string) {\n  /* istanbul ignore else - can't override global.console in node.js */\n  if (console && console.error) {\n    console.error(`Error: ${msg}`);\n  }\n}\n\nexport function PRINT_WARNING(msg: string) {\n  /* istanbul ignore else - can't override global.console in node.js*/\n  if (console && console.warn) {\n    // TODO: modify docs accordingly\n    console.warn(`Warning: ${msg}`);\n  }\n}\n","export function timer<T>(func: () => T): { time: number; value: T } {\n  const start = new Date().getTime();\n  const val = func();\n  const end = new Date().getTime();\n  const total = end - start;\n  return { time: total, value: val };\n}\n","// based on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\nexport function toFastProperties(toBecomeFast: any) {\n  function FakeConstructor() {}\n\n  // If our object is used as a constructor, it would receive\n  FakeConstructor.prototype = toBecomeFast;\n  const fakeInstance = new (FakeConstructor as any)();\n\n  function fakeAccess() {\n    return typeof fakeInstance.bar;\n  }\n\n  // help V8 understand this is a \"real\" prototype by actually using\n  // the fake instance.\n  fakeAccess();\n  fakeAccess();\n\n  // Always true condition to suppress the Firefox warning of unreachable\n  // code after a return statement.\n  if (1) return toBecomeFast;\n\n  // Eval prevents optimization of this method (even though this is dead code)\n  // - https://esbuild.github.io/content-types/#direct-eval\n  /* istanbul ignore next */\n  // tslint:disable-next-line\n  (0, eval)(toBecomeFast);\n}\n","import { assign, forEach, isRegExp, isString, map, pickBy } from \"lodash-es\";\nimport type {\n  IGASTVisitor,\n  IProduction,\n  IProductionWithOccurrence,\n  ISerializedGast,\n  TokenType,\n} from \"@chevrotain/types\";\n\n// TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\nfunction tokenLabel(tokType: TokenType): string {\n  if (hasTokenLabel(tokType)) {\n    return tokType.LABEL;\n  } else {\n    return tokType.name;\n  }\n}\n\n// TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\nfunction hasTokenLabel(\n  obj: TokenType,\n): obj is TokenType & Pick<Required<TokenType>, \"LABEL\"> {\n  return isString(obj.LABEL) && obj.LABEL !== \"\";\n}\n\nexport abstract class AbstractProduction<T extends IProduction = IProduction>\n  implements IProduction\n{\n  public get definition(): T[] {\n    return this._definition;\n  }\n  public set definition(value: T[]) {\n    this._definition = value;\n  }\n\n  constructor(protected _definition: T[]) {}\n\n  accept(visitor: IGASTVisitor): void {\n    visitor.visit(this);\n    forEach(this.definition, (prod) => {\n      prod.accept(visitor);\n    });\n  }\n}\n\nexport class NonTerminal\n  extends AbstractProduction\n  implements IProductionWithOccurrence\n{\n  public nonTerminalName!: string;\n  public label?: string;\n  public referencedRule!: Rule;\n  public idx: number = 1;\n\n  constructor(options: {\n    nonTerminalName: string;\n    label?: string;\n    referencedRule?: Rule;\n    idx?: number;\n  }) {\n    super([]);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n\n  set definition(definition: IProduction[]) {\n    // immutable\n  }\n\n  get definition(): IProduction[] {\n    if (this.referencedRule !== undefined) {\n      return this.referencedRule.definition;\n    }\n    return [];\n  }\n\n  accept(visitor: IGASTVisitor): void {\n    visitor.visit(this);\n    // don't visit children of a reference, we will get cyclic infinite loops if we do so\n  }\n}\n\nexport class Rule extends AbstractProduction {\n  public name!: string;\n  public orgText: string = \"\";\n\n  constructor(options: {\n    name: string;\n    definition: IProduction[];\n    orgText?: string;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class Alternative extends AbstractProduction {\n  public ignoreAmbiguities: boolean = false;\n\n  constructor(options: {\n    definition: IProduction[];\n    ignoreAmbiguities?: boolean;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class Option\n  extends AbstractProduction\n  implements IProductionWithOccurrence\n{\n  public idx: number = 1;\n  public maxLookahead?: number;\n\n  constructor(options: {\n    definition: IProduction[];\n    idx?: number;\n    maxLookahead?: number;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class RepetitionMandatory\n  extends AbstractProduction\n  implements IProductionWithOccurrence\n{\n  public idx: number = 1;\n  public maxLookahead?: number;\n\n  constructor(options: {\n    definition: IProduction[];\n    idx?: number;\n    maxLookahead?: number;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class RepetitionMandatoryWithSeparator\n  extends AbstractProduction\n  implements IProductionWithOccurrence\n{\n  public separator!: TokenType;\n  public idx: number = 1;\n  public maxLookahead?: number;\n\n  constructor(options: {\n    definition: IProduction[];\n    separator: TokenType;\n    idx?: number;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class Repetition\n  extends AbstractProduction\n  implements IProductionWithOccurrence\n{\n  public separator!: TokenType;\n  public idx: number = 1;\n  public maxLookahead?: number;\n\n  constructor(options: {\n    definition: IProduction[];\n    idx?: number;\n    maxLookahead?: number;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class RepetitionWithSeparator\n  extends AbstractProduction\n  implements IProductionWithOccurrence\n{\n  public separator!: TokenType;\n  public idx: number = 1;\n  public maxLookahead?: number;\n\n  constructor(options: {\n    definition: IProduction[];\n    separator: TokenType;\n    idx?: number;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class Alternation\n  extends AbstractProduction<Alternative>\n  implements IProductionWithOccurrence\n{\n  public idx: number = 1;\n  public ignoreAmbiguities: boolean = false;\n  public hasPredicates: boolean = false;\n  public maxLookahead?: number;\n\n  public get definition(): Alternative[] {\n    return this._definition;\n  }\n  public set definition(value: Alternative[]) {\n    this._definition = value;\n  }\n\n  constructor(options: {\n    definition: Alternative[];\n    idx?: number;\n    ignoreAmbiguities?: boolean;\n    hasPredicates?: boolean;\n    maxLookahead?: number;\n  }) {\n    super(options.definition);\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n}\n\nexport class Terminal implements IProductionWithOccurrence {\n  public terminalType!: TokenType;\n  public label?: string;\n  public idx: number = 1;\n\n  constructor(options: {\n    terminalType: TokenType;\n    label?: string;\n    idx?: number;\n  }) {\n    assign(\n      this,\n      pickBy(options, (v) => v !== undefined),\n    );\n  }\n\n  accept(visitor: IGASTVisitor): void {\n    visitor.visit(this);\n  }\n}\n\nexport interface ISerializedBasic extends ISerializedGast {\n  type:\n    | \"Alternative\"\n    | \"Option\"\n    | \"RepetitionMandatory\"\n    | \"Repetition\"\n    | \"Alternation\";\n  idx?: number;\n}\n\nexport interface ISerializedGastRule extends ISerializedGast {\n  type: \"Rule\";\n  name: string;\n  orgText: string;\n}\n\nexport interface ISerializedNonTerminal extends ISerializedGast {\n  type: \"NonTerminal\";\n  name: string;\n  label?: string;\n  idx: number;\n}\n\nexport interface ISerializedTerminal extends ISerializedGast {\n  type: \"Terminal\";\n  name: string;\n  terminalLabel?: string;\n  label?: string;\n  pattern?: string;\n  idx: number;\n}\n\nexport interface ISerializedTerminalWithSeparator extends ISerializedGast {\n  type: \"RepetitionMandatoryWithSeparator\" | \"RepetitionWithSeparator\";\n  idx: number;\n  separator: ISerializedTerminal;\n}\n\nexport type ISerializedGastAny =\n  | ISerializedBasic\n  | ISerializedGastRule\n  | ISerializedNonTerminal\n  | ISerializedTerminal\n  | ISerializedTerminalWithSeparator;\n\nexport function serializeGrammar(topRules: Rule[]): ISerializedGast[] {\n  return map(topRules, serializeProduction);\n}\n\nexport function serializeProduction(node: IProduction): ISerializedGast {\n  function convertDefinition(definition: IProduction[]): ISerializedGast[] {\n    return map(definition, serializeProduction);\n  }\n  /* istanbul ignore else */\n  if (node instanceof NonTerminal) {\n    const serializedNonTerminal: ISerializedNonTerminal = {\n      type: \"NonTerminal\",\n      name: node.nonTerminalName,\n      idx: node.idx,\n    };\n\n    if (isString(node.label)) {\n      serializedNonTerminal.label = node.label;\n    }\n\n    return serializedNonTerminal;\n  } else if (node instanceof Alternative) {\n    return <ISerializedBasic>{\n      type: \"Alternative\",\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof Option) {\n    return <ISerializedBasic>{\n      type: \"Option\",\n      idx: node.idx,\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof RepetitionMandatory) {\n    return <ISerializedBasic>{\n      type: \"RepetitionMandatory\",\n      idx: node.idx,\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof RepetitionMandatoryWithSeparator) {\n    return <ISerializedTerminalWithSeparator>{\n      type: \"RepetitionMandatoryWithSeparator\",\n      idx: node.idx,\n      separator: <ISerializedTerminal>(\n        serializeProduction(new Terminal({ terminalType: node.separator }))\n      ),\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof RepetitionWithSeparator) {\n    return <ISerializedTerminalWithSeparator>{\n      type: \"RepetitionWithSeparator\",\n      idx: node.idx,\n      separator: <ISerializedTerminal>(\n        serializeProduction(new Terminal({ terminalType: node.separator }))\n      ),\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof Repetition) {\n    return <ISerializedBasic>{\n      type: \"Repetition\",\n      idx: node.idx,\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof Alternation) {\n    return <ISerializedBasic>{\n      type: \"Alternation\",\n      idx: node.idx,\n      definition: convertDefinition(node.definition),\n    };\n  } else if (node instanceof Terminal) {\n    const serializedTerminal = <ISerializedTerminal>{\n      type: \"Terminal\",\n      name: node.terminalType.name,\n      label: tokenLabel(node.terminalType),\n      idx: node.idx,\n    };\n\n    if (isString(node.label)) {\n      serializedTerminal.terminalLabel = node.label;\n    }\n\n    const pattern = node.terminalType.PATTERN;\n    if (node.terminalType.PATTERN) {\n      serializedTerminal.pattern = isRegExp(pattern)\n        ? (<any>pattern).source\n        : pattern;\n    }\n\n    return serializedTerminal;\n  } else if (node instanceof Rule) {\n    return <ISerializedGastRule>{\n      type: \"Rule\",\n      name: node.name,\n      orgText: node.orgText,\n      definition: convertDefinition(node.definition),\n    };\n    /* c8 ignore next 3 */\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n","import {\n  Alternation,\n  Alternative,\n  NonTerminal,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Rule,\n  Terminal,\n} from \"./model.js\";\nimport type { IProduction } from \"@chevrotain/types\";\n\nexport abstract class GAstVisitor {\n  public visit(node: IProduction): any {\n    const nodeAny: any = node;\n    switch (nodeAny.constructor) {\n      case NonTerminal:\n        return this.visitNonTerminal(nodeAny);\n      case Alternative:\n        return this.visitAlternative(nodeAny);\n      case Option:\n        return this.visitOption(nodeAny);\n      case RepetitionMandatory:\n        return this.visitRepetitionMandatory(nodeAny);\n      case RepetitionMandatoryWithSeparator:\n        return this.visitRepetitionMandatoryWithSeparator(nodeAny);\n      case RepetitionWithSeparator:\n        return this.visitRepetitionWithSeparator(nodeAny);\n      case Repetition:\n        return this.visitRepetition(nodeAny);\n      case Alternation:\n        return this.visitAlternation(nodeAny);\n      case Terminal:\n        return this.visitTerminal(nodeAny);\n      case Rule:\n        return this.visitRule(nodeAny);\n      /* c8 ignore next 2 */\n      default:\n        throw Error(\"non exhaustive match\");\n    }\n  }\n\n  /* c8 ignore next */\n  public visitNonTerminal(node: NonTerminal): any {}\n\n  /* c8 ignore next */\n  public visitAlternative(node: Alternative): any {}\n\n  /* c8 ignore next */\n  public visitOption(node: Option): any {}\n\n  /* c8 ignore next */\n  public visitRepetition(node: Repetition): any {}\n\n  /* c8 ignore next */\n  public visitRepetitionMandatory(node: RepetitionMandatory): any {}\n\n  /* c8 ignore next 3 */\n  public visitRepetitionMandatoryWithSeparator(\n    node: RepetitionMandatoryWithSeparator,\n  ): any {}\n\n  /* c8 ignore next */\n  public visitRepetitionWithSeparator(node: RepetitionWithSeparator): any {}\n\n  /* c8 ignore next */\n  public visitAlternation(node: Alternation): any {}\n\n  /* c8 ignore next */\n  public visitTerminal(node: Terminal): any {}\n\n  /* c8 ignore next */\n  public visitRule(node: Rule): any {}\n}\n","import { every, includes, some } from \"lodash-es\";\nimport {\n  AbstractProduction,\n  Alternation,\n  Alternative,\n  NonTerminal,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Rule,\n  Terminal,\n} from \"./model.js\";\nimport type { IProduction, IProductionWithOccurrence } from \"@chevrotain/types\";\n\nexport function isSequenceProd(\n  prod: IProduction,\n): prod is { definition: IProduction[] } & IProduction {\n  return (\n    prod instanceof Alternative ||\n    prod instanceof Option ||\n    prod instanceof Repetition ||\n    prod instanceof RepetitionMandatory ||\n    prod instanceof RepetitionMandatoryWithSeparator ||\n    prod instanceof RepetitionWithSeparator ||\n    prod instanceof Terminal ||\n    prod instanceof Rule\n  );\n}\n\nexport function isOptionalProd(\n  prod: IProduction,\n  alreadyVisited: NonTerminal[] = [],\n): boolean {\n  const isDirectlyOptional =\n    prod instanceof Option ||\n    prod instanceof Repetition ||\n    prod instanceof RepetitionWithSeparator;\n  if (isDirectlyOptional) {\n    return true;\n  }\n\n  // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n  // empty optional top rule\n  // may be indirectly optional ((A?B?C?) | (D?E?F?))\n  if (prod instanceof Alternation) {\n    // for OR its enough for just one of the alternatives to be optional\n    return some((<Alternation>prod).definition, (subProd: IProduction) => {\n      return isOptionalProd(subProd, alreadyVisited);\n    });\n  } else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) {\n    // avoiding stack overflow due to infinite recursion\n    return false;\n  } else if (prod instanceof AbstractProduction) {\n    if (prod instanceof NonTerminal) {\n      alreadyVisited.push(prod);\n    }\n    return every(\n      (<AbstractProduction>prod).definition,\n      (subProd: IProduction) => {\n        return isOptionalProd(subProd, alreadyVisited);\n      },\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function isBranchingProd(\n  prod: IProduction,\n): prod is { definition: IProduction[] } & IProduction {\n  return prod instanceof Alternation;\n}\n\nexport function getProductionDslName(prod: IProductionWithOccurrence): string {\n  /* istanbul ignore else */\n  if (prod instanceof NonTerminal) {\n    return \"SUBRULE\";\n  } else if (prod instanceof Option) {\n    return \"OPTION\";\n  } else if (prod instanceof Alternation) {\n    return \"OR\";\n  } else if (prod instanceof RepetitionMandatory) {\n    return \"AT_LEAST_ONE\";\n  } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n    return \"AT_LEAST_ONE_SEP\";\n  } else if (prod instanceof RepetitionWithSeparator) {\n    return \"MANY_SEP\";\n  } else if (prod instanceof Repetition) {\n    return \"MANY\";\n  } else if (prod instanceof Terminal) {\n    return \"CONSUME\";\n    /* c8 ignore next 3 */\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n","import { drop, forEach } from \"lodash-es\";\nimport {\n  Alternation,\n  Alternative,\n  NonTerminal,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Terminal,\n} from \"@chevrotain/gast\";\nimport { IProduction } from \"@chevrotain/types\";\n\n/**\n *  A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\nexport abstract class RestWalker {\n  walk(prod: { definition: IProduction[] }, prevRest: any[] = []): void {\n    forEach(prod.definition, (subProd: IProduction, index) => {\n      const currRest = drop(prod.definition, index + 1);\n      /* istanbul ignore else */\n      if (subProd instanceof NonTerminal) {\n        this.walkProdRef(subProd, currRest, prevRest);\n      } else if (subProd instanceof Terminal) {\n        this.walkTerminal(subProd, currRest, prevRest);\n      } else if (subProd instanceof Alternative) {\n        this.walkFlat(subProd, currRest, prevRest);\n      } else if (subProd instanceof Option) {\n        this.walkOption(subProd, currRest, prevRest);\n      } else if (subProd instanceof RepetitionMandatory) {\n        this.walkAtLeastOne(subProd, currRest, prevRest);\n      } else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n        this.walkAtLeastOneSep(subProd, currRest, prevRest);\n      } else if (subProd instanceof RepetitionWithSeparator) {\n        this.walkManySep(subProd, currRest, prevRest);\n      } else if (subProd instanceof Repetition) {\n        this.walkMany(subProd, currRest, prevRest);\n      } else if (subProd instanceof Alternation) {\n        this.walkOr(subProd, currRest, prevRest);\n      } else {\n        throw Error(\"non exhaustive match\");\n      }\n    });\n  }\n\n  walkTerminal(\n    terminal: Terminal,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {}\n\n  walkProdRef(\n    refProd: NonTerminal,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {}\n\n  walkFlat(\n    flatProd: Alternative,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABCDEF => after the D the rest is EF\n    const fullOrRest = currRest.concat(prevRest);\n    this.walk(flatProd, <any>fullOrRest);\n  }\n\n  walkOption(\n    optionProd: Option,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABC(DE)?F => after the (DE)? the rest is F\n    const fullOrRest = currRest.concat(prevRest);\n    this.walk(optionProd, <any>fullOrRest);\n  }\n\n  walkAtLeastOne(\n    atLeastOneProd: RepetitionMandatory,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n    const fullAtLeastOneRest: IProduction[] = [\n      new Option({ definition: atLeastOneProd.definition }),\n    ].concat(<any>currRest, <any>prevRest);\n    this.walk(atLeastOneProd, fullAtLeastOneRest);\n  }\n\n  walkAtLeastOneSep(\n    atLeastOneSepProd: RepetitionMandatoryWithSeparator,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n    const fullAtLeastOneSepRest = restForRepetitionWithSeparator(\n      atLeastOneSepProd,\n      currRest,\n      prevRest,\n    );\n    this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);\n  }\n\n  walkMany(\n    manyProd: Repetition,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n    const fullManyRest: IProduction[] = [\n      new Option({ definition: manyProd.definition }),\n    ].concat(<any>currRest, <any>prevRest);\n    this.walk(manyProd, fullManyRest);\n  }\n\n  walkManySep(\n    manySepProd: RepetitionWithSeparator,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n    const fullManySepRest = restForRepetitionWithSeparator(\n      manySepProd,\n      currRest,\n      prevRest,\n    );\n    this.walk(manySepProd, fullManySepRest);\n  }\n\n  walkOr(\n    orProd: Alternation,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n    const fullOrRest = currRest.concat(prevRest);\n    // walk all different alternatives\n    forEach(orProd.definition, (alt) => {\n      // wrapping each alternative in a single definition wrapper\n      // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows\n      // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1\n      const prodWrapper = new Alternative({ definition: [alt] });\n      this.walk(prodWrapper, <any>fullOrRest);\n    });\n  }\n}\n\nfunction restForRepetitionWithSeparator(\n  repSepProd: RepetitionWithSeparator,\n  currRest: IProduction[],\n  prevRest: IProduction[],\n) {\n  const repSepRest = [\n    new Option({\n      definition: [\n        new Terminal({ terminalType: repSepProd.separator }) as IProduction,\n      ].concat(repSepProd.definition),\n    }) as IProduction,\n  ];\n  const fullRepSepRest: IProduction[] = repSepRest.concat(currRest, prevRest);\n  return fullRepSepRest;\n}\n","import { flatten, map, uniq } from \"lodash-es\";\nimport {\n  isBranchingProd,\n  isOptionalProd,\n  isSequenceProd,\n  NonTerminal,\n  Terminal,\n} from \"@chevrotain/gast\";\nimport { IProduction, TokenType } from \"@chevrotain/types\";\n\nexport function first(prod: IProduction): TokenType[] {\n  /* istanbul ignore else */\n  if (prod instanceof NonTerminal) {\n    // this could in theory cause infinite loops if\n    // (1) prod A refs prod B.\n    // (2) prod B refs prod A\n    // (3) AB can match the empty set\n    // in other words a cycle where everything is optional so the first will keep\n    // looking ahead for the next optional part and will never exit\n    // currently there is no safeguard for this unique edge case because\n    // (1) not sure a grammar in which this can happen is useful for anything (productive)\n    return first((<NonTerminal>prod).referencedRule);\n  } else if (prod instanceof Terminal) {\n    return firstForTerminal(<Terminal>prod);\n  } else if (isSequenceProd(prod)) {\n    return firstForSequence(prod);\n  } else if (isBranchingProd(prod)) {\n    return firstForBranching(prod);\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n\nexport function firstForSequence(prod: {\n  definition: IProduction[];\n}): TokenType[] {\n  let firstSet: TokenType[] = [];\n  const seq = prod.definition;\n  let nextSubProdIdx = 0;\n  let hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n  let currSubProd;\n  // so we enter the loop at least once (if the definition is not empty\n  let isLastInnerProdOptional = true;\n  // scan a sequence until it's end or until we have found a NONE optional production in it\n  while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n    currSubProd = seq[nextSubProdIdx];\n    isLastInnerProdOptional = isOptionalProd(currSubProd);\n    firstSet = firstSet.concat(first(currSubProd));\n    nextSubProdIdx = nextSubProdIdx + 1;\n    hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n  }\n\n  return uniq(firstSet);\n}\n\nexport function firstForBranching(prod: {\n  definition: IProduction[];\n}): TokenType[] {\n  const allAlternativesFirsts: TokenType[][] = map(\n    prod.definition,\n    (innerProd) => {\n      return first(innerProd);\n    },\n  );\n  return uniq(flatten<TokenType>(allAlternativesFirsts));\n}\n\nexport function firstForTerminal(terminal: Terminal): TokenType[] {\n  return [terminal.terminalType];\n}\n","// TODO: can this be removed? where is it used?\nexport const IN = \"_~IN~_\";\n","import { RestWalker } from \"./rest.js\";\nimport { first } from \"./first.js\";\nimport { assign, forEach } from \"lodash-es\";\nimport { IN } from \"../constants.js\";\nimport { Alternative, NonTerminal, Rule, Terminal } from \"@chevrotain/gast\";\nimport { IProduction, TokenType } from \"@chevrotain/types\";\n\n// This ResyncFollowsWalker computes all of the follows required for RESYNC\n// (skipping reference production).\nexport class ResyncFollowsWalker extends RestWalker {\n  public follows: Record<string, TokenType[]> = {};\n\n  constructor(private topProd: Rule) {\n    super();\n  }\n\n  startWalking(): Record<string, TokenType[]> {\n    this.walk(this.topProd);\n    return this.follows;\n  }\n\n  walkTerminal(\n    terminal: Terminal,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // do nothing! just like in the public sector after 13:00\n  }\n\n  walkProdRef(\n    refProd: NonTerminal,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    const followName =\n      buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +\n      this.topProd.name;\n    const fullRest: IProduction[] = currRest.concat(prevRest);\n    const restProd = new Alternative({ definition: fullRest });\n    const t_in_topProd_follows = first(restProd);\n    this.follows[followName] = t_in_topProd_follows;\n  }\n}\n\nexport function computeAllProdsFollows(\n  topProductions: Rule[],\n): Record<string, TokenType[]> {\n  const reSyncFollows = {};\n\n  forEach(topProductions, (topProd) => {\n    const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();\n    assign(reSyncFollows, currRefsFollow);\n  });\n  return reSyncFollows;\n}\n\nexport function buildBetweenProdsFollowPrefix(\n  inner: Rule,\n  occurenceInParent: number,\n): string {\n  return inner.name + occurenceInParent + IN;\n}\n\nexport function buildInProdFollowPrefix(terminal: Terminal): string {\n  const terminalName = terminal.terminalType.name;\n  return terminalName + terminal.idx + IN;\n}\n","import {\n  Alternative,\n  Assertion,\n  Atom,\n  Disjunction,\n  RegExpParser,\n  RegExpPattern,\n} from \"@chevrotain/regexp-to-ast\";\n\nlet regExpAstCache: { [regex: string]: RegExpPattern } = {};\nconst regExpParser = new RegExpParser();\n\n// this should be moved to regexp-to-ast\nexport type ASTNode =\n  | RegExpPattern\n  | Disjunction\n  | Alternative\n  | Assertion\n  | Atom;\n\nexport function getRegExpAst(regExp: RegExp): RegExpPattern {\n  const regExpStr = regExp.toString();\n  if (regExpAstCache.hasOwnProperty(regExpStr)) {\n    return regExpAstCache[regExpStr];\n  } else {\n    const regExpAst = regExpParser.pattern(regExpStr);\n    regExpAstCache[regExpStr] = regExpAst;\n    return regExpAst;\n  }\n}\n\nexport function clearRegExpParserCache() {\n  regExpAstCache = {};\n}\n","import {\n  Alternative,\n  Atom,\n  BaseRegExpVisitor,\n  Character,\n  Disjunction,\n  Group,\n  Set,\n} from \"@chevrotain/regexp-to-ast\";\nimport { every, find, forEach, includes, isArray, values } from \"lodash-es\";\nimport { PRINT_ERROR, PRINT_WARNING } from \"@chevrotain/utils\";\nimport { ASTNode, getRegExpAst } from \"./reg_exp_parser.js\";\nimport { charCodeToOptimizedIndex, minOptimizationVal } from \"./lexer.js\";\n\nconst complementErrorMessage =\n  \"Complement Sets are not supported for first char optimization\";\nexport const failedOptimizationPrefixMsg =\n  'Unable to use \"first char\" lexer optimizations:\\n';\n\nexport function getOptimizedStartCodesIndices(\n  regExp: RegExp,\n  ensureOptimizations = false,\n): number[] {\n  try {\n    const ast = getRegExpAst(regExp);\n    const firstChars = firstCharOptimizedIndices(\n      ast.value,\n      {},\n      ast.flags.ignoreCase,\n    );\n    return firstChars;\n  } catch (e) {\n    /* istanbul ignore next */\n    // Testing this relies on the regexp-to-ast library having a bug... */\n    // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n    if (e.message === complementErrorMessage) {\n      if (ensureOptimizations) {\n        PRINT_WARNING(\n          `${failedOptimizationPrefixMsg}` +\n            `\\tUnable to optimize: < ${regExp.toString()} >\\n` +\n            \"\\tComplement Sets cannot be automatically optimized.\\n\" +\n            \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n            \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.\",\n        );\n      }\n    } else {\n      let msgSuffix = \"\";\n      if (ensureOptimizations) {\n        msgSuffix =\n          \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n          \"\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.\";\n      }\n      PRINT_ERROR(\n        `${failedOptimizationPrefixMsg}\\n` +\n          `\\tFailed parsing: < ${regExp.toString()} >\\n` +\n          `\\tUsing the @chevrotain/regexp-to-ast library\\n` +\n          \"\\tPlease open an issue at: https://github.com/chevrotain/chevrotain/issues\" +\n          msgSuffix,\n      );\n    }\n  }\n\n  return [];\n}\n\nexport function firstCharOptimizedIndices(\n  ast: ASTNode,\n  result: { [charCode: number]: number },\n  ignoreCase: boolean,\n): number[] {\n  switch (ast.type) {\n    case \"Disjunction\":\n      for (let i = 0; i < ast.value.length; i++) {\n        firstCharOptimizedIndices(ast.value[i], result, ignoreCase);\n      }\n      break;\n    case \"Alternative\":\n      const terms = ast.value;\n      for (let i = 0; i < terms.length; i++) {\n        const term = terms[i];\n\n        // skip terms that cannot effect the first char results\n        switch (term.type) {\n          case \"EndAnchor\":\n          // A group back reference cannot affect potential starting char.\n          // because if a back reference is the first production than automatically\n          // the group being referenced has had to come BEFORE so its codes have already been added\n          case \"GroupBackReference\":\n          // assertions do not affect potential starting codes\n          case \"Lookahead\":\n          case \"NegativeLookahead\":\n          case \"StartAnchor\":\n          case \"WordBoundary\":\n          case \"NonWordBoundary\":\n            continue;\n        }\n\n        const atom = term;\n        switch (atom.type) {\n          case \"Character\":\n            addOptimizedIdxToResult(atom.value, result, ignoreCase);\n            break;\n          case \"Set\":\n            if (atom.complement === true) {\n              throw Error(complementErrorMessage);\n            }\n            forEach(atom.value, (code) => {\n              if (typeof code === \"number\") {\n                addOptimizedIdxToResult(code, result, ignoreCase);\n              } else {\n                // range\n                const range = code as any;\n                // cannot optimize when ignoreCase is\n                if (ignoreCase === true) {\n                  for (\n                    let rangeCode = range.from;\n                    rangeCode <= range.to;\n                    rangeCode++\n                  ) {\n                    addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n                  }\n                }\n                // Optimization (2 orders of magnitude less work for very large ranges)\n                else {\n                  // handle unoptimized values\n                  for (\n                    let rangeCode = range.from;\n                    rangeCode <= range.to && rangeCode < minOptimizationVal;\n                    rangeCode++\n                  ) {\n                    addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n                  }\n\n                  // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n                  if (range.to >= minOptimizationVal) {\n                    const minUnOptVal =\n                      range.from >= minOptimizationVal\n                        ? range.from\n                        : minOptimizationVal;\n                    const maxUnOptVal = range.to;\n                    const minOptIdx = charCodeToOptimizedIndex(minUnOptVal);\n                    const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal);\n\n                    for (\n                      let currOptIdx = minOptIdx;\n                      currOptIdx <= maxOptIdx;\n                      currOptIdx++\n                    ) {\n                      result[currOptIdx] = currOptIdx;\n                    }\n                  }\n                }\n              }\n            });\n            break;\n          case \"Group\":\n            firstCharOptimizedIndices(atom.value, result, ignoreCase);\n            break;\n          /* istanbul ignore next */\n          default:\n            throw Error(\"Non Exhaustive Match\");\n        }\n\n        // reached a mandatory production, no more **start** codes can be found on this alternative\n        const isOptionalQuantifier =\n          atom.quantifier !== undefined && atom.quantifier.atLeast === 0;\n        if (\n          // A group may be optional due to empty contents /(?:)/\n          // or if everything inside it is optional /((a)?)/\n          (atom.type === \"Group\" && isWholeOptional(atom) === false) ||\n          // If this term is not a group it may only be optional if it has an optional quantifier\n          (atom.type !== \"Group\" && isOptionalQuantifier === false)\n        ) {\n          break;\n        }\n      }\n      break;\n    /* istanbul ignore next */\n    default:\n      throw Error(\"non exhaustive match!\");\n  }\n\n  // console.log(Object.keys(result).length)\n  return values(result);\n}\n\nfunction addOptimizedIdxToResult(\n  code: number,\n  result: { [charCode: number]: number },\n  ignoreCase: boolean,\n) {\n  const optimizedCharIdx = charCodeToOptimizedIndex(code);\n  result[optimizedCharIdx] = optimizedCharIdx;\n\n  if (ignoreCase === true) {\n    handleIgnoreCase(code, result);\n  }\n}\n\nfunction handleIgnoreCase(\n  code: number,\n  result: { [charCode: number]: number },\n) {\n  const char = String.fromCharCode(code);\n  const upperChar = char.toUpperCase();\n  /* istanbul ignore else */\n  if (upperChar !== char) {\n    const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0));\n    result[optimizedCharIdx] = optimizedCharIdx;\n  } else {\n    const lowerChar = char.toLowerCase();\n    if (lowerChar !== char) {\n      const optimizedCharIdx = charCodeToOptimizedIndex(\n        lowerChar.charCodeAt(0),\n      );\n      result[optimizedCharIdx] = optimizedCharIdx;\n    }\n  }\n}\n\nfunction findCode(setNode: Set, targetCharCodes: number[]) {\n  return find(setNode.value, (codeOrRange) => {\n    if (typeof codeOrRange === \"number\") {\n      return includes(targetCharCodes, codeOrRange);\n    } else {\n      // range\n      const range = <any>codeOrRange;\n      return (\n        find(\n          targetCharCodes,\n          (targetCode) => range.from <= targetCode && targetCode <= range.to,\n        ) !== undefined\n      );\n    }\n  });\n}\n\nfunction isWholeOptional(ast: any): boolean {\n  const quantifier = (ast as Atom).quantifier;\n  if (quantifier && quantifier.atLeast === 0) {\n    return true;\n  }\n\n  if (!ast.value) {\n    return false;\n  }\n\n  return isArray(ast.value)\n    ? every(ast.value, isWholeOptional)\n    : isWholeOptional(ast.value);\n}\n\nclass CharCodeFinder extends BaseRegExpVisitor {\n  found: boolean = false;\n\n  constructor(private targetCharCodes: number[]) {\n    super();\n  }\n\n  visitChildren(node: ASTNode) {\n    // No need to keep looking...\n    if (this.found === true) {\n      return;\n    }\n\n    // switch lookaheads as they do not actually consume any characters thus\n    // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n    switch (node.type) {\n      case \"Lookahead\":\n        this.visitLookahead(node);\n        return;\n      case \"NegativeLookahead\":\n        this.visitNegativeLookahead(node);\n        return;\n    }\n\n    super.visitChildren(node);\n  }\n\n  visitCharacter(node: Character) {\n    if (includes(this.targetCharCodes, node.value)) {\n      this.found = true;\n    }\n  }\n\n  visitSet(node: Set) {\n    if (node.complement) {\n      if (findCode(node, this.targetCharCodes) === undefined) {\n        this.found = true;\n      }\n    } else {\n      if (findCode(node, this.targetCharCodes) !== undefined) {\n        this.found = true;\n      }\n    }\n  }\n}\n\nexport function canMatchCharCode(\n  charCodes: number[],\n  pattern: RegExp | string,\n) {\n  if (pattern instanceof RegExp) {\n    const ast = getRegExpAst(pattern);\n    const charCodeFinder = new CharCodeFinder(charCodes);\n    charCodeFinder.visit(ast);\n    return charCodeFinder.found;\n  } else {\n    return (\n      find(<any>pattern, (char) => {\n        return includes(charCodes, (<string>char).charCodeAt(0));\n      }) !== undefined\n    );\n  }\n}\n","import { BaseRegExpVisitor } from \"@chevrotain/regexp-to-ast\";\nimport {\n  IRegExpExec,\n  Lexer,\n  LexerDefinitionErrorType,\n} from \"./lexer_public.js\";\nimport {\n  compact,\n  defaults,\n  difference,\n  filter,\n  find,\n  first,\n  flatten,\n  forEach,\n  has,\n  includes,\n  indexOf,\n  isArray,\n  isEmpty,\n  isFunction,\n  isRegExp,\n  isString,\n  isUndefined,\n  keys,\n  map,\n  reduce,\n  reject,\n  values,\n} from \"lodash-es\";\nimport { PRINT_ERROR } from \"@chevrotain/utils\";\nimport {\n  canMatchCharCode,\n  failedOptimizationPrefixMsg,\n  getOptimizedStartCodesIndices,\n} from \"./reg_exp.js\";\nimport {\n  ILexerDefinitionError,\n  ILineTerminatorsTester,\n  IMultiModeLexerDefinition,\n  IToken,\n  TokenType,\n} from \"@chevrotain/types\";\nimport { getRegExpAst } from \"./reg_exp_parser.js\";\n\nconst PATTERN = \"PATTERN\";\nexport const DEFAULT_MODE = \"defaultMode\";\nexport const MODES = \"modes\";\n\nexport interface IPatternConfig {\n  pattern: IRegExpExec | string;\n  longerAlt: number[] | undefined;\n  canLineTerminator: boolean;\n  isCustom: boolean;\n  short: number | false;\n  group: string | undefined | false;\n  push: string | undefined;\n  pop: boolean;\n  tokenType: TokenType;\n  tokenTypeIdx: number;\n}\n\nexport interface IAnalyzeResult {\n  patternIdxToConfig: IPatternConfig[];\n  charCodeToPatternIdxToConfig: { [charCode: number]: IPatternConfig[] };\n  emptyGroups: { [groupName: string]: IToken[] };\n  hasCustom: boolean;\n  canBeOptimized: boolean;\n}\n\nexport let SUPPORT_STICKY =\n  typeof (<any>new RegExp(\"(?:)\")).sticky === \"boolean\";\n\nexport function disableSticky() {\n  SUPPORT_STICKY = false;\n}\n\nexport function enableSticky() {\n  SUPPORT_STICKY = true;\n}\n\nexport function analyzeTokenTypes(\n  tokenTypes: TokenType[],\n  options: {\n    positionTracking?: \"full\" | \"onlyStart\" | \"onlyOffset\";\n    ensureOptimizations?: boolean;\n    lineTerminatorCharacters?: (number | string)[];\n    // TODO: should `useSticky` be an argument here?\n    useSticky?: boolean;\n    safeMode?: boolean;\n    tracer?: (msg: string, action: () => void) => void;\n  },\n): IAnalyzeResult {\n  options = defaults(options, {\n    useSticky: SUPPORT_STICKY,\n    debug: false as boolean,\n    safeMode: false as boolean,\n    positionTracking: \"full\",\n    lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n    tracer: (msg: string, action: Function) => action(),\n  });\n\n  const tracer = options.tracer!;\n\n  tracer(\"initCharCodeToOptimizedIndexMap\", () => {\n    initCharCodeToOptimizedIndexMap();\n  });\n\n  let onlyRelevantTypes: TokenType[];\n  tracer(\"Reject Lexer.NA\", () => {\n    onlyRelevantTypes = reject(tokenTypes, (currType) => {\n      return currType[PATTERN] === Lexer.NA;\n    });\n  });\n\n  let hasCustom = false;\n  let allTransformedPatterns: (IRegExpExec | string)[];\n  tracer(\"Transform Patterns\", () => {\n    hasCustom = false;\n    allTransformedPatterns = map(\n      onlyRelevantTypes,\n      (currType): IRegExpExec | string => {\n        const currPattern = currType[PATTERN];\n\n        /* istanbul ignore else */\n        if (isRegExp(currPattern)) {\n          const regExpSource = currPattern.source;\n          if (\n            regExpSource.length === 1 &&\n            // only these regExp meta characters which can appear in a length one regExp\n            regExpSource !== \"^\" &&\n            regExpSource !== \"$\" &&\n            regExpSource !== \".\" &&\n            !currPattern.ignoreCase\n          ) {\n            return regExpSource;\n          } else if (\n            regExpSource.length === 2 &&\n            regExpSource[0] === \"\\\\\" &&\n            // not a meta character\n            !includes(\n              [\n                \"d\",\n                \"D\",\n                \"s\",\n                \"S\",\n                \"t\",\n                \"r\",\n                \"n\",\n                \"t\",\n                \"0\",\n                \"c\",\n                \"b\",\n                \"B\",\n                \"f\",\n                \"v\",\n                \"w\",\n                \"W\",\n              ],\n              regExpSource[1],\n            )\n          ) {\n            // escaped meta Characters: /\\+/ /\\[/\n            // or redundant escaping: /\\a/\n            // without the escaping \"\\\"\n            return regExpSource[1];\n          } else {\n            return options.useSticky\n              ? addStickyFlag(currPattern)\n              : addStartOfInput(currPattern);\n          }\n        } else if (isFunction(currPattern)) {\n          hasCustom = true;\n          // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n          return { exec: currPattern };\n        } else if (typeof currPattern === \"object\") {\n          hasCustom = true;\n          // ICustomPattern\n          return currPattern;\n        } else if (typeof currPattern === \"string\") {\n          if (currPattern.length === 1) {\n            return currPattern;\n          } else {\n            const escapedRegExpString = currPattern.replace(\n              /[\\\\^$.*+?()[\\]{}|]/g,\n              \"\\\\$&\",\n            );\n            const wrappedRegExp = new RegExp(escapedRegExpString);\n            return options.useSticky\n              ? addStickyFlag(wrappedRegExp)\n              : addStartOfInput(wrappedRegExp);\n          }\n        } else {\n          throw Error(\"non exhaustive match\");\n        }\n      },\n    );\n  });\n\n  let patternIdxToType: number[];\n  let patternIdxToGroup: (string | undefined | false)[];\n  let patternIdxToLongerAltIdxArr: (number[] | undefined)[];\n  let patternIdxToPushMode: (string | undefined)[];\n  let patternIdxToPopMode: boolean[];\n  tracer(\"misc mapping\", () => {\n    patternIdxToType = map(\n      onlyRelevantTypes,\n      (currType) => currType.tokenTypeIdx!,\n    );\n\n    patternIdxToGroup = map(onlyRelevantTypes, (clazz: any) => {\n      const groupName = clazz.GROUP;\n      /* istanbul ignore next */\n      if (groupName === Lexer.SKIPPED) {\n        return undefined;\n      } else if (isString(groupName)) {\n        return groupName;\n      } else if (isUndefined(groupName)) {\n        return false;\n      } else {\n        throw Error(\"non exhaustive match\");\n      }\n    });\n\n    patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz: any) => {\n      const longerAltType = clazz.LONGER_ALT;\n\n      if (longerAltType) {\n        const longerAltIdxArr = isArray(longerAltType)\n          ? map(longerAltType, (type: any) => indexOf(onlyRelevantTypes, type))\n          : [indexOf(onlyRelevantTypes, longerAltType)];\n        return longerAltIdxArr;\n      }\n    });\n\n    patternIdxToPushMode = map(\n      onlyRelevantTypes,\n      (clazz: any) => clazz.PUSH_MODE,\n    );\n\n    patternIdxToPopMode = map(onlyRelevantTypes, (clazz: any) =>\n      has(clazz, \"POP_MODE\"),\n    );\n  });\n\n  let patternIdxToCanLineTerminator: boolean[];\n  tracer(\"Line Terminator Handling\", () => {\n    const lineTerminatorCharCodes = getCharCodes(\n      options.lineTerminatorCharacters!,\n    );\n    patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false);\n    if (options.positionTracking !== \"onlyOffset\") {\n      patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => {\n        if (has(tokType, \"LINE_BREAKS\")) {\n          return !!tokType.LINE_BREAKS;\n        } else {\n          return (\n            checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false &&\n            canMatchCharCode(\n              lineTerminatorCharCodes,\n              tokType.PATTERN as RegExp | string,\n            )\n          );\n        }\n      });\n    }\n  });\n\n  let patternIdxToIsCustom: boolean[];\n  let patternIdxToShort: (number | false)[];\n  let emptyGroups!: { [groupName: string]: IToken[] };\n  let patternIdxToConfig!: IPatternConfig[];\n  tracer(\"Misc Mapping #2\", () => {\n    patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern);\n    patternIdxToShort = map(allTransformedPatterns, isShortPattern);\n\n    emptyGroups = reduce(\n      onlyRelevantTypes,\n      (acc, clazz: any) => {\n        const groupName = clazz.GROUP;\n        if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n          acc[groupName] = [];\n        }\n        return acc;\n      },\n      {} as { [groupName: string]: IToken[] },\n    );\n\n    patternIdxToConfig = map(\n      allTransformedPatterns,\n      (x, idx): IPatternConfig => {\n        return {\n          pattern: allTransformedPatterns[idx],\n          longerAlt: patternIdxToLongerAltIdxArr[idx],\n          canLineTerminator: patternIdxToCanLineTerminator[idx],\n          isCustom: patternIdxToIsCustom[idx],\n          short: patternIdxToShort[idx],\n          group: patternIdxToGroup[idx],\n          push: patternIdxToPushMode[idx],\n          pop: patternIdxToPopMode[idx],\n          tokenTypeIdx: patternIdxToType[idx],\n          tokenType: onlyRelevantTypes[idx],\n        };\n      },\n    );\n  });\n\n  let canBeOptimized = true;\n  let charCodeToPatternIdxToConfig: { [charCode: number]: IPatternConfig[] } =\n    [];\n\n  if (!options.safeMode) {\n    tracer(\"First Char Optimization\", () => {\n      charCodeToPatternIdxToConfig = reduce(\n        onlyRelevantTypes,\n        (result, currTokType, idx) => {\n          if (typeof currTokType.PATTERN === \"string\") {\n            const charCode = currTokType.PATTERN.charCodeAt(0);\n            const optimizedIdx = charCodeToOptimizedIndex(charCode);\n            addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]);\n          } else if (isArray(currTokType.START_CHARS_HINT)) {\n            let lastOptimizedIdx: number;\n            forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n              const charCode =\n                typeof charOrInt === \"string\"\n                  ? charOrInt.charCodeAt(0)\n                  : charOrInt;\n              const currOptimizedIdx = charCodeToOptimizedIndex(charCode);\n              // Avoid adding the config multiple times\n              /* istanbul ignore else */\n              // - Difficult to check this scenario effects as it is only a performance\n              //   optimization that does not change correctness\n              if (lastOptimizedIdx !== currOptimizedIdx) {\n                lastOptimizedIdx = currOptimizedIdx;\n                addToMapOfArrays(\n                  result,\n                  currOptimizedIdx,\n                  patternIdxToConfig[idx],\n                );\n              }\n            });\n          } else if (isRegExp(currTokType.PATTERN)) {\n            if (currTokType.PATTERN.unicode) {\n              canBeOptimized = false;\n              if (options.ensureOptimizations) {\n                PRINT_ERROR(\n                  `${failedOptimizationPrefixMsg}` +\n                    `\\tUnable to analyze < ${currTokType.PATTERN.toString()} > pattern.\\n` +\n                    \"\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n\" +\n                    \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n                    \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE\",\n                );\n              }\n            } else {\n              const optimizedCodes = getOptimizedStartCodesIndices(\n                currTokType.PATTERN,\n                options.ensureOptimizations,\n              );\n              /* istanbul ignore if */\n              // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n              // the first should be a different validation and the second cannot be tested.\n              if (isEmpty(optimizedCodes)) {\n                // we cannot understand what codes may start possible matches\n                // The optimization correctness requires knowing start codes for ALL patterns.\n                // Not actually sure this is an error, no debug message\n                canBeOptimized = false;\n              }\n              forEach(optimizedCodes, (code) => {\n                addToMapOfArrays(result, code, patternIdxToConfig[idx]);\n              });\n            }\n          } else {\n            if (options.ensureOptimizations) {\n              PRINT_ERROR(\n                `${failedOptimizationPrefixMsg}` +\n                  `\\tTokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter.\\n` +\n                  \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n                  \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE\",\n              );\n            }\n            canBeOptimized = false;\n          }\n\n          return result;\n        },\n        [] as { [charCode: number]: IPatternConfig[] },\n      );\n    });\n  }\n\n  return {\n    emptyGroups: emptyGroups,\n    patternIdxToConfig: patternIdxToConfig,\n    charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n    hasCustom: hasCustom,\n    canBeOptimized: canBeOptimized,\n  };\n}\n\nexport function validatePatterns(\n  tokenTypes: TokenType[],\n  validModesNames: string[],\n): ILexerDefinitionError[] {\n  let errors: ILexerDefinitionError[] = [];\n\n  const missingResult = findMissingPatterns(tokenTypes);\n  errors = errors.concat(missingResult.errors);\n\n  const invalidResult = findInvalidPatterns(missingResult.valid);\n  const validTokenTypes = invalidResult.valid;\n  errors = errors.concat(invalidResult.errors);\n\n  errors = errors.concat(validateRegExpPattern(validTokenTypes));\n\n  errors = errors.concat(findInvalidGroupType(validTokenTypes));\n\n  errors = errors.concat(\n    findModesThatDoNotExist(validTokenTypes, validModesNames),\n  );\n\n  errors = errors.concat(findUnreachablePatterns(validTokenTypes));\n\n  return errors;\n}\n\nfunction validateRegExpPattern(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  let errors: ILexerDefinitionError[] = [];\n  const withRegExpPatterns = filter(tokenTypes, (currTokType) =>\n    isRegExp(currTokType[PATTERN]),\n  );\n\n  errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));\n\n  errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));\n\n  errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));\n\n  errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));\n\n  errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));\n\n  return errors;\n}\n\nexport interface ILexerFilterResult {\n  errors: ILexerDefinitionError[];\n  valid: TokenType[];\n}\n\nexport function findMissingPatterns(\n  tokenTypes: TokenType[],\n): ILexerFilterResult {\n  const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n    return !has(currType, PATTERN);\n  });\n\n  const errors = map(tokenTypesWithMissingPattern, (currType) => {\n    return {\n      message:\n        \"Token Type: ->\" +\n        currType.name +\n        \"<- missing static 'PATTERN' property\",\n      type: LexerDefinitionErrorType.MISSING_PATTERN,\n      tokenTypes: [currType],\n    };\n  });\n\n  const valid = difference(tokenTypes, tokenTypesWithMissingPattern);\n  return { errors, valid };\n}\n\nexport function findInvalidPatterns(\n  tokenTypes: TokenType[],\n): ILexerFilterResult {\n  const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n    const pattern = currType[PATTERN];\n    return (\n      !isRegExp(pattern) &&\n      !isFunction(pattern) &&\n      !has(pattern, \"exec\") &&\n      !isString(pattern)\n    );\n  });\n\n  const errors = map(tokenTypesWithInvalidPattern, (currType) => {\n    return {\n      message:\n        \"Token Type: ->\" +\n        currType.name +\n        \"<- static 'PATTERN' can only be a RegExp, a\" +\n        \" Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",\n      type: LexerDefinitionErrorType.INVALID_PATTERN,\n      tokenTypes: [currType],\n    };\n  });\n\n  const valid = difference(tokenTypes, tokenTypesWithInvalidPattern);\n  return { errors, valid };\n}\n\nconst end_of_input = /[^\\\\][$]/;\n\nexport function findEndOfInputAnchor(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  class EndAnchorFinder extends BaseRegExpVisitor {\n    found = false;\n\n    visitEndAnchor(node: unknown) {\n      this.found = true;\n    }\n  }\n\n  const invalidRegex = filter(tokenTypes, (currType) => {\n    const pattern = currType.PATTERN;\n\n    try {\n      const regexpAst = getRegExpAst(pattern as RegExp);\n      const endAnchorVisitor = new EndAnchorFinder();\n      endAnchorVisitor.visit(regexpAst);\n\n      return endAnchorVisitor.found;\n    } catch (e) {\n      // old behavior in case of runtime exceptions with regexp-to-ast.\n      /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n      return end_of_input.test((pattern as RegExp).source);\n    }\n  });\n\n  const errors = map(invalidRegex, (currType) => {\n    return {\n      message:\n        \"Unexpected RegExp Anchor Error:\\n\" +\n        \"\\tToken Type: ->\" +\n        currType.name +\n        \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n        \"\\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n        \"\\tfor details.\",\n      type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n      tokenTypes: [currType],\n    };\n  });\n\n  return errors;\n}\n\nexport function findEmptyMatchRegExps(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  const matchesEmptyString = filter(tokenTypes, (currType) => {\n    const pattern = currType.PATTERN as RegExp;\n    return pattern.test(\"\");\n  });\n\n  const errors = map(matchesEmptyString, (currType) => {\n    return {\n      message:\n        \"Token Type: ->\" +\n        currType.name +\n        \"<- static 'PATTERN' must not match an empty string\",\n      type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n      tokenTypes: [currType],\n    };\n  });\n\n  return errors;\n}\n\nconst start_of_input = /[^\\\\[][\\^]|^\\^/;\n\nexport function findStartOfInputAnchor(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  class StartAnchorFinder extends BaseRegExpVisitor {\n    found = false;\n\n    visitStartAnchor(node: unknown) {\n      this.found = true;\n    }\n  }\n\n  const invalidRegex = filter(tokenTypes, (currType) => {\n    const pattern = currType.PATTERN as RegExp;\n    try {\n      const regexpAst = getRegExpAst(pattern);\n      const startAnchorVisitor = new StartAnchorFinder();\n      startAnchorVisitor.visit(regexpAst);\n\n      return startAnchorVisitor.found;\n    } catch (e) {\n      // old behavior in case of runtime exceptions with regexp-to-ast.\n      /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n      return start_of_input.test(pattern.source);\n    }\n  });\n\n  const errors = map(invalidRegex, (currType) => {\n    return {\n      message:\n        \"Unexpected RegExp Anchor Error:\\n\" +\n        \"\\tToken Type: ->\" +\n        currType.name +\n        \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n        \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n        \"\\tfor details.\",\n      type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n      tokenTypes: [currType],\n    };\n  });\n\n  return errors;\n}\n\nexport function findUnsupportedFlags(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  const invalidFlags = filter(tokenTypes, (currType) => {\n    const pattern = currType[PATTERN];\n    return pattern instanceof RegExp && (pattern.multiline || pattern.global);\n  });\n\n  const errors = map(invalidFlags, (currType) => {\n    return {\n      message:\n        \"Token Type: ->\" +\n        currType.name +\n        \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n      type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n      tokenTypes: [currType],\n    };\n  });\n\n  return errors;\n}\n\n// This can only test for identical duplicate RegExps, not semantically equivalent ones.\nexport function findDuplicatePatterns(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  const found: TokenType[] = [];\n  let identicalPatterns = map(tokenTypes, (outerType: any) => {\n    return reduce(\n      tokenTypes,\n      (result, innerType) => {\n        if (\n          outerType.PATTERN.source === (innerType.PATTERN as RegExp).source &&\n          !includes(found, innerType) &&\n          innerType.PATTERN !== Lexer.NA\n        ) {\n          // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n          // in essence we are creating Equivalence classes on equality relation.\n          found.push(innerType);\n          result.push(innerType);\n          return result;\n        }\n        return result;\n      },\n      [] as TokenType[],\n    );\n  });\n\n  identicalPatterns = compact(identicalPatterns);\n\n  const duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n    return currIdenticalSet.length > 1;\n  });\n\n  const errors = map(duplicatePatterns, (setOfIdentical: any) => {\n    const tokenTypeNames = map(setOfIdentical, (currType: any) => {\n      return currType.name;\n    });\n\n    const dupPatternSrc = (<any>first(setOfIdentical)).PATTERN;\n    return {\n      message:\n        `The same RegExp pattern ->${dupPatternSrc}<-` +\n        `has been used in all of the following Token Types: ${tokenTypeNames.join(\n          \", \",\n        )} <-`,\n      type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n      tokenTypes: setOfIdentical,\n    };\n  });\n\n  return errors;\n}\n\nexport function findInvalidGroupType(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  const invalidTypes = filter(tokenTypes, (clazz: any) => {\n    if (!has(clazz, \"GROUP\")) {\n      return false;\n    }\n    const group = clazz.GROUP;\n\n    return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group);\n  });\n\n  const errors = map(invalidTypes, (currType) => {\n    return {\n      message:\n        \"Token Type: ->\" +\n        currType.name +\n        \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n      type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n      tokenTypes: [currType],\n    };\n  });\n\n  return errors;\n}\n\nexport function findModesThatDoNotExist(\n  tokenTypes: TokenType[],\n  validModes: string[],\n): ILexerDefinitionError[] {\n  const invalidModes = filter(tokenTypes, (clazz: any) => {\n    return (\n      clazz.PUSH_MODE !== undefined && !includes(validModes, clazz.PUSH_MODE)\n    );\n  });\n\n  const errors = map(invalidModes, (tokType) => {\n    const msg =\n      `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-` +\n      `which does not exist`;\n    return {\n      message: msg,\n      type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n      tokenTypes: [tokType],\n    };\n  });\n\n  return errors;\n}\n\nexport function findUnreachablePatterns(\n  tokenTypes: TokenType[],\n): ILexerDefinitionError[] {\n  const errors: ILexerDefinitionError[] = [];\n\n  const canBeTested = reduce(\n    tokenTypes,\n    (result, tokType, idx) => {\n      const pattern = tokType.PATTERN;\n\n      if (pattern === Lexer.NA) {\n        return result;\n      }\n\n      // a more comprehensive validation for all forms of regExps would require\n      // deeper regExp analysis capabilities\n      if (isString(pattern)) {\n        result.push({ str: pattern, idx, tokenType: tokType });\n      } else if (isRegExp(pattern) && noMetaChar(pattern)) {\n        result.push({ str: pattern.source, idx, tokenType: tokType });\n      }\n      return result;\n    },\n    [] as { str: string; idx: number; tokenType: TokenType }[],\n  );\n\n  forEach(tokenTypes, (tokType, testIdx) => {\n    forEach(canBeTested, ({ str, idx, tokenType }) => {\n      if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n        const msg =\n          `Token: ->${tokenType.name}<- can never be matched.\\n` +\n          `Because it appears AFTER the Token Type ->${tokType.name}<-` +\n          `in the lexer's definition.\\n` +\n          `See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;\n        errors.push({\n          message: msg,\n          type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n          tokenTypes: [tokType, tokenType],\n        });\n      }\n    });\n  });\n\n  return errors;\n}\n\nfunction testTokenType(str: string, pattern: any): boolean {\n  /* istanbul ignore else */\n  if (isRegExp(pattern)) {\n    const regExpArray = pattern.exec(str);\n    return regExpArray !== null && regExpArray.index === 0;\n  } else if (isFunction(pattern)) {\n    // maintain the API of custom patterns\n    return pattern(str, 0, [], {});\n  } else if (has(pattern, \"exec\")) {\n    // maintain the API of custom patterns\n    return pattern.exec(str, 0, [], {});\n  } else if (typeof pattern === \"string\") {\n    return pattern === str;\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n\nfunction noMetaChar(regExp: RegExp): boolean {\n  //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n  const metaChars = [\n    \".\",\n    \"\\\\\",\n    \"[\",\n    \"]\",\n    \"|\",\n    \"^\",\n    \"$\",\n    \"(\",\n    \")\",\n    \"?\",\n    \"*\",\n    \"+\",\n    \"{\",\n  ];\n  return (\n    find(metaChars, (char) => regExp.source.indexOf(char) !== -1) === undefined\n  );\n}\n\nexport function addStartOfInput(pattern: RegExp): RegExp {\n  const flags = pattern.ignoreCase ? \"i\" : \"\";\n  // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n  // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n  return new RegExp(`^(?:${pattern.source})`, flags);\n}\n\nexport function addStickyFlag(pattern: RegExp): RegExp {\n  const flags = pattern.ignoreCase ? \"iy\" : \"y\";\n  // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n  // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n  return new RegExp(`${pattern.source}`, flags);\n}\n\nexport function performRuntimeChecks(\n  lexerDefinition: IMultiModeLexerDefinition,\n  trackLines: boolean,\n  lineTerminatorCharacters: (number | string)[],\n): ILexerDefinitionError[] {\n  const errors: ILexerDefinitionError[] = [];\n\n  // some run time checks to help the end users.\n  if (!has(lexerDefinition, DEFAULT_MODE)) {\n    errors.push({\n      message:\n        \"A MultiMode Lexer cannot be initialized without a <\" +\n        DEFAULT_MODE +\n        \"> property in its definition\\n\",\n      type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE,\n    });\n  }\n  if (!has(lexerDefinition, MODES)) {\n    errors.push({\n      message:\n        \"A MultiMode Lexer cannot be initialized without a <\" +\n        MODES +\n        \"> property in its definition\\n\",\n      type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY,\n    });\n  }\n\n  if (\n    has(lexerDefinition, MODES) &&\n    has(lexerDefinition, DEFAULT_MODE) &&\n    !has(lexerDefinition.modes, lexerDefinition.defaultMode)\n  ) {\n    errors.push({\n      message:\n        `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>` +\n        `which does not exist\\n`,\n      type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST,\n    });\n  }\n\n  if (has(lexerDefinition, MODES)) {\n    forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n      forEach(currModeValue, (currTokType, currIdx) => {\n        if (isUndefined(currTokType)) {\n          errors.push({\n            message:\n              `A Lexer cannot be initialized using an undefined Token Type. Mode:` +\n              `<${currModeName}> at index: <${currIdx}>\\n`,\n            type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED,\n          });\n        } else if (has(currTokType, \"LONGER_ALT\")) {\n          const longerAlt = isArray(currTokType.LONGER_ALT)\n            ? currTokType.LONGER_ALT\n            : [currTokType.LONGER_ALT];\n          forEach(longerAlt, (currLongerAlt) => {\n            if (\n              !isUndefined(currLongerAlt) &&\n              !includes(currModeValue, currLongerAlt)\n            ) {\n              errors.push({\n                message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}>\\n`,\n                type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE,\n              });\n            }\n          });\n        }\n      });\n    });\n  }\n\n  return errors;\n}\n\nexport function performWarningRuntimeChecks(\n  lexerDefinition: IMultiModeLexerDefinition,\n  trackLines: boolean,\n  lineTerminatorCharacters: (number | string)[],\n): ILexerDefinitionError[] {\n  const warnings = [];\n  let hasAnyLineBreak = false;\n  const allTokenTypes = compact(flatten(values(lexerDefinition.modes)));\n\n  const concreteTokenTypes = reject(\n    allTokenTypes,\n    (currType) => currType[PATTERN] === Lexer.NA,\n  );\n  const terminatorCharCodes = getCharCodes(lineTerminatorCharacters);\n  if (trackLines) {\n    forEach(concreteTokenTypes, (tokType) => {\n      const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes);\n      if (currIssue !== false) {\n        const message = buildLineBreakIssueMessage(tokType, currIssue);\n        const warningDescriptor = {\n          message,\n          type: currIssue.issue,\n          tokenType: tokType,\n        };\n        warnings.push(warningDescriptor);\n      } else {\n        // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n        if (has(tokType, \"LINE_BREAKS\")) {\n          if (tokType.LINE_BREAKS === true) {\n            hasAnyLineBreak = true;\n          }\n        } else {\n          if (\n            canMatchCharCode(terminatorCharCodes, tokType.PATTERN as RegExp)\n          ) {\n            hasAnyLineBreak = true;\n          }\n        }\n      }\n    });\n  }\n\n  if (trackLines && !hasAnyLineBreak) {\n    warnings.push({\n      message:\n        \"Warning: No LINE_BREAKS Found.\\n\" +\n        \"\\tThis Lexer has been defined to track line and column information,\\n\" +\n        \"\\tBut none of the Token Types can be identified as matching a line terminator.\\n\" +\n        \"\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n\" +\n        \"\\tfor details.\",\n      type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS,\n    });\n  }\n  return warnings;\n}\n\nexport function cloneEmptyGroups(emptyGroups: {\n  [groupName: string]: IToken;\n}): { [groupName: string]: IToken } {\n  const clonedResult: any = {};\n  const groupKeys = keys(emptyGroups);\n\n  forEach(groupKeys, (currKey) => {\n    const currGroupValue = emptyGroups[currKey];\n\n    /* istanbul ignore else */\n    if (isArray(currGroupValue)) {\n      clonedResult[currKey] = [];\n    } else {\n      throw Error(\"non exhaustive match\");\n    }\n  });\n\n  return clonedResult;\n}\n\n// TODO: refactor to avoid duplication\nexport function isCustomPattern(tokenType: TokenType): boolean {\n  const pattern = tokenType.PATTERN;\n  /* istanbul ignore else */\n  if (isRegExp(pattern)) {\n    return false;\n  } else if (isFunction(pattern)) {\n    // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n    return true;\n  } else if (has(pattern, \"exec\")) {\n    // ICustomPattern\n    return true;\n  } else if (isString(pattern)) {\n    return false;\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n\nexport function isShortPattern(pattern: any): number | false {\n  if (isString(pattern) && pattern.length === 1) {\n    return pattern.charCodeAt(0);\n  } else {\n    return false;\n  }\n}\n\n/**\n * Faster than using a RegExp for default newline detection during lexing.\n */\nexport const LineTerminatorOptimizedTester: ILineTerminatorsTester = {\n  // implements /\\n|\\r\\n?/g.test\n  test: function (text) {\n    const len = text.length;\n    for (let i = this.lastIndex; i < len; i++) {\n      const c = text.charCodeAt(i);\n      if (c === 10) {\n        this.lastIndex = i + 1;\n        return true;\n      } else if (c === 13) {\n        if (text.charCodeAt(i + 1) === 10) {\n          this.lastIndex = i + 2;\n        } else {\n          this.lastIndex = i + 1;\n        }\n        return true;\n      }\n    }\n    return false;\n  },\n\n  lastIndex: 0,\n};\n\nfunction checkLineBreaksIssues(\n  tokType: TokenType,\n  lineTerminatorCharCodes: number[],\n):\n  | {\n      issue:\n        | LexerDefinitionErrorType.IDENTIFY_TERMINATOR\n        | LexerDefinitionErrorType.CUSTOM_LINE_BREAK;\n      errMsg?: string;\n    }\n  | false {\n  if (has(tokType, \"LINE_BREAKS\")) {\n    // if the user explicitly declared the line_breaks option we will respect their choice\n    // and assume it is correct.\n    return false;\n  } else {\n    /* istanbul ignore else */\n    if (isRegExp(tokType.PATTERN)) {\n      try {\n        // TODO: why is the casting suddenly needed?\n        canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN as RegExp);\n      } catch (e) {\n        /* istanbul ignore next - to test this we would have to mock <canMatchCharCode> to throw an error */\n        return {\n          issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n          errMsg: (e as Error).message,\n        };\n      }\n      return false;\n    } else if (isString(tokType.PATTERN)) {\n      // string literal patterns can always be analyzed to detect line terminator usage\n      return false;\n    } else if (isCustomPattern(tokType)) {\n      // custom token types\n      return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK };\n    } else {\n      throw Error(\"non exhaustive match\");\n    }\n  }\n}\n\nexport function buildLineBreakIssueMessage(\n  tokType: TokenType,\n  details: {\n    issue:\n      | LexerDefinitionErrorType.IDENTIFY_TERMINATOR\n      | LexerDefinitionErrorType.CUSTOM_LINE_BREAK;\n    errMsg?: string;\n  },\n): string {\n  /* istanbul ignore else */\n  if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n    return (\n      \"Warning: unable to identify line terminator usage in pattern.\\n\" +\n      `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n      `\\t Root cause: ${details.errMsg}.\\n` +\n      \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\"\n    );\n  } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n    return (\n      \"Warning: A Custom Token Pattern should specify the <line_breaks> option.\\n\" +\n      `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n      \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\"\n    );\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n\nfunction getCharCodes(charsOrCodes: (number | string)[]): number[] {\n  const charCodes = map(charsOrCodes, (numOrString) => {\n    if (isString(numOrString)) {\n      return numOrString.charCodeAt(0);\n    } else {\n      return numOrString;\n    }\n  });\n\n  return charCodes;\n}\n\nfunction addToMapOfArrays<T>(\n  map: Record<number, T[]>,\n  key: number,\n  value: T,\n): void {\n  if (map[key] === undefined) {\n    map[key] = [value];\n  } else {\n    map[key].push(value);\n  }\n}\n\nexport const minOptimizationVal = 256;\n\n/**\n * We are mapping charCode above ASCI (256) into buckets each in the size of 256.\n * This is because ASCI are the most common start chars so each one of those will get its own\n * possible token configs vector.\n *\n * Tokens starting with charCodes \"above\" ASCI are uncommon, so we can \"afford\"\n * to place these into buckets of possible token configs, What we gain from\n * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'\n * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).\n * Our 'charCodeToPatternIdxToConfig' max size will now be:\n * 256 + (2^16 / 2^8) - 1 === 511\n *\n * note the hack for fast division integer part extraction\n * See: https://stackoverflow.com/a/4228528\n */\nlet charCodeToOptimizedIdxMap: number[] = [];\nexport function charCodeToOptimizedIndex(charCode: number): number {\n  return charCode < minOptimizationVal\n    ? charCode\n    : charCodeToOptimizedIdxMap[charCode];\n}\n\n/**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\nfunction initCharCodeToOptimizedIndexMap() {\n  if (isEmpty(charCodeToOptimizedIdxMap)) {\n    charCodeToOptimizedIdxMap = new Array(65536);\n    for (let i = 0; i < 65536; i++) {\n      charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i;\n    }\n  }\n}\n","import {\n  clone,\n  compact,\n  difference,\n  flatten,\n  forEach,\n  has,\n  includes,\n  isArray,\n  isEmpty,\n  map,\n} from \"lodash-es\";\nimport { IToken, TokenType } from \"@chevrotain/types\";\n\nexport function tokenStructuredMatcher(\n  tokInstance: IToken,\n  tokConstructor: TokenType,\n) {\n  const instanceType = tokInstance.tokenTypeIdx;\n  if (instanceType === tokConstructor.tokenTypeIdx) {\n    return true;\n  } else {\n    return (\n      tokConstructor.isParent === true &&\n      tokConstructor.categoryMatchesMap![instanceType] === true\n    );\n  }\n}\n\n// Optimized tokenMatcher in case our grammar does not use token categories\n// Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\nexport function tokenStructuredMatcherNoCategories(\n  token: IToken,\n  tokType: TokenType,\n) {\n  return token.tokenTypeIdx === tokType.tokenTypeIdx;\n}\n\nexport let tokenShortNameIdx = 1;\nexport const tokenIdxToClass: { [tokenIdx: number]: TokenType } = {};\n\nexport function augmentTokenTypes(tokenTypes: TokenType[]): void {\n  // collect the parent Token Types as well.\n  const tokenTypesAndParents = expandCategories(tokenTypes);\n\n  // add required tokenType and categoryMatches properties\n  assignTokenDefaultProps(tokenTypesAndParents);\n\n  // fill up the categoryMatches\n  assignCategoriesMapProp(tokenTypesAndParents);\n  assignCategoriesTokensProp(tokenTypesAndParents);\n\n  forEach(tokenTypesAndParents, (tokType) => {\n    tokType.isParent = tokType.categoryMatches!.length > 0;\n  });\n}\n\nexport function expandCategories(tokenTypes: TokenType[]): TokenType[] {\n  let result = clone(tokenTypes);\n\n  let categories = tokenTypes;\n  let searching = true;\n  while (searching) {\n    categories = compact(\n      flatten(map(categories, (currTokType) => currTokType.CATEGORIES)),\n    );\n\n    const newCategories = difference(categories, result);\n\n    result = result.concat(newCategories);\n\n    if (isEmpty(newCategories)) {\n      searching = false;\n    } else {\n      categories = newCategories;\n    }\n  }\n  return result;\n}\n\nexport function assignTokenDefaultProps(tokenTypes: TokenType[]): void {\n  forEach(tokenTypes, (currTokType) => {\n    if (!hasShortKeyProperty(currTokType)) {\n      tokenIdxToClass[tokenShortNameIdx] = currTokType;\n      (<any>currTokType).tokenTypeIdx = tokenShortNameIdx++;\n    }\n\n    // CATEGORIES? : TokenType | TokenType[]\n    if (\n      hasCategoriesProperty(currTokType) &&\n      !isArray(currTokType.CATEGORIES)\n      // &&\n      // !isUndefined(currTokType.CATEGORIES.PATTERN)\n    ) {\n      currTokType.CATEGORIES = [currTokType.CATEGORIES as unknown as TokenType];\n    }\n\n    if (!hasCategoriesProperty(currTokType)) {\n      currTokType.CATEGORIES = [];\n    }\n\n    if (!hasExtendingTokensTypesProperty(currTokType)) {\n      currTokType.categoryMatches = [];\n    }\n\n    if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n      currTokType.categoryMatchesMap = {};\n    }\n  });\n}\n\nexport function assignCategoriesTokensProp(tokenTypes: TokenType[]): void {\n  forEach(tokenTypes, (currTokType) => {\n    // avoid duplications\n    currTokType.categoryMatches = [];\n    forEach(currTokType.categoryMatchesMap!, (val, key) => {\n      currTokType.categoryMatches!.push(\n        tokenIdxToClass[key as unknown as number].tokenTypeIdx!,\n      );\n    });\n  });\n}\n\nexport function assignCategoriesMapProp(tokenTypes: TokenType[]): void {\n  forEach(tokenTypes, (currTokType) => {\n    singleAssignCategoriesToksMap([], currTokType);\n  });\n}\n\nexport function singleAssignCategoriesToksMap(\n  path: TokenType[],\n  nextNode: TokenType,\n): void {\n  forEach(path, (pathNode) => {\n    nextNode.categoryMatchesMap![pathNode.tokenTypeIdx!] = true;\n  });\n\n  forEach(nextNode.CATEGORIES, (nextCategory) => {\n    const newPath = path.concat(nextNode);\n    // avoids infinite loops due to cyclic categories.\n    if (!includes(newPath, nextCategory)) {\n      singleAssignCategoriesToksMap(newPath, nextCategory);\n    }\n  });\n}\n\nexport function hasShortKeyProperty(tokType: TokenType): boolean {\n  return has(tokType, \"tokenTypeIdx\");\n}\n\nexport function hasCategoriesProperty(tokType: TokenType): boolean {\n  return has(tokType, \"CATEGORIES\");\n}\n\nexport function hasExtendingTokensTypesProperty(tokType: TokenType): boolean {\n  return has(tokType, \"categoryMatches\");\n}\n\nexport function hasExtendingTokensTypesMapProperty(\n  tokType: TokenType,\n): boolean {\n  return has(tokType, \"categoryMatchesMap\");\n}\n\nexport function isTokenType(tokType: TokenType): boolean {\n  return has(tokType, \"tokenTypeIdx\");\n}\n","import { ILexerErrorMessageProvider, IToken } from \"@chevrotain/types\";\n\nexport const defaultLexerErrorProvider: ILexerErrorMessageProvider = {\n  buildUnableToPopLexerModeMessage(token: IToken): string {\n    return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`;\n  },\n\n  buildUnexpectedCharactersMessage(\n    fullText: string,\n    startOffset: number,\n    length: number,\n    line?: number,\n    column?: number,\n  ): string {\n    return (\n      `unexpected character: ->${fullText.charAt(\n        startOffset,\n      )}<- at offset: ${startOffset},` + ` skipped ${length} characters.`\n    );\n  },\n};\n","import {\n  analyzeTokenTypes,\n  charCodeToOptimizedIndex,\n  cloneEmptyGroups,\n  DEFAULT_MODE,\n  IAnalyzeResult,\n  IPatternConfig,\n  LineTerminatorOptimizedTester,\n  performRuntimeChecks,\n  performWarningRuntimeChecks,\n  SUPPORT_STICKY,\n  validatePatterns,\n} from \"./lexer.js\";\nimport {\n  assign,\n  clone,\n  forEach,\n  identity,\n  isArray,\n  isEmpty,\n  isUndefined,\n  keys,\n  last,\n  map,\n  noop,\n  reduce,\n  reject,\n} from \"lodash-es\";\nimport { PRINT_WARNING, timer, toFastProperties } from \"@chevrotain/utils\";\nimport { augmentTokenTypes } from \"./tokens.js\";\nimport {\n  CustomPatternMatcherFunc,\n  CustomPatternMatcherReturn,\n  ILexerConfig,\n  ILexerDefinitionError,\n  ILexingError,\n  IMultiModeLexerDefinition,\n  IToken,\n  TokenType,\n} from \"@chevrotain/types\";\nimport { defaultLexerErrorProvider } from \"./lexer_errors_public.js\";\nimport { clearRegExpParserCache } from \"./reg_exp_parser.js\";\n\nexport interface ILexingResult {\n  tokens: IToken[];\n  groups: { [groupName: string]: IToken[] };\n  errors: ILexingError[];\n}\n\nexport enum LexerDefinitionErrorType {\n  MISSING_PATTERN,\n  INVALID_PATTERN,\n  EOI_ANCHOR_FOUND,\n  UNSUPPORTED_FLAGS_FOUND,\n  DUPLICATE_PATTERNS_FOUND,\n  INVALID_GROUP_TYPE_FOUND,\n  PUSH_MODE_DOES_NOT_EXIST,\n  MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE,\n  MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY,\n  MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST,\n  LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED,\n  SOI_ANCHOR_FOUND,\n  EMPTY_MATCH_PATTERN,\n  NO_LINE_BREAKS_FLAGS,\n  UNREACHABLE_PATTERN,\n  IDENTIFY_TERMINATOR,\n  CUSTOM_LINE_BREAK,\n  MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE,\n}\n\nexport interface IRegExpExec {\n  exec: CustomPatternMatcherFunc;\n}\n\nconst DEFAULT_LEXER_CONFIG: Required<ILexerConfig> = {\n  deferDefinitionErrorsHandling: false,\n  positionTracking: \"full\",\n  lineTerminatorsPattern: /\\n|\\r\\n?/g,\n  lineTerminatorCharacters: [\"\\n\", \"\\r\"],\n  ensureOptimizations: false,\n  safeMode: false,\n  errorMessageProvider: defaultLexerErrorProvider,\n  traceInitPerf: false,\n  skipValidations: false,\n  recoveryEnabled: true,\n};\n\nObject.freeze(DEFAULT_LEXER_CONFIG);\n\nexport class Lexer {\n  public static SKIPPED =\n    \"This marks a skipped Token pattern, this means each token identified by it will\" +\n    \"be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\";\n\n  public static NA = /NOT_APPLICABLE/;\n  public lexerDefinitionErrors: ILexerDefinitionError[] = [];\n  public lexerDefinitionWarning: ILexerDefinitionError[] = [];\n\n  protected patternIdxToConfig: Record<string, IPatternConfig[]> = {};\n  protected charCodeToPatternIdxToConfig: {\n    [modeName: string]: { [charCode: number]: IPatternConfig[] };\n  } = {};\n\n  protected modes: string[] = [];\n  protected defaultMode!: string;\n  protected emptyGroups: { [groupName: string]: IToken } = {};\n\n  private config: Required<ILexerConfig>;\n  private trackStartLines: boolean = true;\n  private trackEndLines: boolean = true;\n  private hasCustom: boolean = false;\n  private canModeBeOptimized: Record<string, boolean> = {};\n\n  private traceInitPerf!: boolean | number;\n  private traceInitMaxIdent!: number;\n  private traceInitIndent: number;\n\n  constructor(\n    protected lexerDefinition: TokenType[] | IMultiModeLexerDefinition,\n    config: ILexerConfig = DEFAULT_LEXER_CONFIG,\n  ) {\n    if (typeof config === \"boolean\") {\n      throw Error(\n        \"The second argument to the Lexer constructor is now an ILexerConfig Object.\\n\" +\n          \"a boolean 2nd argument is no longer supported\",\n      );\n    }\n\n    // todo: defaults func?\n    this.config = assign({}, DEFAULT_LEXER_CONFIG, config) as any;\n\n    const traceInitVal = this.config.traceInitPerf;\n    if (traceInitVal === true) {\n      this.traceInitMaxIdent = Infinity;\n      this.traceInitPerf = true;\n    } else if (typeof traceInitVal === \"number\") {\n      this.traceInitMaxIdent = traceInitVal;\n      this.traceInitPerf = true;\n    }\n    this.traceInitIndent = -1;\n\n    this.TRACE_INIT(\"Lexer Constructor\", () => {\n      let actualDefinition!: IMultiModeLexerDefinition;\n      let hasOnlySingleMode = true;\n      this.TRACE_INIT(\"Lexer Config handling\", () => {\n        if (\n          this.config.lineTerminatorsPattern ===\n          DEFAULT_LEXER_CONFIG.lineTerminatorsPattern\n        ) {\n          // optimized built-in implementation for the defaults definition of lineTerminators\n          this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester;\n        } else {\n          if (\n            this.config.lineTerminatorCharacters ===\n            DEFAULT_LEXER_CONFIG.lineTerminatorCharacters\n          ) {\n            throw Error(\n              \"Error: Missing <lineTerminatorCharacters> property on the Lexer config.\\n\" +\n                \"\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS\",\n            );\n          }\n        }\n\n        if (config.safeMode && config.ensureOptimizations) {\n          throw Error(\n            '\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.',\n          );\n        }\n\n        this.trackStartLines = /full|onlyStart/i.test(\n          this.config.positionTracking,\n        );\n        this.trackEndLines = /full/i.test(this.config.positionTracking);\n\n        // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n        if (isArray(lexerDefinition)) {\n          actualDefinition = {\n            modes: { defaultMode: clone(lexerDefinition) },\n            defaultMode: DEFAULT_MODE,\n          };\n        } else {\n          // no conversion needed, input should already be a IMultiModeLexerDefinition\n          hasOnlySingleMode = false;\n          actualDefinition = clone(<IMultiModeLexerDefinition>lexerDefinition);\n        }\n      });\n\n      if (this.config.skipValidations === false) {\n        this.TRACE_INIT(\"performRuntimeChecks\", () => {\n          this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n            performRuntimeChecks(\n              actualDefinition,\n              this.trackStartLines,\n              this.config.lineTerminatorCharacters,\n            ),\n          );\n        });\n\n        this.TRACE_INIT(\"performWarningRuntimeChecks\", () => {\n          this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(\n            performWarningRuntimeChecks(\n              actualDefinition,\n              this.trackStartLines,\n              this.config.lineTerminatorCharacters,\n            ),\n          );\n        });\n      }\n\n      // for extra robustness to avoid throwing an none informative error message\n      actualDefinition.modes = actualDefinition.modes\n        ? actualDefinition.modes\n        : {};\n\n      // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n      // this transformation is to increase robustness in the case of partially invalid lexer definition.\n      forEach(actualDefinition.modes, (currModeValue, currModeName) => {\n        actualDefinition.modes[currModeName] = reject<TokenType>(\n          currModeValue,\n          (currTokType) => isUndefined(currTokType),\n        );\n      });\n\n      const allModeNames = keys(actualDefinition.modes);\n\n      forEach(\n        actualDefinition.modes,\n        (currModDef: TokenType[], currModName) => {\n          this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n            this.modes.push(currModName);\n\n            if (this.config.skipValidations === false) {\n              this.TRACE_INIT(`validatePatterns`, () => {\n                this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n                  validatePatterns(currModDef, allModeNames),\n                );\n              });\n            }\n\n            // If definition errors were encountered, the analysis phase may fail unexpectedly/\n            // Considering a lexer with definition errors may never be used, there is no point\n            // to performing the analysis anyhow...\n            if (isEmpty(this.lexerDefinitionErrors)) {\n              augmentTokenTypes(currModDef);\n\n              let currAnalyzeResult!: IAnalyzeResult;\n              this.TRACE_INIT(`analyzeTokenTypes`, () => {\n                currAnalyzeResult = analyzeTokenTypes(currModDef, {\n                  lineTerminatorCharacters:\n                    this.config.lineTerminatorCharacters,\n                  positionTracking: config.positionTracking,\n                  ensureOptimizations: config.ensureOptimizations,\n                  safeMode: config.safeMode,\n                  tracer: this.TRACE_INIT,\n                });\n              });\n\n              this.patternIdxToConfig[currModName] =\n                currAnalyzeResult.patternIdxToConfig;\n\n              this.charCodeToPatternIdxToConfig[currModName] =\n                currAnalyzeResult.charCodeToPatternIdxToConfig;\n\n              this.emptyGroups = assign(\n                {},\n                this.emptyGroups,\n                currAnalyzeResult.emptyGroups,\n              ) as any;\n\n              this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom;\n\n              this.canModeBeOptimized[currModName] =\n                currAnalyzeResult.canBeOptimized;\n            }\n          });\n        },\n      );\n\n      this.defaultMode = actualDefinition.defaultMode;\n\n      if (\n        !isEmpty(this.lexerDefinitionErrors) &&\n        !this.config.deferDefinitionErrorsHandling\n      ) {\n        const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n          return error.message;\n        });\n        const allErrMessagesString = allErrMessages.join(\n          \"-----------------------\\n\",\n        );\n        throw new Error(\n          \"Errors detected in definition of Lexer:\\n\" + allErrMessagesString,\n        );\n      }\n\n      // Only print warning if there are no errors, This will avoid pl\n      forEach(this.lexerDefinitionWarning, (warningDescriptor) => {\n        PRINT_WARNING(warningDescriptor.message);\n      });\n\n      this.TRACE_INIT(\"Choosing sub-methods implementations\", () => {\n        // Choose the relevant internal implementations for this specific parser.\n        // These implementations should be in-lined by the JavaScript engine\n        // to provide optimal performance in each scenario.\n        if (SUPPORT_STICKY) {\n          this.chopInput = <any>identity;\n          this.match = this.matchWithTest;\n        } else {\n          this.updateLastIndex = noop;\n          this.match = this.matchWithExec;\n        }\n\n        if (hasOnlySingleMode) {\n          this.handleModes = noop;\n        }\n\n        if (this.trackStartLines === false) {\n          this.computeNewColumn = identity;\n        }\n\n        if (this.trackEndLines === false) {\n          this.updateTokenEndLineColumnLocation = noop;\n        }\n\n        if (/full/i.test(this.config.positionTracking)) {\n          this.createTokenInstance = this.createFullToken;\n        } else if (/onlyStart/i.test(this.config.positionTracking)) {\n          this.createTokenInstance = this.createStartOnlyToken;\n        } else if (/onlyOffset/i.test(this.config.positionTracking)) {\n          this.createTokenInstance = this.createOffsetOnlyToken;\n        } else {\n          throw Error(\n            `Invalid <positionTracking> config option: \"${this.config.positionTracking}\"`,\n          );\n        }\n\n        if (this.hasCustom) {\n          this.addToken = this.addTokenUsingPush;\n          this.handlePayload = this.handlePayloadWithCustom;\n        } else {\n          this.addToken = this.addTokenUsingMemberAccess;\n          this.handlePayload = this.handlePayloadNoCustom;\n        }\n      });\n\n      this.TRACE_INIT(\"Failed Optimization Warnings\", () => {\n        const unOptimizedModes = reduce(\n          this.canModeBeOptimized,\n          (cannotBeOptimized, canBeOptimized, modeName) => {\n            if (canBeOptimized === false) {\n              cannotBeOptimized.push(modeName);\n            }\n            return cannotBeOptimized;\n          },\n          [] as string[],\n        );\n\n        if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n          throw Error(\n            `Lexer Modes: < ${unOptimizedModes.join(\n              \", \",\n            )} > cannot be optimized.\\n` +\n              '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n              \"\\t Or inspect the console log for details on how to resolve these issues.\",\n          );\n        }\n      });\n\n      this.TRACE_INIT(\"clearRegExpParserCache\", () => {\n        clearRegExpParserCache();\n      });\n\n      this.TRACE_INIT(\"toFastProperties\", () => {\n        toFastProperties(this);\n      });\n    });\n  }\n\n  public tokenize(\n    text: string,\n    initialMode: string = this.defaultMode,\n  ): ILexingResult {\n    if (!isEmpty(this.lexerDefinitionErrors)) {\n      const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n        return error.message;\n      });\n      const allErrMessagesString = allErrMessages.join(\n        \"-----------------------\\n\",\n      );\n      throw new Error(\n        \"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" +\n          allErrMessagesString,\n      );\n    }\n\n    return this.tokenizeInternal(text, initialMode);\n  }\n\n  // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n  // This is intentional due to performance considerations.\n  // this method also used quite a bit of `!` none null assertions because it is too optimized\n  // for `tsc` to always understand it is \"safe\"\n  private tokenizeInternal(text: string, initialMode: string): ILexingResult {\n    let i,\n      j,\n      k,\n      matchAltImage,\n      longerAlt,\n      matchedImage: string | null,\n      payload,\n      altPayload,\n      imageLength,\n      group,\n      tokType,\n      newToken: IToken,\n      errLength,\n      droppedChar,\n      msg,\n      match;\n    const orgText = text;\n    const orgLength = orgText.length;\n    let offset = 0;\n    let matchedTokensIndex = 0;\n    // initializing the tokensArray to the \"guessed\" size.\n    // guessing too little will still reduce the number of array re-sizes on pushes.\n    // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory\n    // but would still have a faster runtime by avoiding (All but one) array resizing.\n    const guessedNumberOfTokens = this.hasCustom\n      ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.\n      : Math.floor(text.length / 10);\n    const matchedTokens = new Array(guessedNumberOfTokens);\n    const errors: ILexingError[] = [];\n    let line = this.trackStartLines ? 1 : undefined;\n    let column = this.trackStartLines ? 1 : undefined;\n    const groups: any = cloneEmptyGroups(this.emptyGroups);\n    const trackLines = this.trackStartLines;\n    const lineTerminatorPattern = this.config.lineTerminatorsPattern;\n\n    let currModePatternsLength = 0;\n    let patternIdxToConfig: IPatternConfig[] = [];\n    let currCharCodeToPatternIdxToConfig: {\n      [charCode: number]: IPatternConfig[];\n    } = [];\n\n    const modeStack: string[] = [];\n\n    const emptyArray: IPatternConfig[] = [];\n    Object.freeze(emptyArray);\n    let getPossiblePatterns!: (charCode: number) => IPatternConfig[];\n\n    function getPossiblePatternsSlow() {\n      return patternIdxToConfig;\n    }\n\n    function getPossiblePatternsOptimized(charCode: number): IPatternConfig[] {\n      const optimizedCharIdx = charCodeToOptimizedIndex(charCode);\n      const possiblePatterns =\n        currCharCodeToPatternIdxToConfig[optimizedCharIdx];\n      if (possiblePatterns === undefined) {\n        return emptyArray;\n      } else {\n        return possiblePatterns;\n      }\n    }\n\n    const pop_mode = (popToken: IToken) => {\n      // TODO: perhaps avoid this error in the edge case there is no more input?\n      if (\n        modeStack.length === 1 &&\n        // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n        // So no error should occur.\n        popToken.tokenType.PUSH_MODE === undefined\n      ) {\n        // if we try to pop the last mode there lexer will no longer have ANY mode.\n        // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n        const msg =\n          this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(\n            popToken,\n          );\n\n        errors.push({\n          offset: popToken.startOffset,\n          line: popToken.startLine,\n          column: popToken.startColumn,\n          length: popToken.image.length,\n          message: msg,\n        });\n      } else {\n        modeStack.pop();\n        const newMode = last(modeStack)!;\n        patternIdxToConfig = this.patternIdxToConfig[newMode];\n        currCharCodeToPatternIdxToConfig =\n          this.charCodeToPatternIdxToConfig[newMode];\n        currModePatternsLength = patternIdxToConfig.length;\n        const modeCanBeOptimized =\n          this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n\n        if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n          getPossiblePatterns = getPossiblePatternsOptimized;\n        } else {\n          getPossiblePatterns = getPossiblePatternsSlow;\n        }\n      }\n    };\n\n    function push_mode(this: Lexer, newMode: string) {\n      modeStack.push(newMode);\n      currCharCodeToPatternIdxToConfig =\n        this.charCodeToPatternIdxToConfig[newMode];\n\n      patternIdxToConfig = this.patternIdxToConfig[newMode];\n      currModePatternsLength = patternIdxToConfig.length;\n\n      currModePatternsLength = patternIdxToConfig.length;\n      const modeCanBeOptimized =\n        this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n\n      if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n        getPossiblePatterns = getPossiblePatternsOptimized;\n      } else {\n        getPossiblePatterns = getPossiblePatternsSlow;\n      }\n    }\n\n    // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n    // seem to matter performance wise.\n    push_mode.call(this, initialMode);\n\n    let currConfig!: IPatternConfig;\n\n    const recoveryEnabled = this.config.recoveryEnabled;\n\n    while (offset < orgLength) {\n      matchedImage = null;\n\n      const nextCharCode = orgText.charCodeAt(offset);\n      const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode);\n      const chosenPatternsLength = chosenPatternIdxToConfig.length;\n\n      for (i = 0; i < chosenPatternsLength; i++) {\n        currConfig = chosenPatternIdxToConfig[i];\n        const currPattern = currConfig.pattern;\n        payload = null;\n\n        // manually in-lined because > 600 chars won't be in-lined in V8\n        const singleCharCode = currConfig.short;\n        if (singleCharCode !== false) {\n          if (nextCharCode === singleCharCode) {\n            // single character string\n            matchedImage = currPattern as string;\n          }\n        } else if (currConfig.isCustom === true) {\n          match = (currPattern as IRegExpExec).exec(\n            orgText,\n            offset,\n            matchedTokens,\n            groups,\n          );\n          if (match !== null) {\n            matchedImage = match[0];\n            if ((match as CustomPatternMatcherReturn).payload !== undefined) {\n              payload = (match as CustomPatternMatcherReturn).payload;\n            }\n          } else {\n            matchedImage = null;\n          }\n        } else {\n          this.updateLastIndex(currPattern as RegExp, offset);\n          matchedImage = this.match(currPattern as RegExp, text, offset);\n        }\n\n        if (matchedImage !== null) {\n          // even though this pattern matched we must try a another longer alternative.\n          // this can be used to prioritize keywords over identifiers\n          longerAlt = currConfig.longerAlt;\n          if (longerAlt !== undefined) {\n            // TODO: micro optimize, avoid extra prop access\n            // by saving/linking longerAlt on the original config?\n            const longerAltLength = longerAlt.length;\n            for (k = 0; k < longerAltLength; k++) {\n              const longerAltConfig = patternIdxToConfig[longerAlt[k]];\n              const longerAltPattern = longerAltConfig.pattern;\n              altPayload = null;\n\n              // single Char can never be a longer alt so no need to test it.\n              // manually in-lined because > 600 chars won't be in-lined in V8\n              if (longerAltConfig.isCustom === true) {\n                match = (longerAltPattern as IRegExpExec).exec(\n                  orgText,\n                  offset,\n                  matchedTokens,\n                  groups,\n                );\n                if (match !== null) {\n                  matchAltImage = match[0];\n                  if (\n                    (match as CustomPatternMatcherReturn).payload !== undefined\n                  ) {\n                    altPayload = (match as CustomPatternMatcherReturn).payload;\n                  }\n                } else {\n                  matchAltImage = null;\n                }\n              } else {\n                this.updateLastIndex(longerAltPattern as RegExp, offset);\n                matchAltImage = this.match(\n                  longerAltPattern as RegExp,\n                  text,\n                  offset,\n                );\n              }\n\n              if (matchAltImage && matchAltImage.length > matchedImage.length) {\n                matchedImage = matchAltImage;\n                payload = altPayload;\n                currConfig = longerAltConfig;\n                // Exit the loop early after matching one of the longer alternatives\n                // The first matched alternative takes precedence\n                break;\n              }\n            }\n          }\n          break;\n        }\n      }\n\n      // successful match\n      if (matchedImage !== null) {\n        imageLength = matchedImage.length;\n        group = currConfig.group;\n        if (group !== undefined) {\n          tokType = currConfig.tokenTypeIdx;\n          // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n          // createFullToken method\n          newToken = this.createTokenInstance(\n            matchedImage,\n            offset,\n            tokType,\n            currConfig.tokenType,\n            line,\n            column,\n            imageLength,\n          );\n\n          this.handlePayload(newToken, payload);\n\n          // TODO: optimize NOOP in case there are no special groups?\n          if (group === false) {\n            matchedTokensIndex = this.addToken(\n              matchedTokens,\n              matchedTokensIndex,\n              newToken,\n            );\n          } else {\n            groups[group].push(newToken);\n          }\n        }\n        text = this.chopInput(text, imageLength);\n        offset = offset + imageLength;\n\n        // TODO: with newlines the column may be assigned twice\n        column = this.computeNewColumn(column!, imageLength);\n\n        if (trackLines === true && currConfig.canLineTerminator === true) {\n          let numOfLTsInMatch = 0;\n          let foundTerminator;\n          let lastLTEndOffset: number;\n          lineTerminatorPattern.lastIndex = 0;\n          do {\n            foundTerminator = lineTerminatorPattern.test(matchedImage);\n            if (foundTerminator === true) {\n              lastLTEndOffset = lineTerminatorPattern.lastIndex - 1;\n              numOfLTsInMatch++;\n            }\n          } while (foundTerminator === true);\n\n          if (numOfLTsInMatch !== 0) {\n            line = line! + numOfLTsInMatch;\n            column = imageLength - lastLTEndOffset!;\n            this.updateTokenEndLineColumnLocation(\n              newToken!,\n              group!,\n              lastLTEndOffset!,\n              numOfLTsInMatch,\n              line,\n              column,\n              imageLength,\n            );\n          }\n        }\n        // will be NOOP if no modes present\n        this.handleModes(currConfig, pop_mode, push_mode, newToken!);\n      } else {\n        // error recovery, drop characters until we identify a valid token's start point\n        const errorStartOffset = offset;\n        const errorLine = line;\n        const errorColumn = column;\n        let foundResyncPoint = recoveryEnabled === false;\n\n        while (foundResyncPoint === false && offset < orgLength) {\n          // Identity Func (when sticky flag is enabled)\n          text = this.chopInput(text, 1);\n          offset++;\n          for (j = 0; j < currModePatternsLength; j++) {\n            const currConfig = patternIdxToConfig[j];\n            const currPattern = currConfig.pattern;\n\n            // manually in-lined because > 600 chars won't be in-lined in V8\n            const singleCharCode = currConfig.short;\n            if (singleCharCode !== false) {\n              if (orgText.charCodeAt(offset) === singleCharCode) {\n                // single character string\n                foundResyncPoint = true;\n              }\n            } else if (currConfig.isCustom === true) {\n              foundResyncPoint =\n                (currPattern as IRegExpExec).exec(\n                  orgText,\n                  offset,\n                  matchedTokens,\n                  groups,\n                ) !== null;\n            } else {\n              this.updateLastIndex(currPattern as RegExp, offset);\n              foundResyncPoint = (currPattern as RegExp).exec(text) !== null;\n            }\n\n            if (foundResyncPoint === true) {\n              break;\n            }\n          }\n        }\n\n        errLength = offset - errorStartOffset;\n        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(\n          orgText,\n          errorStartOffset,\n          errLength,\n          errorLine,\n          errorColumn,\n        );\n        errors.push({\n          offset: errorStartOffset,\n          line: errorLine,\n          column: errorColumn,\n          length: errLength,\n          message: msg,\n        });\n\n        if (recoveryEnabled === false) {\n          break;\n        }\n      }\n    }\n\n    // if we do have custom patterns which push directly into the\n    // TODO: custom tokens should not push directly??\n    if (!this.hasCustom) {\n      // if we guessed a too large size for the tokens array this will shrink it to the right size.\n      matchedTokens.length = matchedTokensIndex;\n    }\n\n    return {\n      tokens: matchedTokens,\n      groups: groups,\n      errors: errors,\n    };\n  }\n\n  private handleModes(\n    config: IPatternConfig,\n    pop_mode: (tok: IToken) => void,\n    push_mode: (this: Lexer, pushMode: string) => void,\n    newToken: IToken,\n  ) {\n    if (config.pop === true) {\n      // need to save the PUSH_MODE property as if the mode is popped\n      // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n      const pushMode = config.push;\n      pop_mode(newToken);\n      if (pushMode !== undefined) {\n        push_mode.call(this, pushMode);\n      }\n    } else if (config.push !== undefined) {\n      push_mode.call(this, config.push);\n    }\n  }\n\n  private chopInput(text: string, length: number): string {\n    return text.substring(length);\n  }\n\n  private updateLastIndex(regExp: RegExp, newLastIndex: number): void {\n    regExp.lastIndex = newLastIndex;\n  }\n\n  // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n  private updateTokenEndLineColumnLocation(\n    newToken: IToken,\n    group: string | false,\n    lastLTIdx: number,\n    numOfLTsInMatch: number,\n    line: number,\n    column: number,\n    imageLength: number,\n  ): void {\n    let lastCharIsLT, fixForEndingInLT;\n    if (group !== undefined) {\n      // a none skipped multi line Token, need to update endLine/endColumn\n      lastCharIsLT = lastLTIdx === imageLength - 1;\n      fixForEndingInLT = lastCharIsLT ? -1 : 0;\n      if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n        // if a token ends in a LT that last LT only affects the line numbering of following Tokens\n        newToken.endLine = line + fixForEndingInLT;\n        // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)\n        // inclusive to exclusive range.\n        newToken.endColumn = column - 1 + -fixForEndingInLT;\n      }\n      // else single LT in the last character of a token, no need to modify the endLine/EndColumn\n    }\n  }\n\n  private computeNewColumn(oldColumn: number, imageLength: number) {\n    return oldColumn + imageLength;\n  }\n\n  // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n  /* istanbul ignore next - place holder */\n  private createTokenInstance!: (...args: any[]) => IToken;\n\n  private createOffsetOnlyToken(\n    image: string,\n    startOffset: number,\n    tokenTypeIdx: number,\n    tokenType: TokenType,\n  ) {\n    return {\n      image,\n      startOffset,\n      tokenTypeIdx,\n      tokenType,\n    };\n  }\n\n  private createStartOnlyToken(\n    image: string,\n    startOffset: number,\n    tokenTypeIdx: number,\n    tokenType: TokenType,\n    startLine: number,\n    startColumn: number,\n  ) {\n    return {\n      image,\n      startOffset,\n      startLine,\n      startColumn,\n      tokenTypeIdx,\n      tokenType,\n    };\n  }\n\n  private createFullToken(\n    image: string,\n    startOffset: number,\n    tokenTypeIdx: number,\n    tokenType: TokenType,\n    startLine: number,\n    startColumn: number,\n    imageLength: number,\n  ): IToken {\n    return {\n      image,\n      startOffset,\n      endOffset: startOffset + imageLength - 1,\n      startLine,\n      endLine: startLine,\n      startColumn,\n      endColumn: startColumn + imageLength - 1,\n      tokenTypeIdx,\n      tokenType,\n    };\n  }\n\n  // Place holder, will be replaced by the correct variant according to the locationTracking option at runtime.\n  /* istanbul ignore next - place holder */\n  private addToken!: (\n    tokenVector: IToken[],\n    index: number,\n    tokenToAdd: IToken,\n  ) => number;\n\n  private addTokenUsingPush(\n    tokenVector: IToken[],\n    index: number,\n    tokenToAdd: IToken,\n  ): number {\n    tokenVector.push(tokenToAdd);\n    return index;\n  }\n\n  private addTokenUsingMemberAccess(\n    tokenVector: IToken[],\n    index: number,\n    tokenToAdd: IToken,\n  ): number {\n    tokenVector[index] = tokenToAdd;\n    index++;\n    return index;\n  }\n\n  // Place holder, will be replaced by the correct variant according to the hasCustom flag option at runtime.\n  private handlePayload: (token: IToken, payload: any) => void;\n\n  private handlePayloadNoCustom(token: IToken, payload: any): void {}\n\n  private handlePayloadWithCustom(token: IToken, payload: any): void {\n    if (payload !== null) {\n      token.payload = payload;\n    }\n  }\n\n  // place holder to be replaced with chosen alternative at runtime\n  private match!: (\n    pattern: RegExp,\n    text: string,\n    offset: number,\n  ) => string | null;\n\n  private matchWithTest(\n    pattern: RegExp,\n    text: string,\n    offset: number,\n  ): string | null {\n    const found = pattern.test(text);\n    if (found === true) {\n      return text.substring(offset, pattern.lastIndex);\n    }\n    return null;\n  }\n\n  private matchWithExec(pattern: RegExp, text: string): string | null {\n    const regExpArray = pattern.exec(text);\n    return regExpArray !== null ? regExpArray[0] : null;\n  }\n\n  // Duplicated from the parser's perf trace trait to allow future extraction\n  // of the lexer to a separate package.\n  TRACE_INIT = <T>(phaseDesc: string, phaseImpl: () => T): T => {\n    // No need to optimize this using NOOP pattern because\n    // It is not called in a hot spot...\n    if (this.traceInitPerf === true) {\n      this.traceInitIndent++;\n      const indent = new Array(this.traceInitIndent + 1).join(\"\\t\");\n      if (this.traceInitIndent < this.traceInitMaxIdent) {\n        console.log(`${indent}--> <${phaseDesc}>`);\n      }\n      const { time, value } = timer(phaseImpl);\n      /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n      const traceMethod = time > 10 ? console.warn : console.log;\n      if (this.traceInitIndent < this.traceInitMaxIdent) {\n        traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`);\n      }\n      this.traceInitIndent--;\n      return value;\n    } else {\n      return phaseImpl();\n    }\n  };\n}\n","import { has, isString, isUndefined } from \"lodash-es\";\nimport { Lexer } from \"./lexer_public.js\";\nimport { augmentTokenTypes, tokenStructuredMatcher } from \"./tokens.js\";\nimport { IToken, ITokenConfig, TokenType } from \"@chevrotain/types\";\n\nexport function tokenLabel(tokType: TokenType): string {\n  if (hasTokenLabel(tokType)) {\n    return tokType.LABEL;\n  } else {\n    return tokType.name;\n  }\n}\n\nexport function tokenName(tokType: TokenType): string {\n  return tokType.name;\n}\n\nexport function hasTokenLabel(\n  obj: TokenType,\n): obj is TokenType & Pick<Required<TokenType>, \"LABEL\"> {\n  return isString(obj.LABEL) && obj.LABEL !== \"\";\n}\n\nconst PARENT = \"parent\";\nconst CATEGORIES = \"categories\";\nconst LABEL = \"label\";\nconst GROUP = \"group\";\nconst PUSH_MODE = \"push_mode\";\nconst POP_MODE = \"pop_mode\";\nconst LONGER_ALT = \"longer_alt\";\nconst LINE_BREAKS = \"line_breaks\";\nconst START_CHARS_HINT = \"start_chars_hint\";\n\nexport function createToken(config: ITokenConfig): TokenType {\n  return createTokenInternal(config);\n}\n\nfunction createTokenInternal(config: ITokenConfig): TokenType {\n  const pattern = config.pattern;\n\n  const tokenType: TokenType = <any>{};\n  tokenType.name = config.name;\n\n  if (!isUndefined(pattern)) {\n    tokenType.PATTERN = pattern;\n  }\n\n  if (has(config, PARENT)) {\n    throw (\n      \"The parent property is no longer supported.\\n\" +\n      \"See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.\"\n    );\n  }\n\n  if (has(config, CATEGORIES)) {\n    // casting to ANY as this will be fixed inside `augmentTokenTypes``\n    tokenType.CATEGORIES = <any>config[CATEGORIES];\n  }\n\n  augmentTokenTypes([tokenType]);\n\n  if (has(config, LABEL)) {\n    tokenType.LABEL = config[LABEL];\n  }\n\n  if (has(config, GROUP)) {\n    tokenType.GROUP = config[GROUP];\n  }\n\n  if (has(config, POP_MODE)) {\n    tokenType.POP_MODE = config[POP_MODE];\n  }\n\n  if (has(config, PUSH_MODE)) {\n    tokenType.PUSH_MODE = config[PUSH_MODE];\n  }\n\n  if (has(config, LONGER_ALT)) {\n    tokenType.LONGER_ALT = config[LONGER_ALT];\n  }\n\n  if (has(config, LINE_BREAKS)) {\n    tokenType.LINE_BREAKS = config[LINE_BREAKS];\n  }\n\n  if (has(config, START_CHARS_HINT)) {\n    tokenType.START_CHARS_HINT = config[START_CHARS_HINT];\n  }\n\n  return tokenType;\n}\n\nexport const EOF = createToken({ name: \"EOF\", pattern: Lexer.NA });\naugmentTokenTypes([EOF]);\n\nexport function createTokenInstance(\n  tokType: TokenType,\n  image: string,\n  startOffset: number,\n  endOffset: number,\n  startLine: number,\n  endLine: number,\n  startColumn: number,\n  endColumn: number,\n): IToken {\n  return {\n    image,\n    startOffset,\n    endOffset,\n    startLine,\n    endLine,\n    startColumn,\n    endColumn,\n    tokenTypeIdx: (<any>tokType).tokenTypeIdx,\n    tokenType: tokType,\n  };\n}\n\nexport function tokenMatcher(token: IToken, tokType: TokenType): boolean {\n  return tokenStructuredMatcher(token, tokType);\n}\n","import { hasTokenLabel, tokenLabel } from \"../scan/tokens_public.js\";\nimport { first, map, reduce } from \"lodash-es\";\nimport {\n  Alternation,\n  getProductionDslName,\n  NonTerminal,\n  Rule,\n  Terminal,\n} from \"@chevrotain/gast\";\nimport {\n  IParserErrorMessageProvider,\n  IProductionWithOccurrence,\n  TokenType,\n} from \"@chevrotain/types\";\nimport {\n  IGrammarResolverErrorMessageProvider,\n  IGrammarValidatorErrorMessageProvider,\n} from \"./grammar/types.js\";\n\nexport const defaultParserErrorProvider: IParserErrorMessageProvider = {\n  buildMismatchTokenMessage({ expected, actual, previous, ruleName }): string {\n    const hasLabel = hasTokenLabel(expected);\n    const expectedMsg = hasLabel\n      ? `--> ${tokenLabel(expected)} <--`\n      : `token of type --> ${expected.name} <--`;\n\n    const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`;\n\n    return msg;\n  },\n\n  buildNotAllInputParsedMessage({ firstRedundant, ruleName }): string {\n    return \"Redundant input, expecting EOF but found: \" + firstRedundant.image;\n  },\n\n  buildNoViableAltMessage({\n    expectedPathsPerAlt,\n    actual,\n    previous,\n    customUserDescription,\n    ruleName,\n  }): string {\n    const errPrefix = \"Expecting: \";\n    // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n    const actualText = first(actual)!.image;\n    const errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n\n    if (customUserDescription) {\n      return errPrefix + customUserDescription + errSuffix;\n    } else {\n      const allLookAheadPaths = reduce(\n        expectedPathsPerAlt,\n        (result, currAltPaths) => result.concat(currAltPaths),\n        [] as TokenType[][],\n      );\n      const nextValidTokenSequences = map(\n        allLookAheadPaths,\n        (currPath) =>\n          `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\n            \", \",\n          )}]`,\n      );\n      const nextValidSequenceItems = map(\n        nextValidTokenSequences,\n        (itemMsg, idx) => `  ${idx + 1}. ${itemMsg}`,\n      );\n      const calculatedDescription = `one of these possible Token sequences:\\n${nextValidSequenceItems.join(\n        \"\\n\",\n      )}`;\n\n      return errPrefix + calculatedDescription + errSuffix;\n    }\n  },\n\n  buildEarlyExitMessage({\n    expectedIterationPaths,\n    actual,\n    customUserDescription,\n    ruleName,\n  }): string {\n    const errPrefix = \"Expecting: \";\n    // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n    const actualText = first(actual)!.image;\n    const errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n\n    if (customUserDescription) {\n      return errPrefix + customUserDescription + errSuffix;\n    } else {\n      const nextValidTokenSequences = map(\n        expectedIterationPaths,\n        (currPath) =>\n          `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\n            \",\",\n          )}]`,\n      );\n      const calculatedDescription =\n        `expecting at least one iteration which starts with one of these possible Token sequences::\\n  ` +\n        `<${nextValidTokenSequences.join(\" ,\")}>`;\n\n      return errPrefix + calculatedDescription + errSuffix;\n    }\n  },\n};\n\nObject.freeze(defaultParserErrorProvider);\n\nexport const defaultGrammarResolverErrorProvider: IGrammarResolverErrorMessageProvider =\n  {\n    buildRuleNotFoundError(\n      topLevelRule: Rule,\n      undefinedRule: NonTerminal,\n    ): string {\n      const msg =\n        \"Invalid grammar, reference to a rule which is not defined: ->\" +\n        undefinedRule.nonTerminalName +\n        \"<-\\n\" +\n        \"inside top level rule: ->\" +\n        topLevelRule.name +\n        \"<-\";\n      return msg;\n    },\n  };\n\nexport const defaultGrammarValidatorErrorProvider: IGrammarValidatorErrorMessageProvider =\n  {\n    buildDuplicateFoundError(\n      topLevelRule: Rule,\n      duplicateProds: IProductionWithOccurrence[],\n    ): string {\n      function getExtraProductionArgument(\n        prod: IProductionWithOccurrence,\n      ): string {\n        if (prod instanceof Terminal) {\n          return prod.terminalType.name;\n        } else if (prod instanceof NonTerminal) {\n          return prod.nonTerminalName;\n        } else {\n          return \"\";\n        }\n      }\n\n      const topLevelName = topLevelRule.name;\n      const duplicateProd = first(duplicateProds)!;\n      const index = duplicateProd.idx;\n      const dslName = getProductionDslName(duplicateProd);\n      const extraArgument = getExtraProductionArgument(duplicateProd);\n\n      const hasExplicitIndex = index > 0;\n      let msg = `->${dslName}${hasExplicitIndex ? index : \"\"}<- ${\n        extraArgument ? `with argument: ->${extraArgument}<-` : \"\"\n      }\n                  appears more than once (${\n                    duplicateProds.length\n                  } times) in the top level rule: ->${topLevelName}<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;\n\n      // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n      msg = msg.replace(/[ \\t]+/g, \" \");\n      msg = msg.replace(/\\s\\s+/g, \"\\n\");\n\n      return msg;\n    },\n\n    buildNamespaceConflictError(rule: Rule): string {\n      const errMsg =\n        `Namespace conflict found in grammar.\\n` +\n        `The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.\\n` +\n        `To resolve this make sure each Terminal and Non-Terminal names are unique\\n` +\n        `This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n` +\n        `and Non-Terminal names start with a lower case letter.`;\n\n      return errMsg;\n    },\n\n    buildAlternationPrefixAmbiguityError(options: {\n      topLevelRule: Rule;\n      prefixPath: TokenType[];\n      ambiguityIndices: number[];\n      alternation: Alternation;\n    }): string {\n      const pathMsg = map(options.prefixPath, (currTok) =>\n        tokenLabel(currTok),\n      ).join(\", \");\n      const occurrence =\n        options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n      const errMsg =\n        `Ambiguous alternatives: <${options.ambiguityIndices.join(\n          \" ,\",\n        )}> due to common lookahead prefix\\n` +\n        `in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule,\\n` +\n        `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n` +\n        `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n` +\n        `For Further details.`;\n\n      return errMsg;\n    },\n\n    buildAlternationAmbiguityError(options: {\n      topLevelRule: Rule;\n      prefixPath: TokenType[];\n      ambiguityIndices: number[];\n      alternation: Alternation;\n    }): string {\n      const pathMsg = map(options.prefixPath, (currtok) =>\n        tokenLabel(currtok),\n      ).join(\", \");\n      const occurrence =\n        options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n      let currMessage =\n        `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\n          \" ,\",\n        )}> in <OR${occurrence}>` +\n        ` inside <${options.topLevelRule.name}> Rule,\\n` +\n        `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`;\n\n      currMessage =\n        currMessage +\n        `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\n        `For Further details.`;\n      return currMessage;\n    },\n\n    buildEmptyRepetitionError(options: {\n      topLevelRule: Rule;\n      repetition: IProductionWithOccurrence;\n    }): string {\n      let dslName = getProductionDslName(options.repetition);\n      if (options.repetition.idx !== 0) {\n        dslName += options.repetition.idx;\n      }\n\n      const errMsg =\n        `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\\n` +\n        `This could lead to an infinite loop.`;\n\n      return errMsg;\n    },\n\n    // TODO: remove - `errors_public` from nyc.config.js exclude\n    //       once this method is fully removed from this file\n    buildTokenNameError(options: {\n      tokenType: TokenType;\n      expectedPattern: RegExp;\n    }): string {\n      /* istanbul ignore next */\n      return \"deprecated\";\n    },\n\n    buildEmptyAlternationError(options: {\n      topLevelRule: Rule;\n      alternation: Alternation;\n      emptyChoiceIdx: number;\n    }): string {\n      const errMsg =\n        `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}>` +\n        ` in <OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n` +\n        `Only the last alternative may be an empty alternative.`;\n\n      return errMsg;\n    },\n\n    buildTooManyAlternativesError(options: {\n      topLevelRule: Rule;\n      alternation: Alternation;\n    }): string {\n      const errMsg =\n        `An Alternation cannot have more than 256 alternatives:\\n` +\n        `<OR${options.alternation.idx}> inside <${\n          options.topLevelRule.name\n        }> Rule.\\n has ${\n          options.alternation.definition.length + 1\n        } alternatives.`;\n\n      return errMsg;\n    },\n\n    buildLeftRecursionError(options: {\n      topLevelRule: Rule;\n      leftRecursionPath: Rule[];\n    }): string {\n      const ruleName = options.topLevelRule.name;\n      const pathNames = map(\n        options.leftRecursionPath,\n        (currRule) => currRule.name,\n      );\n      const leftRecursivePath = `${ruleName} --> ${pathNames\n        .concat([ruleName])\n        .join(\" --> \")}`;\n      const errMsg =\n        `Left Recursion found in grammar.\\n` +\n        `rule: <${ruleName}> can be invoked from itself (directly or indirectly)\\n` +\n        `without consuming any Tokens. The grammar path that causes this is: \\n ${leftRecursivePath}\\n` +\n        ` To fix this refactor your grammar to remove the left recursion.\\n` +\n        `see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`;\n\n      return errMsg;\n    },\n\n    // TODO: remove - `errors_public` from nyc.config.js exclude\n    //       once this method is fully removed from this file\n    buildInvalidRuleNameError(options: {\n      topLevelRule: Rule;\n      expectedPattern: RegExp;\n    }): string {\n      /* istanbul ignore next */\n      return \"deprecated\";\n    },\n\n    buildDuplicateRuleNameError(options: {\n      topLevelRule: Rule | string;\n      grammarName: string;\n    }): string {\n      let ruleName;\n      if (options.topLevelRule instanceof Rule) {\n        ruleName = options.topLevelRule.name;\n      } else {\n        ruleName = options.topLevelRule;\n      }\n\n      const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`;\n\n      return errMsg;\n    },\n  };\n","import {\n  IParserUnresolvedRefDefinitionError,\n  ParserDefinitionErrorType,\n} from \"../parser/parser.js\";\nimport { forEach, values } from \"lodash-es\";\nimport { GAstVisitor, NonTerminal, Rule } from \"@chevrotain/gast\";\nimport {\n  IGrammarResolverErrorMessageProvider,\n  IParserDefinitionError,\n} from \"./types.js\";\n\nexport function resolveGrammar(\n  topLevels: Record<string, Rule>,\n  errMsgProvider: IGrammarResolverErrorMessageProvider,\n): IParserDefinitionError[] {\n  const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);\n  refResolver.resolveRefs();\n  return refResolver.errors;\n}\n\nexport class GastRefResolverVisitor extends GAstVisitor {\n  public errors: IParserUnresolvedRefDefinitionError[] = [];\n  private currTopLevel: Rule;\n\n  constructor(\n    private nameToTopRule: Record<string, Rule>,\n    private errMsgProvider: IGrammarResolverErrorMessageProvider,\n  ) {\n    super();\n  }\n\n  public resolveRefs(): void {\n    forEach(values(this.nameToTopRule), (prod) => {\n      this.currTopLevel = prod;\n      prod.accept(this);\n    });\n  }\n\n  public visitNonTerminal(node: NonTerminal): void {\n    const ref = this.nameToTopRule[node.nonTerminalName];\n\n    if (!ref) {\n      const msg = this.errMsgProvider.buildRuleNotFoundError(\n        this.currTopLevel,\n        node,\n      );\n      this.errors.push({\n        message: msg,\n        type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n        ruleName: this.currTopLevel.name,\n        unresolvedRefName: node.nonTerminalName,\n      });\n    } else {\n      node.referencedRule = ref;\n    }\n  }\n}\n","import {\n  clone,\n  drop,\n  dropRight,\n  first as _first,\n  forEach,\n  isEmpty,\n  last,\n} from \"lodash-es\";\nimport { first } from \"./first.js\";\nimport { RestWalker } from \"./rest.js\";\nimport { TokenMatcher } from \"../parser/parser.js\";\nimport {\n  Alternation,\n  Alternative,\n  NonTerminal,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Rule,\n  Terminal,\n} from \"@chevrotain/gast\";\nimport {\n  IGrammarPath,\n  IProduction,\n  ISyntacticContentAssistPath,\n  IToken,\n  ITokenGrammarPath,\n  TokenType,\n} from \"@chevrotain/types\";\n\nexport abstract class AbstractNextPossibleTokensWalker extends RestWalker {\n  protected possibleTokTypes: TokenType[] = [];\n  protected ruleStack: string[];\n  protected occurrenceStack: number[];\n\n  protected nextProductionName = \"\";\n  protected nextProductionOccurrence = 0;\n  protected found = false;\n  protected isAtEndOfPath = false;\n\n  constructor(\n    protected topProd: Rule,\n    protected path: IGrammarPath,\n  ) {\n    super();\n  }\n\n  startWalking(): TokenType[] {\n    this.found = false;\n\n    if (this.path.ruleStack[0] !== this.topProd.name) {\n      throw Error(\"The path does not start with the walker's top Rule!\");\n    }\n\n    // immutable for the win\n    this.ruleStack = clone(this.path.ruleStack).reverse(); // intelij bug requires assertion\n    this.occurrenceStack = clone(this.path.occurrenceStack).reverse(); // intelij bug requires assertion\n\n    // already verified that the first production is valid, we now seek the 2nd production\n    this.ruleStack.pop();\n    this.occurrenceStack.pop();\n\n    this.updateExpectedNext();\n    this.walk(this.topProd);\n\n    return this.possibleTokTypes;\n  }\n\n  walk(\n    prod: { definition: IProduction[] },\n    prevRest: IProduction[] = [],\n  ): void {\n    // stop scanning once we found the path\n    if (!this.found) {\n      super.walk(prod, prevRest);\n    }\n  }\n\n  walkProdRef(\n    refProd: NonTerminal,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    // found the next production, need to keep walking in it\n    if (\n      refProd.referencedRule.name === this.nextProductionName &&\n      refProd.idx === this.nextProductionOccurrence\n    ) {\n      const fullRest = currRest.concat(prevRest);\n      this.updateExpectedNext();\n      this.walk(refProd.referencedRule, <any>fullRest);\n    }\n  }\n\n  updateExpectedNext(): void {\n    // need to consume the Terminal\n    if (isEmpty(this.ruleStack)) {\n      // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n      // really seeking is the last Terminal...\n      this.nextProductionName = \"\";\n      this.nextProductionOccurrence = 0;\n      this.isAtEndOfPath = true;\n    } else {\n      this.nextProductionName = this.ruleStack.pop()!;\n      this.nextProductionOccurrence = this.occurrenceStack.pop()!;\n    }\n  }\n}\n\nexport class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n  private nextTerminalName = \"\";\n  private nextTerminalOccurrence = 0;\n\n  constructor(\n    topProd: Rule,\n    protected path: ITokenGrammarPath,\n  ) {\n    super(topProd, path);\n    this.nextTerminalName = this.path.lastTok.name;\n    this.nextTerminalOccurrence = this.path.lastTokOccurrence;\n  }\n\n  walkTerminal(\n    terminal: Terminal,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (\n      this.isAtEndOfPath &&\n      terminal.terminalType.name === this.nextTerminalName &&\n      terminal.idx === this.nextTerminalOccurrence &&\n      !this.found\n    ) {\n      const fullRest = currRest.concat(prevRest);\n      const restProd = new Alternative({ definition: fullRest });\n      this.possibleTokTypes = first(restProd);\n      this.found = true;\n    }\n  }\n}\n\nexport type AlternativesFirstTokens = TokenType[][];\n\nexport interface IFirstAfterRepetition {\n  token: TokenType | undefined;\n  occurrence: number | undefined;\n  isEndOfRule: boolean | undefined;\n}\n\n/**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\nexport class AbstractNextTerminalAfterProductionWalker extends RestWalker {\n  protected result: IFirstAfterRepetition = {\n    token: undefined,\n    occurrence: undefined,\n    isEndOfRule: undefined,\n  };\n\n  constructor(\n    protected topRule: Rule,\n    protected occurrence: number,\n  ) {\n    super();\n  }\n\n  startWalking(): IFirstAfterRepetition {\n    this.walk(this.topRule);\n    return this.result;\n  }\n}\n\nexport class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n  walkMany(\n    manyProd: Repetition,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (manyProd.idx === this.occurrence) {\n      const firstAfterMany = _first(currRest.concat(prevRest));\n      this.result.isEndOfRule = firstAfterMany === undefined;\n      if (firstAfterMany instanceof Terminal) {\n        this.result.token = firstAfterMany.terminalType;\n        this.result.occurrence = firstAfterMany.idx;\n      }\n    } else {\n      super.walkMany(manyProd, currRest, prevRest);\n    }\n  }\n}\n\nexport class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n  walkManySep(\n    manySepProd: RepetitionWithSeparator,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (manySepProd.idx === this.occurrence) {\n      const firstAfterManySep = _first(currRest.concat(prevRest));\n      this.result.isEndOfRule = firstAfterManySep === undefined;\n      if (firstAfterManySep instanceof Terminal) {\n        this.result.token = firstAfterManySep.terminalType;\n        this.result.occurrence = firstAfterManySep.idx;\n      }\n    } else {\n      super.walkManySep(manySepProd, currRest, prevRest);\n    }\n  }\n}\n\nexport class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n  walkAtLeastOne(\n    atLeastOneProd: RepetitionMandatory,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (atLeastOneProd.idx === this.occurrence) {\n      const firstAfterAtLeastOne = _first(currRest.concat(prevRest));\n      this.result.isEndOfRule = firstAfterAtLeastOne === undefined;\n      if (firstAfterAtLeastOne instanceof Terminal) {\n        this.result.token = firstAfterAtLeastOne.terminalType;\n        this.result.occurrence = firstAfterAtLeastOne.idx;\n      }\n    } else {\n      super.walkAtLeastOne(atLeastOneProd, currRest, prevRest);\n    }\n  }\n}\n\n// TODO: reduce code duplication in the AfterWalkers\nexport class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n  walkAtLeastOneSep(\n    atleastOneSepProd: RepetitionMandatoryWithSeparator,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (atleastOneSepProd.idx === this.occurrence) {\n      const firstAfterfirstAfterAtLeastOneSep = _first(\n        currRest.concat(prevRest),\n      );\n      this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined;\n      if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n        this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType;\n        this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx;\n      }\n    } else {\n      super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest);\n    }\n  }\n}\n\nexport interface PartialPathAndSuffixes {\n  partialPath: TokenType[];\n  suffixDef: IProduction[];\n}\n\nexport function possiblePathsFrom(\n  targetDef: IProduction[],\n  maxLength: number,\n  currPath: TokenType[] = [],\n): PartialPathAndSuffixes[] {\n  // avoid side effects\n  currPath = clone(currPath);\n  let result: PartialPathAndSuffixes[] = [];\n  let i = 0;\n\n  // TODO: avoid inner funcs\n  function remainingPathWith(nextDef: IProduction[]) {\n    return nextDef.concat(drop(targetDef, i + 1));\n  }\n\n  // TODO: avoid inner funcs\n  function getAlternativesForProd(definition: IProduction[]) {\n    const alternatives = possiblePathsFrom(\n      remainingPathWith(definition),\n      maxLength,\n      currPath,\n    );\n    return result.concat(alternatives);\n  }\n\n  /**\n   * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n   * following (rest) of the targetDef.\n   *\n   * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n   * the optional production.\n   */\n  while (currPath.length < maxLength && i < targetDef.length) {\n    const prod = targetDef[i];\n\n    /* istanbul ignore else */\n    if (prod instanceof Alternative) {\n      return getAlternativesForProd(prod.definition);\n    } else if (prod instanceof NonTerminal) {\n      return getAlternativesForProd(prod.definition);\n    } else if (prod instanceof Option) {\n      result = getAlternativesForProd(prod.definition);\n    } else if (prod instanceof RepetitionMandatory) {\n      const newDef = prod.definition.concat([\n        new Repetition({\n          definition: prod.definition,\n        }),\n      ]);\n      return getAlternativesForProd(newDef);\n    } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n      const newDef = [\n        new Alternative({ definition: prod.definition }),\n        new Repetition({\n          definition: [new Terminal({ terminalType: prod.separator })].concat(\n            <any>prod.definition,\n          ),\n        }),\n      ];\n      return getAlternativesForProd(newDef);\n    } else if (prod instanceof RepetitionWithSeparator) {\n      const newDef = prod.definition.concat([\n        new Repetition({\n          definition: [new Terminal({ terminalType: prod.separator })].concat(\n            <any>prod.definition,\n          ),\n        }),\n      ]);\n      result = getAlternativesForProd(newDef);\n    } else if (prod instanceof Repetition) {\n      const newDef = prod.definition.concat([\n        new Repetition({\n          definition: prod.definition,\n        }),\n      ]);\n      result = getAlternativesForProd(newDef);\n    } else if (prod instanceof Alternation) {\n      forEach(prod.definition, (currAlt) => {\n        // TODO: this is a limited check for empty alternatives\n        //   It would prevent a common case of infinite loops during parser initialization.\n        //   However **in-directly** empty alternatives may still cause issues.\n        if (isEmpty(currAlt.definition) === false) {\n          result = getAlternativesForProd(currAlt.definition);\n        }\n      });\n      return result;\n    } else if (prod instanceof Terminal) {\n      currPath.push(prod.terminalType);\n    } else {\n      throw Error(\"non exhaustive match\");\n    }\n\n    i++;\n  }\n  result.push({\n    partialPath: currPath,\n    suffixDef: drop(targetDef, i),\n  });\n\n  return result;\n}\n\ninterface IPathToExamine {\n  idx: number;\n  def: IProduction[];\n  ruleStack: string[];\n  occurrenceStack: number[];\n}\n\nexport function nextPossibleTokensAfter(\n  initialDef: IProduction[],\n  tokenVector: IToken[],\n  tokMatcher: TokenMatcher,\n  maxLookAhead: number,\n): ISyntacticContentAssistPath[] {\n  const EXIT_NON_TERMINAL: any = \"EXIT_NONE_TERMINAL\";\n  // to avoid creating a new Array each time.\n  const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL];\n  const EXIT_ALTERNATIVE: any = \"EXIT_ALTERNATIVE\";\n  let foundCompletePath = false;\n\n  const tokenVectorLength = tokenVector.length;\n  const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;\n\n  const result: ISyntacticContentAssistPath[] = [];\n\n  const possiblePaths: IPathToExamine[] = [];\n  possiblePaths.push({\n    idx: -1,\n    def: initialDef,\n    ruleStack: [],\n    occurrenceStack: [],\n  });\n\n  while (!isEmpty(possiblePaths)) {\n    const currPath = possiblePaths.pop()!;\n\n    // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n    if (currPath === EXIT_ALTERNATIVE) {\n      if (\n        foundCompletePath &&\n        last(possiblePaths)!.idx <= minimalAlternativesIndex\n      ) {\n        // remove irrelevant alternative\n        possiblePaths.pop();\n      }\n      continue;\n    }\n\n    const currDef = currPath.def;\n    const currIdx = currPath.idx;\n    const currRuleStack = currPath.ruleStack;\n    const currOccurrenceStack = currPath.occurrenceStack;\n\n    // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n    if (isEmpty(currDef)) {\n      continue;\n    }\n\n    const prod = currDef[0];\n    /* istanbul ignore else */\n    if (prod === EXIT_NON_TERMINAL) {\n      const nextPath = {\n        idx: currIdx,\n        def: drop(currDef),\n        ruleStack: dropRight(currRuleStack),\n        occurrenceStack: dropRight(currOccurrenceStack),\n      };\n      possiblePaths.push(nextPath);\n    } else if (prod instanceof Terminal) {\n      /* istanbul ignore else */\n      if (currIdx < tokenVectorLength - 1) {\n        const nextIdx = currIdx + 1;\n        const actualToken = tokenVector[nextIdx];\n        if (tokMatcher!(actualToken, prod.terminalType)) {\n          const nextPath = {\n            idx: nextIdx,\n            def: drop(currDef),\n            ruleStack: currRuleStack,\n            occurrenceStack: currOccurrenceStack,\n          };\n          possiblePaths.push(nextPath);\n        }\n        // end of the line\n      } else if (currIdx === tokenVectorLength - 1) {\n        // IGNORE ABOVE ELSE\n        result.push({\n          nextTokenType: prod.terminalType,\n          nextTokenOccurrence: prod.idx,\n          ruleStack: currRuleStack,\n          occurrenceStack: currOccurrenceStack,\n        });\n        foundCompletePath = true;\n      } else {\n        throw Error(\"non exhaustive match\");\n      }\n    } else if (prod instanceof NonTerminal) {\n      const newRuleStack = clone(currRuleStack);\n      newRuleStack.push(prod.nonTerminalName);\n\n      const newOccurrenceStack = clone(currOccurrenceStack);\n      newOccurrenceStack.push(prod.idx);\n\n      const nextPath = {\n        idx: currIdx,\n        def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n        ruleStack: newRuleStack,\n        occurrenceStack: newOccurrenceStack,\n      };\n      possiblePaths.push(nextPath);\n    } else if (prod instanceof Option) {\n      // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n      const nextPathWithout = {\n        idx: currIdx,\n        def: drop(currDef),\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPathWithout);\n      // required marker to avoid backtracking paths whose higher priority alternatives already matched\n      possiblePaths.push(EXIT_ALTERNATIVE);\n\n      const nextPathWith = {\n        idx: currIdx,\n        def: prod.definition.concat(drop(currDef)),\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPathWith);\n    } else if (prod instanceof RepetitionMandatory) {\n      // TODO:(THE NEW operators here take a while...) (convert once?)\n      const secondIteration = new Repetition({\n        definition: prod.definition,\n        idx: prod.idx,\n      });\n      const nextDef = prod.definition.concat([secondIteration], drop(currDef));\n      const nextPath = {\n        idx: currIdx,\n        def: nextDef,\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPath);\n    } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n      // TODO:(THE NEW operators here take a while...) (convert once?)\n      const separatorGast = new Terminal({\n        terminalType: prod.separator,\n      });\n      const secondIteration = new Repetition({\n        definition: [<any>separatorGast].concat(prod.definition),\n        idx: prod.idx,\n      });\n      const nextDef = prod.definition.concat([secondIteration], drop(currDef));\n      const nextPath = {\n        idx: currIdx,\n        def: nextDef,\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPath);\n    } else if (prod instanceof RepetitionWithSeparator) {\n      // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n      const nextPathWithout = {\n        idx: currIdx,\n        def: drop(currDef),\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPathWithout);\n      // required marker to avoid backtracking paths whose higher priority alternatives already matched\n      possiblePaths.push(EXIT_ALTERNATIVE);\n\n      const separatorGast = new Terminal({\n        terminalType: prod.separator,\n      });\n      const nthRepetition = new Repetition({\n        definition: [<any>separatorGast].concat(prod.definition),\n        idx: prod.idx,\n      });\n      const nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n      const nextPathWith = {\n        idx: currIdx,\n        def: nextDef,\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPathWith);\n    } else if (prod instanceof Repetition) {\n      // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n      const nextPathWithout = {\n        idx: currIdx,\n        def: drop(currDef),\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPathWithout);\n      // required marker to avoid backtracking paths whose higher priority alternatives already matched\n      possiblePaths.push(EXIT_ALTERNATIVE);\n\n      // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n      const nthRepetition = new Repetition({\n        definition: prod.definition,\n        idx: prod.idx,\n      });\n      const nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n      const nextPathWith = {\n        idx: currIdx,\n        def: nextDef,\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      };\n      possiblePaths.push(nextPathWith);\n    } else if (prod instanceof Alternation) {\n      // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n      for (let i = prod.definition.length - 1; i >= 0; i--) {\n        const currAlt: any = prod.definition[i];\n        const currAltPath = {\n          idx: currIdx,\n          def: currAlt.definition.concat(drop(currDef)),\n          ruleStack: currRuleStack,\n          occurrenceStack: currOccurrenceStack,\n        };\n        possiblePaths.push(currAltPath);\n        possiblePaths.push(EXIT_ALTERNATIVE);\n      }\n    } else if (prod instanceof Alternative) {\n      possiblePaths.push({\n        idx: currIdx,\n        def: prod.definition.concat(drop(currDef)),\n        ruleStack: currRuleStack,\n        occurrenceStack: currOccurrenceStack,\n      });\n    } else if (prod instanceof Rule) {\n      // last because we should only encounter at most a single one of these per invocation.\n      possiblePaths.push(\n        expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack),\n      );\n    } else {\n      throw Error(\"non exhaustive match\");\n    }\n  }\n  return result;\n}\n\nfunction expandTopLevelRule(\n  topRule: Rule,\n  currIdx: number,\n  currRuleStack: string[],\n  currOccurrenceStack: number[],\n): IPathToExamine {\n  const newRuleStack = clone(currRuleStack);\n  newRuleStack.push(topRule.name);\n\n  const newCurrOccurrenceStack = clone(currOccurrenceStack);\n  // top rule is always assumed to have been called with occurrence index 1\n  newCurrOccurrenceStack.push(1);\n\n  return {\n    idx: currIdx,\n    def: topRule.definition,\n    ruleStack: newRuleStack,\n    occurrenceStack: newCurrOccurrenceStack,\n  };\n}\n","import { every, flatten, forEach, has, isEmpty, map, reduce } from \"lodash-es\";\nimport { possiblePathsFrom } from \"./interpreter.js\";\nimport { RestWalker } from \"./rest.js\";\nimport { Predicate, TokenMatcher } from \"../parser/parser.js\";\nimport {\n  tokenStructuredMatcher,\n  tokenStructuredMatcherNoCategories,\n} from \"../../scan/tokens.js\";\nimport {\n  Alternation,\n  Alternative as AlternativeGAST,\n  GAstVisitor,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n} from \"@chevrotain/gast\";\nimport {\n  BaseParser,\n  IOrAlt,\n  IProduction,\n  IProductionWithOccurrence,\n  LookaheadProductionType,\n  LookaheadSequence,\n  Rule,\n  TokenType,\n} from \"@chevrotain/types\";\n\nexport enum PROD_TYPE {\n  OPTION,\n  REPETITION,\n  REPETITION_MANDATORY,\n  REPETITION_MANDATORY_WITH_SEPARATOR,\n  REPETITION_WITH_SEPARATOR,\n  ALTERNATION,\n}\n\nexport function getProdType(\n  prod: IProduction | LookaheadProductionType,\n): PROD_TYPE {\n  /* istanbul ignore else */\n  if (prod instanceof Option || prod === \"Option\") {\n    return PROD_TYPE.OPTION;\n  } else if (prod instanceof Repetition || prod === \"Repetition\") {\n    return PROD_TYPE.REPETITION;\n  } else if (\n    prod instanceof RepetitionMandatory ||\n    prod === \"RepetitionMandatory\"\n  ) {\n    return PROD_TYPE.REPETITION_MANDATORY;\n  } else if (\n    prod instanceof RepetitionMandatoryWithSeparator ||\n    prod === \"RepetitionMandatoryWithSeparator\"\n  ) {\n    return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;\n  } else if (\n    prod instanceof RepetitionWithSeparator ||\n    prod === \"RepetitionWithSeparator\"\n  ) {\n    return PROD_TYPE.REPETITION_WITH_SEPARATOR;\n  } else if (prod instanceof Alternation || prod === \"Alternation\") {\n    return PROD_TYPE.ALTERNATION;\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n}\n\nexport function getLookaheadPaths(options: {\n  occurrence: number;\n  rule: Rule;\n  prodType: LookaheadProductionType;\n  maxLookahead: number;\n}): LookaheadSequence[] {\n  const { occurrence, rule, prodType, maxLookahead } = options;\n  const type = getProdType(prodType);\n  if (type === PROD_TYPE.ALTERNATION) {\n    return getLookaheadPathsForOr(occurrence, rule, maxLookahead);\n  } else {\n    return getLookaheadPathsForOptionalProd(\n      occurrence,\n      rule,\n      type,\n      maxLookahead,\n    );\n  }\n}\n\nexport function buildLookaheadFuncForOr(\n  occurrence: number,\n  ruleGrammar: Rule,\n  maxLookahead: number,\n  hasPredicates: boolean,\n  dynamicTokensEnabled: boolean,\n  laFuncBuilder: Function,\n): (orAlts?: IOrAlt<any>[]) => number | undefined {\n  const lookAheadPaths = getLookaheadPathsForOr(\n    occurrence,\n    ruleGrammar,\n    maxLookahead,\n  );\n\n  const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n    ? tokenStructuredMatcherNoCategories\n    : tokenStructuredMatcher;\n\n  return laFuncBuilder(\n    lookAheadPaths,\n    hasPredicates,\n    tokenMatcher,\n    dynamicTokensEnabled,\n  );\n}\n\n/**\n *  When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n *  the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n *  Example: given a production:\n *  ABC(DE)?DF\n *\n *  The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n *  alternatives.\n *\n *  @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\nexport function buildLookaheadFuncForOptionalProd(\n  occurrence: number,\n  ruleGrammar: Rule,\n  k: number,\n  dynamicTokensEnabled: boolean,\n  prodType: PROD_TYPE,\n  lookaheadBuilder: (\n    lookAheadSequence: LookaheadSequence,\n    tokenMatcher: TokenMatcher,\n    dynamicTokensEnabled: boolean,\n  ) => () => boolean,\n): () => boolean {\n  const lookAheadPaths = getLookaheadPathsForOptionalProd(\n    occurrence,\n    ruleGrammar,\n    prodType,\n    k,\n  );\n\n  const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n    ? tokenStructuredMatcherNoCategories\n    : tokenStructuredMatcher;\n\n  return lookaheadBuilder(\n    lookAheadPaths[0],\n    tokenMatcher,\n    dynamicTokensEnabled,\n  );\n}\n\nexport type Alternative = TokenType[][];\n\nexport function buildAlternativesLookAheadFunc(\n  alts: LookaheadSequence[],\n  hasPredicates: boolean,\n  tokenMatcher: TokenMatcher,\n  dynamicTokensEnabled: boolean,\n): (orAlts: IOrAlt<any>[]) => number | undefined {\n  const numOfAlts = alts.length;\n  const areAllOneTokenLookahead = every(alts, (currAlt) => {\n    return every(currAlt, (currPath) => {\n      return currPath.length === 1;\n    });\n  });\n\n  // This version takes into account the predicates as well.\n  if (hasPredicates) {\n    /**\n     * @returns {number} - The chosen alternative index\n     */\n    return function (\n      this: BaseParser,\n      orAlts: IOrAlt<any>[],\n    ): number | undefined {\n      // unfortunately the predicates must be extracted every single time\n      // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n      // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n      const predicates: (Predicate | undefined)[] = map(\n        orAlts,\n        (currAlt) => currAlt.GATE,\n      );\n\n      for (let t = 0; t < numOfAlts; t++) {\n        const currAlt = alts[t];\n        const currNumOfPaths = currAlt.length;\n\n        const currPredicate = predicates[t];\n        if (currPredicate !== undefined && currPredicate.call(this) === false) {\n          // if the predicate does not match there is no point in checking the paths\n          continue;\n        }\n        nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n          const currPath = currAlt[j];\n          const currPathLength = currPath.length;\n          for (let i = 0; i < currPathLength; i++) {\n            const nextToken = this.LA(i + 1);\n            if (tokenMatcher(nextToken, currPath[i]) === false) {\n              // mismatch in current path\n              // try the next pth\n              continue nextPath;\n            }\n          }\n          // found a full path that matches.\n          // this will also work for an empty ALT as the loop will be skipped\n          return t;\n        }\n        // none of the paths for the current alternative matched\n        // try the next alternative\n      }\n      // none of the alternatives could be matched\n      return undefined;\n    };\n  } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n    // optimized (common) case of all the lookaheads paths requiring only\n    // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n    const singleTokenAlts = map(alts, (currAlt) => {\n      return flatten(currAlt);\n    });\n\n    const choiceToAlt = reduce(\n      singleTokenAlts,\n      (result, currAlt, idx) => {\n        forEach(currAlt, (currTokType) => {\n          if (!has(result, currTokType.tokenTypeIdx!)) {\n            result[currTokType.tokenTypeIdx!] = idx;\n          }\n          forEach(currTokType.categoryMatches!, (currExtendingType) => {\n            if (!has(result, currExtendingType)) {\n              result[currExtendingType] = idx;\n            }\n          });\n        });\n        return result;\n      },\n      {} as Record<number, number>,\n    );\n\n    /**\n     * @returns {number} - The chosen alternative index\n     */\n    return function (this: BaseParser): number {\n      const nextToken = this.LA(1);\n      return choiceToAlt[nextToken.tokenTypeIdx];\n    };\n  } else {\n    // optimized lookahead without needing to check the predicates at all.\n    // this causes code duplication which is intentional to improve performance.\n    /**\n     * @returns {number} - The chosen alternative index\n     */\n    return function (this: BaseParser): number | undefined {\n      for (let t = 0; t < numOfAlts; t++) {\n        const currAlt = alts[t];\n        const currNumOfPaths = currAlt.length;\n        nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n          const currPath = currAlt[j];\n          const currPathLength = currPath.length;\n          for (let i = 0; i < currPathLength; i++) {\n            const nextToken = this.LA(i + 1);\n            if (tokenMatcher(nextToken, currPath[i]) === false) {\n              // mismatch in current path\n              // try the next pth\n              continue nextPath;\n            }\n          }\n          // found a full path that matches.\n          // this will also work for an empty ALT as the loop will be skipped\n          return t;\n        }\n        // none of the paths for the current alternative matched\n        // try the next alternative\n      }\n      // none of the alternatives could be matched\n      return undefined;\n    };\n  }\n}\n\nexport function buildSingleAlternativeLookaheadFunction(\n  alt: LookaheadSequence,\n  tokenMatcher: TokenMatcher,\n  dynamicTokensEnabled: boolean,\n): () => boolean {\n  const areAllOneTokenLookahead = every(alt, (currPath) => {\n    return currPath.length === 1;\n  });\n\n  const numOfPaths = alt.length;\n\n  // optimized (common) case of all the lookaheads paths requiring only\n  // a single token lookahead.\n  if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n    const singleTokensTypes = flatten(alt);\n\n    if (\n      singleTokensTypes.length === 1 &&\n      isEmpty((<any>singleTokensTypes[0]).categoryMatches)\n    ) {\n      const expectedTokenType = singleTokensTypes[0];\n      const expectedTokenUniqueKey = (<any>expectedTokenType).tokenTypeIdx;\n\n      return function (this: BaseParser): boolean {\n        return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey;\n      };\n    } else {\n      const choiceToAlt = reduce(\n        singleTokensTypes,\n        (result, currTokType, idx) => {\n          result[currTokType.tokenTypeIdx!] = true;\n          forEach(currTokType.categoryMatches!, (currExtendingType) => {\n            result[currExtendingType] = true;\n          });\n          return result;\n        },\n        [] as boolean[],\n      );\n\n      return function (this: BaseParser): boolean {\n        const nextToken = this.LA(1);\n        return choiceToAlt[nextToken.tokenTypeIdx] === true;\n      };\n    }\n  } else {\n    return function (this: BaseParser): boolean {\n      nextPath: for (let j = 0; j < numOfPaths; j++) {\n        const currPath = alt[j];\n        const currPathLength = currPath.length;\n        for (let i = 0; i < currPathLength; i++) {\n          const nextToken = this.LA(i + 1);\n          if (tokenMatcher(nextToken, currPath[i]) === false) {\n            // mismatch in current path\n            // try the next pth\n            continue nextPath;\n          }\n        }\n        // found a full path that matches.\n        return true;\n      }\n\n      // none of the paths matched\n      return false;\n    };\n  }\n}\n\nclass RestDefinitionFinderWalker extends RestWalker {\n  private restDef: IProduction[];\n\n  constructor(\n    private topProd: Rule,\n    private targetOccurrence: number,\n    private targetProdType: PROD_TYPE,\n  ) {\n    super();\n  }\n\n  startWalking(): IProduction[] {\n    this.walk(this.topProd);\n    return this.restDef;\n  }\n\n  private checkIsTarget(\n    node: IProductionWithOccurrence,\n    expectedProdType: PROD_TYPE,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): boolean {\n    if (\n      node.idx === this.targetOccurrence &&\n      this.targetProdType === expectedProdType\n    ) {\n      this.restDef = currRest.concat(prevRest);\n      return true;\n    }\n    // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n    return false;\n  }\n\n  walkOption(\n    optionProd: Option,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n      super.walkOption(optionProd, currRest, prevRest);\n    }\n  }\n\n  walkAtLeastOne(\n    atLeastOneProd: RepetitionMandatory,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (\n      !this.checkIsTarget(\n        atLeastOneProd,\n        PROD_TYPE.REPETITION_MANDATORY,\n        currRest,\n        prevRest,\n      )\n    ) {\n      super.walkOption(atLeastOneProd, currRest, prevRest);\n    }\n  }\n\n  walkAtLeastOneSep(\n    atLeastOneSepProd: RepetitionMandatoryWithSeparator,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (\n      !this.checkIsTarget(\n        atLeastOneSepProd,\n        PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n        currRest,\n        prevRest,\n      )\n    ) {\n      super.walkOption(atLeastOneSepProd, currRest, prevRest);\n    }\n  }\n\n  walkMany(\n    manyProd: Repetition,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (\n      !this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)\n    ) {\n      super.walkOption(manyProd, currRest, prevRest);\n    }\n  }\n\n  walkManySep(\n    manySepProd: RepetitionWithSeparator,\n    currRest: IProduction[],\n    prevRest: IProduction[],\n  ): void {\n    if (\n      !this.checkIsTarget(\n        manySepProd,\n        PROD_TYPE.REPETITION_WITH_SEPARATOR,\n        currRest,\n        prevRest,\n      )\n    ) {\n      super.walkOption(manySepProd, currRest, prevRest);\n    }\n  }\n}\n\n/**\n * Returns the definition of a target production in a top level level rule.\n */\nclass InsideDefinitionFinderVisitor extends GAstVisitor {\n  public result: IProduction[] = [];\n\n  constructor(\n    private targetOccurrence: number,\n    private targetProdType: PROD_TYPE,\n    private targetRef?: any,\n  ) {\n    super();\n  }\n\n  private checkIsTarget(\n    node: { definition: IProduction[] } & IProductionWithOccurrence,\n    expectedProdName: PROD_TYPE,\n  ): void {\n    if (\n      node.idx === this.targetOccurrence &&\n      this.targetProdType === expectedProdName &&\n      (this.targetRef === undefined || node === this.targetRef)\n    ) {\n      this.result = node.definition;\n    }\n  }\n\n  public visitOption(node: Option): void {\n    this.checkIsTarget(node, PROD_TYPE.OPTION);\n  }\n\n  public visitRepetition(node: Repetition): void {\n    this.checkIsTarget(node, PROD_TYPE.REPETITION);\n  }\n\n  public visitRepetitionMandatory(node: RepetitionMandatory): void {\n    this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY);\n  }\n\n  public visitRepetitionMandatoryWithSeparator(\n    node: RepetitionMandatoryWithSeparator,\n  ): void {\n    this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);\n  }\n\n  public visitRepetitionWithSeparator(node: RepetitionWithSeparator): void {\n    this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR);\n  }\n\n  public visitAlternation(node: Alternation): void {\n    this.checkIsTarget(node, PROD_TYPE.ALTERNATION);\n  }\n}\n\nfunction initializeArrayOfArrays(size: number): any[][] {\n  const result = new Array(size);\n  for (let i = 0; i < size; i++) {\n    result[i] = [];\n  }\n  return result;\n}\n\n/**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * -  A single path with categories may match multiple **actual** paths.\n */\nfunction pathToHashKeys(path: TokenType[]): string[] {\n  let keys = [\"\"];\n  for (let i = 0; i < path.length; i++) {\n    const tokType = path[i];\n    const longerKeys = [];\n    for (let j = 0; j < keys.length; j++) {\n      const currShorterKey = keys[j];\n      longerKeys.push(currShorterKey + \"_\" + tokType.tokenTypeIdx);\n      for (let t = 0; t < tokType.categoryMatches!.length; t++) {\n        const categoriesKeySuffix = \"_\" + tokType.categoryMatches![t];\n        longerKeys.push(currShorterKey + categoriesKeySuffix);\n      }\n    }\n    keys = longerKeys;\n  }\n  return keys;\n}\n\n/**\n * Imperative style due to being called from a hot spot\n */\nfunction isUniquePrefixHash(\n  altKnownPathsKeys: Record<string, boolean>[],\n  searchPathKeys: string[],\n  idx: number,\n): boolean {\n  for (\n    let currAltIdx = 0;\n    currAltIdx < altKnownPathsKeys.length;\n    currAltIdx++\n  ) {\n    // We only want to test vs the other alternatives\n    if (currAltIdx === idx) {\n      continue;\n    }\n    const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx];\n    for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n      const searchKey = searchPathKeys[searchIdx];\n      if (otherAltKnownPathsKeys[searchKey] === true) {\n        return false;\n      }\n    }\n  }\n  // None of the SearchPathKeys were found in any of the other alternatives\n  return true;\n}\n\nexport function lookAheadSequenceFromAlternatives(\n  altsDefs: IProduction[],\n  k: number,\n): LookaheadSequence[] {\n  const partialAlts = map(altsDefs, (currAlt) =>\n    possiblePathsFrom([currAlt], 1),\n  );\n  const finalResult = initializeArrayOfArrays(partialAlts.length);\n  const altsHashes = map(partialAlts, (currAltPaths) => {\n    const dict: { [key: string]: boolean } = {};\n    forEach(currAltPaths, (item) => {\n      const keys = pathToHashKeys(item.partialPath);\n      forEach(keys, (currKey) => {\n        dict[currKey] = true;\n      });\n    });\n    return dict;\n  });\n  let newData = partialAlts;\n\n  // maxLookahead loop\n  for (let pathLength = 1; pathLength <= k; pathLength++) {\n    const currDataset = newData;\n    newData = initializeArrayOfArrays(currDataset.length);\n\n    // alternatives loop\n    for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {\n      const currAltPathsAndSuffixes = currDataset[altIdx];\n      // paths in current alternative loop\n      for (\n        let currPathIdx = 0;\n        currPathIdx < currAltPathsAndSuffixes.length;\n        currPathIdx++\n      ) {\n        const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath;\n        const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef;\n        const prefixKeys = pathToHashKeys(currPathPrefix);\n        const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx);\n        // End of the line for this path.\n        if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n          const currAltResult = finalResult[altIdx];\n          // TODO: Can we implement a containsPath using Maps/Dictionaries?\n          if (containsPath(currAltResult, currPathPrefix) === false) {\n            currAltResult.push(currPathPrefix);\n            // Update all new  keys for the current path.\n            for (let j = 0; j < prefixKeys.length; j++) {\n              const currKey = prefixKeys[j];\n              altsHashes[altIdx][currKey] = true;\n            }\n          }\n        }\n        // Expand longer paths\n        else {\n          const newPartialPathsAndSuffixes = possiblePathsFrom(\n            suffixDef,\n            pathLength + 1,\n            currPathPrefix,\n          );\n          newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);\n\n          // Update keys for new known paths\n          forEach(newPartialPathsAndSuffixes, (item) => {\n            const prefixKeys = pathToHashKeys(item.partialPath);\n            forEach(prefixKeys, (key) => {\n              altsHashes[altIdx][key] = true;\n            });\n          });\n        }\n      }\n    }\n  }\n\n  return finalResult;\n}\n\nexport function getLookaheadPathsForOr(\n  occurrence: number,\n  ruleGrammar: Rule,\n  k: number,\n  orProd?: Alternation,\n): LookaheadSequence[] {\n  const visitor = new InsideDefinitionFinderVisitor(\n    occurrence,\n    PROD_TYPE.ALTERNATION,\n    orProd,\n  );\n  ruleGrammar.accept(visitor);\n  return lookAheadSequenceFromAlternatives(visitor.result, k);\n}\n\nexport function getLookaheadPathsForOptionalProd(\n  occurrence: number,\n  ruleGrammar: Rule,\n  prodType: PROD_TYPE,\n  k: number,\n): LookaheadSequence[] {\n  const insideDefVisitor = new InsideDefinitionFinderVisitor(\n    occurrence,\n    prodType,\n  );\n  ruleGrammar.accept(insideDefVisitor);\n  const insideDef = insideDefVisitor.result;\n\n  const afterDefWalker = new RestDefinitionFinderWalker(\n    ruleGrammar,\n    occurrence,\n    prodType,\n  );\n  const afterDef = afterDefWalker.startWalking();\n\n  const insideFlat = new AlternativeGAST({ definition: insideDef });\n  const afterFlat = new AlternativeGAST({ definition: afterDef });\n\n  return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k);\n}\n\nexport function containsPath(\n  alternative: Alternative,\n  searchPath: TokenType[],\n): boolean {\n  compareOtherPath: for (let i = 0; i < alternative.length; i++) {\n    const otherPath = alternative[i];\n    if (otherPath.length !== searchPath.length) {\n      continue;\n    }\n    for (let j = 0; j < otherPath.length; j++) {\n      const searchTok = searchPath[j];\n      const otherTok = otherPath[j];\n\n      const matchingTokens =\n        searchTok === otherTok ||\n        otherTok.categoryMatchesMap![searchTok.tokenTypeIdx!] !== undefined;\n      if (matchingTokens === false) {\n        continue compareOtherPath;\n      }\n    }\n    return true;\n  }\n\n  return false;\n}\n\nexport function isStrictPrefixOfPath(\n  prefix: TokenType[],\n  other: TokenType[],\n): boolean {\n  return (\n    prefix.length < other.length &&\n    every(prefix, (tokType, idx) => {\n      const otherTokType = other[idx];\n      return (\n        tokType === otherTokType ||\n        otherTokType.categoryMatchesMap![tokType.tokenTypeIdx!]\n      );\n    })\n  );\n}\n\nexport function areTokenCategoriesNotUsed(\n  lookAheadPaths: LookaheadSequence[],\n): boolean {\n  return every(lookAheadPaths, (singleAltPaths) =>\n    every(singleAltPaths, (singlePath) =>\n      every(singlePath, (token) => isEmpty(token.categoryMatches!)),\n    ),\n  );\n}\n","import {\n  clone,\n  compact,\n  difference,\n  drop,\n  dropRight,\n  filter,\n  first,\n  flatMap,\n  flatten,\n  forEach,\n  groupBy,\n  includes,\n  isEmpty,\n  map,\n  pickBy,\n  reduce,\n  reject,\n  values,\n} from \"lodash-es\";\nimport {\n  IParserAmbiguousAlternativesDefinitionError,\n  IParserDuplicatesDefinitionError,\n  IParserEmptyAlternativeDefinitionError,\n  ParserDefinitionErrorType,\n} from \"../parser/parser.js\";\nimport {\n  Alternation,\n  Alternative as AlternativeGAST,\n  GAstVisitor,\n  getProductionDslName,\n  isOptionalProd,\n  NonTerminal,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Terminal,\n} from \"@chevrotain/gast\";\nimport {\n  Alternative,\n  containsPath,\n  getLookaheadPathsForOptionalProd,\n  getLookaheadPathsForOr,\n  getProdType,\n  isStrictPrefixOfPath,\n} from \"./lookahead.js\";\nimport { nextPossibleTokensAfter } from \"./interpreter.js\";\nimport {\n  ILookaheadStrategy,\n  IProduction,\n  IProductionWithOccurrence,\n  Rule,\n  TokenType,\n} from \"@chevrotain/types\";\nimport {\n  IGrammarValidatorErrorMessageProvider,\n  IParserDefinitionError,\n} from \"./types.js\";\nimport { tokenStructuredMatcher } from \"../../scan/tokens.js\";\n\nexport function validateLookahead(options: {\n  lookaheadStrategy: ILookaheadStrategy;\n  rules: Rule[];\n  tokenTypes: TokenType[];\n  grammarName: string;\n}): IParserDefinitionError[] {\n  const lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({\n    rules: options.rules,\n    tokenTypes: options.tokenTypes,\n    grammarName: options.grammarName,\n  });\n  return map(lookaheadValidationErrorMessages, (errorMessage) => ({\n    type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION,\n    ...errorMessage,\n  }));\n}\n\nexport function validateGrammar(\n  topLevels: Rule[],\n  tokenTypes: TokenType[],\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n  grammarName: string,\n): IParserDefinitionError[] {\n  const duplicateErrors: IParserDefinitionError[] = flatMap(\n    topLevels,\n    (currTopLevel) =>\n      validateDuplicateProductions(currTopLevel, errMsgProvider),\n  );\n\n  const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(\n    topLevels,\n    tokenTypes,\n    errMsgProvider,\n  );\n\n  const tooManyAltsErrors = flatMap(topLevels, (curRule) =>\n    validateTooManyAlts(curRule, errMsgProvider),\n  );\n\n  const duplicateRulesError = flatMap(topLevels, (curRule) =>\n    validateRuleDoesNotAlreadyExist(\n      curRule,\n      topLevels,\n      grammarName,\n      errMsgProvider,\n    ),\n  );\n\n  return duplicateErrors.concat(\n    termsNamespaceConflictErrors,\n    tooManyAltsErrors,\n    duplicateRulesError,\n  );\n}\n\nfunction validateDuplicateProductions(\n  topLevelRule: Rule,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserDuplicatesDefinitionError[] {\n  const collectorVisitor = new OccurrenceValidationCollector();\n  topLevelRule.accept(collectorVisitor);\n  const allRuleProductions = collectorVisitor.allProductions;\n\n  const productionGroups = groupBy(\n    allRuleProductions,\n    identifyProductionForDuplicates,\n  );\n\n  const duplicates: any = pickBy(productionGroups, (currGroup) => {\n    return currGroup.length > 1;\n  });\n\n  const errors = map(values(duplicates), (currDuplicates: any) => {\n    const firstProd: any = first(currDuplicates);\n    const msg = errMsgProvider.buildDuplicateFoundError(\n      topLevelRule,\n      currDuplicates,\n    );\n    const dslName = getProductionDslName(firstProd);\n    const defError: IParserDuplicatesDefinitionError = {\n      message: msg,\n      type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n      ruleName: topLevelRule.name,\n      dslName: dslName,\n      occurrence: firstProd.idx,\n    };\n\n    const param = getExtraProductionArgument(firstProd);\n    if (param) {\n      defError.parameter = param;\n    }\n\n    return defError;\n  });\n  return errors;\n}\n\nexport function identifyProductionForDuplicates(\n  prod: IProductionWithOccurrence,\n): string {\n  return `${getProductionDslName(prod)}_#_${\n    prod.idx\n  }_#_${getExtraProductionArgument(prod)}`;\n}\n\nfunction getExtraProductionArgument(prod: IProductionWithOccurrence): string {\n  if (prod instanceof Terminal) {\n    return prod.terminalType.name;\n  } else if (prod instanceof NonTerminal) {\n    return prod.nonTerminalName;\n  } else {\n    return \"\";\n  }\n}\n\nexport class OccurrenceValidationCollector extends GAstVisitor {\n  public allProductions: IProductionWithOccurrence[] = [];\n\n  public visitNonTerminal(subrule: NonTerminal): void {\n    this.allProductions.push(subrule);\n  }\n\n  public visitOption(option: Option): void {\n    this.allProductions.push(option);\n  }\n\n  public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n    this.allProductions.push(manySep);\n  }\n\n  public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n    this.allProductions.push(atLeastOne);\n  }\n\n  public visitRepetitionMandatoryWithSeparator(\n    atLeastOneSep: RepetitionMandatoryWithSeparator,\n  ): void {\n    this.allProductions.push(atLeastOneSep);\n  }\n\n  public visitRepetition(many: Repetition): void {\n    this.allProductions.push(many);\n  }\n\n  public visitAlternation(or: Alternation): void {\n    this.allProductions.push(or);\n  }\n\n  public visitTerminal(terminal: Terminal): void {\n    this.allProductions.push(terminal);\n  }\n}\n\nexport function validateRuleDoesNotAlreadyExist(\n  rule: Rule,\n  allRules: Rule[],\n  className: string,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserDefinitionError[] {\n  const errors = [];\n  const occurrences = reduce(\n    allRules,\n    (result, curRule) => {\n      if (curRule.name === rule.name) {\n        return result + 1;\n      }\n      return result;\n    },\n    0,\n  );\n  if (occurrences > 1) {\n    const errMsg = errMsgProvider.buildDuplicateRuleNameError({\n      topLevelRule: rule,\n      grammarName: className,\n    });\n    errors.push({\n      message: errMsg,\n      type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n      ruleName: rule.name,\n    });\n  }\n\n  return errors;\n}\n\n// TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n// This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n// The grammar structure, only at runtime.\nexport function validateRuleIsOverridden(\n  ruleName: string,\n  definedRulesNames: string[],\n  className: string,\n): IParserDefinitionError[] {\n  const errors = [];\n  let errMsg;\n\n  if (!includes(definedRulesNames, ruleName)) {\n    errMsg =\n      `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-` +\n      `as it is not defined in any of the super grammars `;\n    errors.push({\n      message: errMsg,\n      type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n      ruleName: ruleName,\n    });\n  }\n\n  return errors;\n}\n\nexport function validateNoLeftRecursion(\n  topRule: Rule,\n  currRule: Rule,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n  path: Rule[] = [],\n): IParserDefinitionError[] {\n  const errors: IParserDefinitionError[] = [];\n  const nextNonTerminals = getFirstNoneTerminal(currRule.definition);\n  if (isEmpty(nextNonTerminals)) {\n    return [];\n  } else {\n    const ruleName = topRule.name;\n    const foundLeftRecursion = includes(nextNonTerminals, topRule);\n    if (foundLeftRecursion) {\n      errors.push({\n        message: errMsgProvider.buildLeftRecursionError({\n          topLevelRule: topRule,\n          leftRecursionPath: path,\n        }),\n        type: ParserDefinitionErrorType.LEFT_RECURSION,\n        ruleName: ruleName,\n      });\n    }\n\n    // we are only looking for cyclic paths leading back to the specific topRule\n    // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n    const validNextSteps = difference(nextNonTerminals, path.concat([topRule]));\n    const errorsFromNextSteps = flatMap(validNextSteps, (currRefRule) => {\n      const newPath = clone(path);\n      newPath.push(currRefRule);\n      return validateNoLeftRecursion(\n        topRule,\n        currRefRule,\n        errMsgProvider,\n        newPath,\n      );\n    });\n\n    return errors.concat(errorsFromNextSteps);\n  }\n}\n\nexport function getFirstNoneTerminal(definition: IProduction[]): Rule[] {\n  let result: Rule[] = [];\n  if (isEmpty(definition)) {\n    return result;\n  }\n  const firstProd = first(definition);\n\n  /* istanbul ignore else */\n  if (firstProd instanceof NonTerminal) {\n    result.push(firstProd.referencedRule);\n  } else if (\n    firstProd instanceof AlternativeGAST ||\n    firstProd instanceof Option ||\n    firstProd instanceof RepetitionMandatory ||\n    firstProd instanceof RepetitionMandatoryWithSeparator ||\n    firstProd instanceof RepetitionWithSeparator ||\n    firstProd instanceof Repetition\n  ) {\n    result = result.concat(\n      getFirstNoneTerminal(<IProduction[]>firstProd.definition),\n    );\n  } else if (firstProd instanceof Alternation) {\n    // each sub definition in alternation is a FLAT\n    result = flatten(\n      map(firstProd.definition, (currSubDef) =>\n        getFirstNoneTerminal((<AlternativeGAST>currSubDef).definition),\n      ),\n    );\n  } else if (firstProd instanceof Terminal) {\n    // nothing to see, move along\n  } else {\n    throw Error(\"non exhaustive match\");\n  }\n\n  const isFirstOptional = isOptionalProd(firstProd);\n  const hasMore = definition.length > 1;\n  if (isFirstOptional && hasMore) {\n    const rest = drop(definition);\n    return result.concat(getFirstNoneTerminal(rest));\n  } else {\n    return result;\n  }\n}\n\nclass OrCollector extends GAstVisitor {\n  public alternations: Alternation[] = [];\n\n  public visitAlternation(node: Alternation): void {\n    this.alternations.push(node);\n  }\n}\n\nexport function validateEmptyOrAlternative(\n  topLevelRule: Rule,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserEmptyAlternativeDefinitionError[] {\n  const orCollector = new OrCollector();\n  topLevelRule.accept(orCollector);\n  const ors = orCollector.alternations;\n\n  const errors = flatMap<Alternation, IParserEmptyAlternativeDefinitionError>(\n    ors,\n    (currOr) => {\n      const exceptLast = dropRight(currOr.definition);\n      return flatMap(exceptLast, (currAlternative, currAltIdx) => {\n        const possibleFirstInAlt = nextPossibleTokensAfter(\n          [currAlternative],\n          [],\n          tokenStructuredMatcher,\n          1,\n        );\n        if (isEmpty(possibleFirstInAlt)) {\n          return [\n            {\n              message: errMsgProvider.buildEmptyAlternationError({\n                topLevelRule: topLevelRule,\n                alternation: currOr,\n                emptyChoiceIdx: currAltIdx,\n              }),\n              type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n              ruleName: topLevelRule.name,\n              occurrence: currOr.idx,\n              alternative: currAltIdx + 1,\n            },\n          ];\n        } else {\n          return [];\n        }\n      });\n    },\n  );\n\n  return errors;\n}\n\nexport function validateAmbiguousAlternationAlternatives(\n  topLevelRule: Rule,\n  globalMaxLookahead: number,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserAmbiguousAlternativesDefinitionError[] {\n  const orCollector = new OrCollector();\n  topLevelRule.accept(orCollector);\n  let ors = orCollector.alternations;\n\n  // New Handling of ignoring ambiguities\n  // - https://github.com/chevrotain/chevrotain/issues/869\n  ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true);\n\n  const errors = flatMap(ors, (currOr: Alternation) => {\n    const currOccurrence = currOr.idx;\n    const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;\n    const alternatives = getLookaheadPathsForOr(\n      currOccurrence,\n      topLevelRule,\n      actualMaxLookahead,\n      currOr,\n    );\n    const altsAmbiguityErrors = checkAlternativesAmbiguities(\n      alternatives,\n      currOr,\n      topLevelRule,\n      errMsgProvider,\n    );\n    const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(\n      alternatives,\n      currOr,\n      topLevelRule,\n      errMsgProvider,\n    );\n\n    return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors);\n  });\n\n  return errors;\n}\n\nexport class RepetitionCollector extends GAstVisitor {\n  public allProductions: (IProductionWithOccurrence & {\n    maxLookahead?: number;\n  })[] = [];\n\n  public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n    this.allProductions.push(manySep);\n  }\n\n  public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n    this.allProductions.push(atLeastOne);\n  }\n\n  public visitRepetitionMandatoryWithSeparator(\n    atLeastOneSep: RepetitionMandatoryWithSeparator,\n  ): void {\n    this.allProductions.push(atLeastOneSep);\n  }\n\n  public visitRepetition(many: Repetition): void {\n    this.allProductions.push(many);\n  }\n}\n\nexport function validateTooManyAlts(\n  topLevelRule: Rule,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserDefinitionError[] {\n  const orCollector = new OrCollector();\n  topLevelRule.accept(orCollector);\n  const ors = orCollector.alternations;\n\n  const errors = flatMap(ors, (currOr) => {\n    if (currOr.definition.length > 255) {\n      return [\n        {\n          message: errMsgProvider.buildTooManyAlternativesError({\n            topLevelRule: topLevelRule,\n            alternation: currOr,\n          }),\n          type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n          ruleName: topLevelRule.name,\n          occurrence: currOr.idx,\n        },\n      ];\n    } else {\n      return [];\n    }\n  });\n\n  return errors;\n}\n\nexport function validateSomeNonEmptyLookaheadPath(\n  topLevelRules: Rule[],\n  maxLookahead: number,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserDefinitionError[] {\n  const errors: IParserDefinitionError[] = [];\n  forEach(topLevelRules, (currTopRule) => {\n    const collectorVisitor = new RepetitionCollector();\n    currTopRule.accept(collectorVisitor);\n    const allRuleProductions = collectorVisitor.allProductions;\n    forEach(allRuleProductions, (currProd) => {\n      const prodType = getProdType(currProd);\n      const actualMaxLookahead = currProd.maxLookahead || maxLookahead;\n      const currOccurrence = currProd.idx;\n      const paths = getLookaheadPathsForOptionalProd(\n        currOccurrence,\n        currTopRule,\n        prodType,\n        actualMaxLookahead,\n      );\n      const pathsInsideProduction = paths[0];\n      if (isEmpty(flatten(pathsInsideProduction))) {\n        const errMsg = errMsgProvider.buildEmptyRepetitionError({\n          topLevelRule: currTopRule,\n          repetition: currProd,\n        });\n        errors.push({\n          message: errMsg,\n          type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n          ruleName: currTopRule.name,\n        });\n      }\n    });\n  });\n\n  return errors;\n}\n\nexport interface IAmbiguityDescriptor {\n  alts: number[];\n  path: TokenType[];\n}\n\nfunction checkAlternativesAmbiguities(\n  alternatives: Alternative[],\n  alternation: Alternation,\n  rule: Rule,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserAmbiguousAlternativesDefinitionError[] {\n  const foundAmbiguousPaths: Alternative = [];\n  const identicalAmbiguities = reduce(\n    alternatives,\n    (result, currAlt, currAltIdx) => {\n      // ignore (skip) ambiguities with this alternative\n      if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n        return result;\n      }\n\n      forEach(currAlt, (currPath) => {\n        const altsCurrPathAppearsIn = [currAltIdx];\n        forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n          if (\n            currAltIdx !== currOtherAltIdx &&\n            containsPath(currOtherAlt, currPath) &&\n            // ignore (skip) ambiguities with this \"other\" alternative\n            alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true\n          ) {\n            altsCurrPathAppearsIn.push(currOtherAltIdx);\n          }\n        });\n\n        if (\n          altsCurrPathAppearsIn.length > 1 &&\n          !containsPath(foundAmbiguousPaths, currPath)\n        ) {\n          foundAmbiguousPaths.push(currPath);\n          result.push({\n            alts: altsCurrPathAppearsIn,\n            path: currPath,\n          });\n        }\n      });\n      return result;\n    },\n    [] as { alts: number[]; path: TokenType[] }[],\n  );\n\n  const currErrors = map(identicalAmbiguities, (currAmbDescriptor) => {\n    const ambgIndices = map(\n      currAmbDescriptor.alts,\n      (currAltIdx) => currAltIdx + 1,\n    );\n\n    const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n      topLevelRule: rule,\n      alternation: alternation,\n      ambiguityIndices: ambgIndices,\n      prefixPath: currAmbDescriptor.path,\n    });\n\n    return {\n      message: currMessage,\n      type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n      ruleName: rule.name,\n      occurrence: alternation.idx,\n      alternatives: currAmbDescriptor.alts,\n    };\n  });\n\n  return currErrors;\n}\n\nexport function checkPrefixAlternativesAmbiguities(\n  alternatives: Alternative[],\n  alternation: Alternation,\n  rule: Rule,\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserAmbiguousAlternativesDefinitionError[] {\n  // flatten\n  const pathsAndIndices = reduce(\n    alternatives,\n    (result, currAlt, idx) => {\n      const currPathsAndIdx = map(currAlt, (currPath) => {\n        return { idx: idx, path: currPath };\n      });\n      return result.concat(currPathsAndIdx);\n    },\n    [] as { idx: number; path: TokenType[] }[],\n  );\n\n  const errors = compact(\n    flatMap(pathsAndIndices, (currPathAndIdx) => {\n      const alternativeGast = alternation.definition[currPathAndIdx.idx];\n      // ignore (skip) ambiguities with this alternative\n      if (alternativeGast.ignoreAmbiguities === true) {\n        return [];\n      }\n      const targetIdx = currPathAndIdx.idx;\n      const targetPath = currPathAndIdx.path;\n\n      const prefixAmbiguitiesPathsAndIndices = filter(\n        pathsAndIndices,\n        (searchPathAndIdx) => {\n          // prefix ambiguity can only be created from lower idx (higher priority) path\n          return (\n            // ignore (skip) ambiguities with this \"other\" alternative\n            alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !==\n              true &&\n            searchPathAndIdx.idx < targetIdx &&\n            // checking for strict prefix because identical lookaheads\n            // will be be detected using a different validation.\n            isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)\n          );\n        },\n      );\n\n      const currPathPrefixErrors = map(\n        prefixAmbiguitiesPathsAndIndices,\n        (currAmbPathAndIdx): IParserAmbiguousAlternativesDefinitionError => {\n          const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];\n          const occurrence = alternation.idx === 0 ? \"\" : alternation.idx;\n\n          const message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n            topLevelRule: rule,\n            alternation: alternation,\n            ambiguityIndices: ambgIndices,\n            prefixPath: currAmbPathAndIdx.path,\n          });\n          return {\n            message: message,\n            type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n            ruleName: rule.name,\n            occurrence: occurrence,\n            alternatives: ambgIndices,\n          };\n        },\n      );\n\n      return currPathPrefixErrors;\n    }),\n  );\n\n  return errors;\n}\n\nfunction checkTerminalAndNoneTerminalsNameSpace(\n  topLevels: Rule[],\n  tokenTypes: TokenType[],\n  errMsgProvider: IGrammarValidatorErrorMessageProvider,\n): IParserDefinitionError[] {\n  const errors: IParserDefinitionError[] = [];\n\n  const tokenNames = map(tokenTypes, (currToken) => currToken.name);\n\n  forEach(topLevels, (currRule) => {\n    const currRuleName = currRule.name;\n    if (includes(tokenNames, currRuleName)) {\n      const errMsg = errMsgProvider.buildNamespaceConflictError(currRule);\n\n      errors.push({\n        message: errMsg,\n        type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n        ruleName: currRuleName,\n      });\n    }\n  });\n\n  return errors;\n}\n","import { Rule } from \"@chevrotain/gast\";\nimport { defaults, forEach } from \"lodash-es\";\nimport { resolveGrammar as orgResolveGrammar } from \"../resolver.js\";\nimport { validateGrammar as orgValidateGrammar } from \"../checks.js\";\nimport {\n  defaultGrammarResolverErrorProvider,\n  defaultGrammarValidatorErrorProvider,\n} from \"../../errors_public.js\";\nimport { TokenType } from \"@chevrotain/types\";\nimport {\n  IGrammarResolverErrorMessageProvider,\n  IGrammarValidatorErrorMessageProvider,\n  IParserDefinitionError,\n} from \"../types.js\";\n\ntype ResolveGrammarOpts = {\n  rules: Rule[];\n  errMsgProvider?: IGrammarResolverErrorMessageProvider;\n};\nexport function resolveGrammar(\n  options: ResolveGrammarOpts,\n): IParserDefinitionError[] {\n  const actualOptions: Required<ResolveGrammarOpts> = defaults(options, {\n    errMsgProvider: defaultGrammarResolverErrorProvider,\n  });\n\n  const topRulesTable: { [ruleName: string]: Rule } = {};\n  forEach(options.rules, (rule) => {\n    topRulesTable[rule.name] = rule;\n  });\n  return orgResolveGrammar(topRulesTable, actualOptions.errMsgProvider);\n}\n\nexport function validateGrammar(options: {\n  rules: Rule[];\n  tokenTypes: TokenType[];\n  grammarName: string;\n  errMsgProvider: IGrammarValidatorErrorMessageProvider;\n}): IParserDefinitionError[] {\n  options = defaults(options, {\n    errMsgProvider: defaultGrammarValidatorErrorProvider,\n  });\n\n  return orgValidateGrammar(\n    options.rules,\n    options.tokenTypes,\n    options.errMsgProvider,\n    options.grammarName,\n  );\n}\n","import { includes } from \"lodash-es\";\nimport {\n  IRecognitionException,\n  IRecognizerContext,\n  IToken,\n} from \"@chevrotain/types\";\n\nconst MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\";\nconst NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\";\nconst EARLY_EXIT_EXCEPTION = \"EarlyExitException\";\nconst NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\";\n\nconst RECOGNITION_EXCEPTION_NAMES = [\n  MISMATCHED_TOKEN_EXCEPTION,\n  NO_VIABLE_ALT_EXCEPTION,\n  EARLY_EXIT_EXCEPTION,\n  NOT_ALL_INPUT_PARSED_EXCEPTION,\n];\n\nObject.freeze(RECOGNITION_EXCEPTION_NAMES);\n\n// hacks to bypass no support for custom Errors in javascript/typescript\nexport function isRecognitionException(error: Error) {\n  // can't do instanceof on hacked custom js exceptions\n  return includes(RECOGNITION_EXCEPTION_NAMES, error.name);\n}\n\nabstract class RecognitionException\n  extends Error\n  implements IRecognitionException\n{\n  context: IRecognizerContext;\n  resyncedTokens: IToken[] = [];\n\n  protected constructor(\n    message: string,\n    public token: IToken,\n  ) {\n    super(message);\n\n    // fix prototype chain when typescript target is ES5\n    Object.setPrototypeOf(this, new.target.prototype);\n\n    /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n  }\n}\n\nexport class MismatchedTokenException extends RecognitionException {\n  constructor(\n    message: string,\n    token: IToken,\n    public previousToken: IToken,\n  ) {\n    super(message, token);\n    this.name = MISMATCHED_TOKEN_EXCEPTION;\n  }\n}\n\nexport class NoViableAltException extends RecognitionException {\n  constructor(\n    message: string,\n    token: IToken,\n    public previousToken: IToken,\n  ) {\n    super(message, token);\n    this.name = NO_VIABLE_ALT_EXCEPTION;\n  }\n}\n\nexport class NotAllInputParsedException extends RecognitionException {\n  constructor(message: string, token: IToken) {\n    super(message, token);\n    this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;\n  }\n}\n\nexport class EarlyExitException extends RecognitionException {\n  constructor(\n    message: string,\n    token: IToken,\n    public previousToken: IToken,\n  ) {\n    super(message, token);\n    this.name = EARLY_EXIT_EXCEPTION;\n  }\n}\n","import {\n  createTokenInstance,\n  EOF,\n  tokenMatcher,\n} from \"../../../scan/tokens_public.js\";\nimport {\n  AbstractNextTerminalAfterProductionWalker,\n  IFirstAfterRepetition,\n} from \"../../grammar/interpreter.js\";\nimport {\n  clone,\n  dropRight,\n  find,\n  flatten,\n  has,\n  includes,\n  isEmpty,\n  map,\n} from \"lodash-es\";\nimport {\n  IParserConfig,\n  IToken,\n  ITokenGrammarPath,\n  TokenType,\n} from \"@chevrotain/types\";\nimport { MismatchedTokenException } from \"../../exceptions_public.js\";\nimport { IN } from \"../../constants.js\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n\nexport const EOF_FOLLOW_KEY: any = {};\n\nexport interface IFollowKey {\n  ruleName: string;\n  idxInCallingRule: number;\n  inRule: string;\n}\n\nexport const IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\";\n\nexport class InRuleRecoveryException extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = IN_RULE_RECOVERY_EXCEPTION;\n  }\n}\n\n/**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\nexport class Recoverable {\n  recoveryEnabled: boolean;\n  firstAfterRepMap: Record<string, IFirstAfterRepetition>;\n  resyncFollows: Record<string, TokenType[]>;\n\n  initRecoverable(config: IParserConfig) {\n    this.firstAfterRepMap = {};\n    this.resyncFollows = {};\n\n    this.recoveryEnabled = has(config, \"recoveryEnabled\")\n      ? (config.recoveryEnabled as boolean) // assumes end user provides the correct config value/type\n      : DEFAULT_PARSER_CONFIG.recoveryEnabled;\n\n    // performance optimization, NOOP will be inlined which\n    // effectively means that this optional feature does not exist\n    // when not used.\n    if (this.recoveryEnabled) {\n      this.attemptInRepetitionRecovery = attemptInRepetitionRecovery;\n    }\n  }\n\n  public getTokenToInsert(tokType: TokenType): IToken {\n    const tokToInsert = createTokenInstance(\n      tokType,\n      \"\",\n      NaN,\n      NaN,\n      NaN,\n      NaN,\n      NaN,\n      NaN,\n    );\n    tokToInsert.isInsertedInRecovery = true;\n    return tokToInsert;\n  }\n\n  public canTokenTypeBeInsertedInRecovery(tokType: TokenType): boolean {\n    return true;\n  }\n\n  public canTokenTypeBeDeletedInRecovery(tokType: TokenType): boolean {\n    return true;\n  }\n\n  tryInRepetitionRecovery(\n    this: MixedInParser,\n    grammarRule: Function,\n    grammarRuleArgs: any[],\n    lookAheadFunc: () => boolean,\n    expectedTokType: TokenType,\n  ): void {\n    // TODO: can the resyncTokenType be cached?\n    const reSyncTokType = this.findReSyncTokenType();\n    const savedLexerState = this.exportLexerState();\n    const resyncedTokens: IToken[] = [];\n    let passedResyncPoint = false;\n\n    const nextTokenWithoutResync = this.LA(1);\n    let currToken = this.LA(1);\n\n    const generateErrorMessage = () => {\n      const previousToken = this.LA(0);\n      // we are preemptively re-syncing before an error has been detected, therefor we must reproduce\n      // the error that would have been thrown\n      const msg = this.errorMessageProvider.buildMismatchTokenMessage({\n        expected: expectedTokType,\n        actual: nextTokenWithoutResync,\n        previous: previousToken,\n        ruleName: this.getCurrRuleFullName(),\n      });\n      const error = new MismatchedTokenException(\n        msg,\n        nextTokenWithoutResync,\n        this.LA(0),\n      );\n      // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n      error.resyncedTokens = dropRight(resyncedTokens);\n      this.SAVE_ERROR(error);\n    };\n\n    while (!passedResyncPoint) {\n      // re-synced to a point where we can safely exit the repetition/\n      if (this.tokenMatcher(currToken, expectedTokType)) {\n        generateErrorMessage();\n        return; // must return here to avoid reverting the inputIdx\n      } else if (lookAheadFunc.call(this)) {\n        // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n        generateErrorMessage();\n        // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n        grammarRule.apply(this, grammarRuleArgs);\n        return; // must return here to avoid reverting the inputIdx\n      } else if (this.tokenMatcher(currToken, reSyncTokType)) {\n        passedResyncPoint = true;\n      } else {\n        currToken = this.SKIP_TOKEN();\n        this.addToResyncTokens(currToken, resyncedTokens);\n      }\n    }\n\n    // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n    // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n    // \"between rules\" resync recovery later in the flow.\n    this.importLexerState(savedLexerState);\n  }\n\n  shouldInRepetitionRecoveryBeTried(\n    this: MixedInParser,\n    expectTokAfterLastMatch: TokenType,\n    nextTokIdx: number,\n    notStuck: boolean | undefined,\n  ): boolean {\n    // Edge case of arriving from a MANY repetition which is stuck\n    // Attempting recovery in this case could cause an infinite loop\n    if (notStuck === false) {\n      return false;\n    }\n\n    // no need to recover, next token is what we expect...\n    if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n      return false;\n    }\n\n    // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n    // and prefer some backtracking path that includes recovered errors.\n    if (this.isBackTracking()) {\n      return false;\n    }\n\n    // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n    // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n    //noinspection RedundantIfStatementJS\n    if (\n      this.canPerformInRuleRecovery(\n        expectTokAfterLastMatch,\n        this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx),\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  // Error Recovery functionality\n  getFollowsForInRuleRecovery(\n    this: MixedInParser,\n    tokType: TokenType,\n    tokIdxInRule: number,\n  ): TokenType[] {\n    const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);\n    const follows = this.getNextPossibleTokenTypes(grammarPath);\n    return follows;\n  }\n\n  tryInRuleRecovery(\n    this: MixedInParser,\n    expectedTokType: TokenType,\n    follows: TokenType[],\n  ): IToken {\n    if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n      const tokToInsert = this.getTokenToInsert(expectedTokType);\n      return tokToInsert;\n    }\n\n    if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n      const nextTok = this.SKIP_TOKEN();\n      this.consumeToken();\n      return nextTok;\n    }\n\n    throw new InRuleRecoveryException(\"sad sad panda\");\n  }\n\n  canPerformInRuleRecovery(\n    this: MixedInParser,\n    expectedToken: TokenType,\n    follows: TokenType[],\n  ): boolean {\n    return (\n      this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n      this.canRecoverWithSingleTokenDeletion(expectedToken)\n    );\n  }\n\n  canRecoverWithSingleTokenInsertion(\n    this: MixedInParser,\n    expectedTokType: TokenType,\n    follows: TokenType[],\n  ): boolean {\n    if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n      return false;\n    }\n\n    // must know the possible following tokens to perform single token insertion\n    if (isEmpty(follows)) {\n      return false;\n    }\n\n    const mismatchedTok = this.LA(1);\n    const isMisMatchedTokInFollows =\n      find(follows, (possibleFollowsTokType: TokenType) => {\n        return this.tokenMatcher(mismatchedTok, possibleFollowsTokType);\n      }) !== undefined;\n\n    return isMisMatchedTokInFollows;\n  }\n\n  canRecoverWithSingleTokenDeletion(\n    this: MixedInParser,\n    expectedTokType: TokenType,\n  ): boolean {\n    if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {\n      return false;\n    }\n\n    const isNextTokenWhatIsExpected = this.tokenMatcher(\n      this.LA(2),\n      expectedTokType,\n    );\n    return isNextTokenWhatIsExpected;\n  }\n\n  isInCurrentRuleReSyncSet(\n    this: MixedInParser,\n    tokenTypeIdx: TokenType,\n  ): boolean {\n    const followKey = this.getCurrFollowKey();\n    const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);\n    return includes(currentRuleReSyncSet, tokenTypeIdx);\n  }\n\n  findReSyncTokenType(this: MixedInParser): TokenType {\n    const allPossibleReSyncTokTypes = this.flattenFollowSet();\n    // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input\n    let nextToken = this.LA(1);\n    let k = 2;\n    while (true) {\n      const foundMatch = find(allPossibleReSyncTokTypes, (resyncTokType) => {\n        const canMatch = tokenMatcher(nextToken, resyncTokType);\n        return canMatch;\n      });\n      if (foundMatch !== undefined) {\n        return foundMatch;\n      }\n      nextToken = this.LA(k);\n      k++;\n    }\n  }\n\n  getCurrFollowKey(this: MixedInParser): IFollowKey {\n    // the length is at least one as we always add the ruleName to the stack before invoking the rule.\n    if (this.RULE_STACK.length === 1) {\n      return EOF_FOLLOW_KEY;\n    }\n    const currRuleShortName = this.getLastExplicitRuleShortName();\n    const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex();\n    const prevRuleShortName = this.getPreviousExplicitRuleShortName();\n\n    return {\n      ruleName: this.shortRuleNameToFullName(currRuleShortName),\n      idxInCallingRule: currRuleIdx,\n      inRule: this.shortRuleNameToFullName(prevRuleShortName),\n    };\n  }\n\n  buildFullFollowKeyStack(this: MixedInParser): IFollowKey[] {\n    const explicitRuleStack = this.RULE_STACK;\n    const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;\n\n    return map(explicitRuleStack, (ruleName, idx) => {\n      if (idx === 0) {\n        return EOF_FOLLOW_KEY;\n      }\n      return {\n        ruleName: this.shortRuleNameToFullName(ruleName),\n        idxInCallingRule: explicitOccurrenceStack[idx],\n        inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1]),\n      };\n    });\n  }\n\n  flattenFollowSet(this: MixedInParser): TokenType[] {\n    const followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n      return this.getFollowSetFromFollowKey(currKey);\n    });\n    return <any>flatten(followStack);\n  }\n\n  getFollowSetFromFollowKey(\n    this: MixedInParser,\n    followKey: IFollowKey,\n  ): TokenType[] {\n    if (followKey === EOF_FOLLOW_KEY) {\n      return [EOF];\n    }\n\n    const followName =\n      followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule;\n\n    return this.resyncFollows[followName];\n  }\n\n  // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n  // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n  addToResyncTokens(\n    this: MixedInParser,\n    token: IToken,\n    resyncTokens: IToken[],\n  ): IToken[] {\n    if (!this.tokenMatcher(token, EOF)) {\n      resyncTokens.push(token);\n    }\n    return resyncTokens;\n  }\n\n  reSyncTo(this: MixedInParser, tokType: TokenType): IToken[] {\n    const resyncedTokens: IToken[] = [];\n    let nextTok = this.LA(1);\n    while (this.tokenMatcher(nextTok, tokType) === false) {\n      nextTok = this.SKIP_TOKEN();\n      this.addToResyncTokens(nextTok, resyncedTokens);\n    }\n    // the last token is not part of the error.\n    return dropRight(resyncedTokens);\n  }\n\n  attemptInRepetitionRecovery(\n    this: MixedInParser,\n    prodFunc: Function,\n    args: any[],\n    lookaheadFunc: () => boolean,\n    dslMethodIdx: number,\n    prodOccurrence: number,\n    nextToksWalker: typeof AbstractNextTerminalAfterProductionWalker,\n    notStuck?: boolean,\n  ): void {\n    // by default this is a NO-OP\n    // The actual implementation is with the function(not method) below\n  }\n\n  getCurrentGrammarPath(\n    this: MixedInParser,\n    tokType: TokenType,\n    tokIdxInRule: number,\n  ): ITokenGrammarPath {\n    const pathRuleStack: string[] = this.getHumanReadableRuleStack();\n    const pathOccurrenceStack: number[] = clone(this.RULE_OCCURRENCE_STACK);\n    const grammarPath: any = {\n      ruleStack: pathRuleStack,\n      occurrenceStack: pathOccurrenceStack,\n      lastTok: tokType,\n      lastTokOccurrence: tokIdxInRule,\n    };\n\n    return grammarPath;\n  }\n  getHumanReadableRuleStack(this: MixedInParser): string[] {\n    return map(this.RULE_STACK, (currShortName) =>\n      this.shortRuleNameToFullName(currShortName),\n    );\n  }\n}\n\nexport function attemptInRepetitionRecovery(\n  this: MixedInParser,\n  prodFunc: Function,\n  args: any[],\n  lookaheadFunc: () => boolean,\n  dslMethodIdx: number,\n  prodOccurrence: number,\n  nextToksWalker: typeof AbstractNextTerminalAfterProductionWalker,\n  notStuck?: boolean,\n): void {\n  const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence);\n  let firstAfterRepInfo = this.firstAfterRepMap[key];\n  if (firstAfterRepInfo === undefined) {\n    const currRuleName = this.getCurrRuleFullName();\n    const ruleGrammar = this.getGAstProductions()[currRuleName];\n    const walker: AbstractNextTerminalAfterProductionWalker =\n      new nextToksWalker(ruleGrammar, prodOccurrence);\n    firstAfterRepInfo = walker.startWalking();\n    this.firstAfterRepMap[key] = firstAfterRepInfo;\n  }\n\n  let expectTokAfterLastMatch = firstAfterRepInfo.token;\n  let nextTokIdx = firstAfterRepInfo.occurrence;\n  const isEndOfRule = firstAfterRepInfo.isEndOfRule;\n\n  // special edge case of a TOP most repetition after which the input should END.\n  // this will force an attempt for inRule recovery in that scenario.\n  if (\n    this.RULE_STACK.length === 1 &&\n    isEndOfRule &&\n    expectTokAfterLastMatch === undefined\n  ) {\n    expectTokAfterLastMatch = EOF;\n    nextTokIdx = 1;\n  }\n\n  // We don't have anything to re-sync to...\n  // this condition was extracted from `shouldInRepetitionRecoveryBeTried` to act as a type-guard\n  if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n    return;\n  }\n\n  if (\n    this.shouldInRepetitionRecoveryBeTried(\n      expectTokAfterLastMatch,\n      nextTokIdx,\n      notStuck,\n    )\n  ) {\n    // TODO: performance optimization: instead of passing the original args here, we modify\n    // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n    // to avoid searching the cache for it once more.\n    this.tryInRepetitionRecovery(\n      prodFunc,\n      args,\n      lookaheadFunc,\n      expectTokAfterLastMatch,\n    );\n  }\n}\n","// Lookahead keys are 32Bit integers in the form\n// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n// XXXX -> Occurrence Index bitmap.\n// YYYY -> DSL Method Type bitmap.\n// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n// TTTTTTTTT -> alternation alternative index bitmap\n\nexport const BITS_FOR_METHOD_TYPE = 4;\nexport const BITS_FOR_OCCURRENCE_IDX = 8;\nexport const BITS_FOR_RULE_IDX = 12;\n// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.\nexport const BITS_FOR_ALT_IDX = 8;\n\n// short string used as part of mapping keys.\n// being short improves the performance when composing KEYS for maps out of these\n// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\nexport const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX;\nexport const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX;\nexport const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX;\nexport const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX;\nexport const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX;\nexport const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX;\n\n// this actually returns a number, but it is always used as a string (object prop key)\nexport function getKeyForAutomaticLookahead(\n  ruleIdx: number,\n  dslMethodIdx: number,\n  occurrence: number,\n): number {\n  return occurrence | dslMethodIdx | ruleIdx;\n}\n\nconst BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX;\n","import {\n  ILookaheadStrategy,\n  ILookaheadValidationError,\n  IOrAlt,\n  OptionalProductionType,\n  Rule,\n  TokenType,\n} from \"@chevrotain/types\";\nimport { flatMap, isEmpty } from \"lodash-es\";\nimport { defaultGrammarValidatorErrorProvider } from \"../errors_public.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser/parser.js\";\nimport {\n  validateAmbiguousAlternationAlternatives,\n  validateEmptyOrAlternative,\n  validateNoLeftRecursion,\n  validateSomeNonEmptyLookaheadPath,\n} from \"./checks.js\";\nimport {\n  buildAlternativesLookAheadFunc,\n  buildLookaheadFuncForOptionalProd,\n  buildLookaheadFuncForOr,\n  buildSingleAlternativeLookaheadFunction,\n  getProdType,\n} from \"./lookahead.js\";\nimport { IParserDefinitionError } from \"./types.js\";\n\nexport class LLkLookaheadStrategy implements ILookaheadStrategy {\n  readonly maxLookahead: number;\n\n  constructor(options?: { maxLookahead?: number }) {\n    this.maxLookahead =\n      options?.maxLookahead ?? DEFAULT_PARSER_CONFIG.maxLookahead;\n  }\n\n  validate(options: {\n    rules: Rule[];\n    tokenTypes: TokenType[];\n    grammarName: string;\n  }): ILookaheadValidationError[] {\n    const leftRecursionErrors = this.validateNoLeftRecursion(options.rules);\n\n    if (isEmpty(leftRecursionErrors)) {\n      const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules);\n      const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(\n        options.rules,\n        this.maxLookahead,\n      );\n      const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(\n        options.rules,\n        this.maxLookahead,\n      );\n      const allErrors = [\n        ...leftRecursionErrors,\n        ...emptyAltErrors,\n        ...ambiguousAltsErrors,\n        ...emptyRepetitionErrors,\n      ];\n      return allErrors;\n    }\n    return leftRecursionErrors;\n  }\n\n  validateNoLeftRecursion(rules: Rule[]): IParserDefinitionError[] {\n    return flatMap(rules, (currTopRule) =>\n      validateNoLeftRecursion(\n        currTopRule,\n        currTopRule,\n        defaultGrammarValidatorErrorProvider,\n      ),\n    );\n  }\n\n  validateEmptyOrAlternatives(rules: Rule[]): IParserDefinitionError[] {\n    return flatMap(rules, (currTopRule) =>\n      validateEmptyOrAlternative(\n        currTopRule,\n        defaultGrammarValidatorErrorProvider,\n      ),\n    );\n  }\n\n  validateAmbiguousAlternationAlternatives(\n    rules: Rule[],\n    maxLookahead: number,\n  ): IParserDefinitionError[] {\n    return flatMap(rules, (currTopRule) =>\n      validateAmbiguousAlternationAlternatives(\n        currTopRule,\n        maxLookahead,\n        defaultGrammarValidatorErrorProvider,\n      ),\n    );\n  }\n\n  validateSomeNonEmptyLookaheadPath(\n    rules: Rule[],\n    maxLookahead: number,\n  ): IParserDefinitionError[] {\n    return validateSomeNonEmptyLookaheadPath(\n      rules,\n      maxLookahead,\n      defaultGrammarValidatorErrorProvider,\n    );\n  }\n\n  buildLookaheadForAlternation(options: {\n    prodOccurrence: number;\n    rule: Rule;\n    maxLookahead: number;\n    hasPredicates: boolean;\n    dynamicTokensEnabled: boolean;\n  }): (orAlts?: IOrAlt<any>[] | undefined) => number | undefined {\n    return buildLookaheadFuncForOr(\n      options.prodOccurrence,\n      options.rule,\n      options.maxLookahead,\n      options.hasPredicates,\n      options.dynamicTokensEnabled,\n      buildAlternativesLookAheadFunc,\n    );\n  }\n\n  buildLookaheadForOptional(options: {\n    prodOccurrence: number;\n    prodType: OptionalProductionType;\n    rule: Rule;\n    maxLookahead: number;\n    dynamicTokensEnabled: boolean;\n  }): () => boolean {\n    return buildLookaheadFuncForOptionalProd(\n      options.prodOccurrence,\n      options.rule,\n      options.maxLookahead,\n      options.dynamicTokensEnabled,\n      getProdType(options.prodType),\n      buildSingleAlternativeLookaheadFunction,\n    );\n  }\n}\n","import { forEach, has } from \"lodash-es\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\nimport {\n  ILookaheadStrategy,\n  IParserConfig,\n  OptionalProductionType,\n} from \"@chevrotain/types\";\nimport {\n  AT_LEAST_ONE_IDX,\n  AT_LEAST_ONE_SEP_IDX,\n  getKeyForAutomaticLookahead,\n  MANY_IDX,\n  MANY_SEP_IDX,\n  OPTION_IDX,\n  OR_IDX,\n} from \"../../grammar/keys.js\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport {\n  Alternation,\n  GAstVisitor,\n  getProductionDslName,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Rule,\n} from \"@chevrotain/gast\";\nimport { LLkLookaheadStrategy } from \"../../grammar/llk_lookahead.js\";\n\n/**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\nexport class LooksAhead {\n  maxLookahead: number;\n  lookAheadFuncsCache: any;\n  dynamicTokensEnabled: boolean;\n  lookaheadStrategy: ILookaheadStrategy;\n\n  initLooksAhead(config: IParserConfig) {\n    this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\")\n      ? (config.dynamicTokensEnabled as boolean) // assumes end user provides the correct config value/type\n      : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;\n\n    this.maxLookahead = has(config, \"maxLookahead\")\n      ? (config.maxLookahead as number) // assumes end user provides the correct config value/type\n      : DEFAULT_PARSER_CONFIG.maxLookahead;\n\n    this.lookaheadStrategy = has(config, \"lookaheadStrategy\")\n      ? (config.lookaheadStrategy as ILookaheadStrategy) // assumes end user provides the correct config value/type\n      : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead });\n\n    this.lookAheadFuncsCache = new Map();\n  }\n\n  preComputeLookaheadFunctions(this: MixedInParser, rules: Rule[]): void {\n    forEach(rules, (currRule) => {\n      this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n        const {\n          alternation,\n          repetition,\n          option,\n          repetitionMandatory,\n          repetitionMandatoryWithSeparator,\n          repetitionWithSeparator,\n        } = collectMethods(currRule);\n\n        forEach(alternation, (currProd) => {\n          const prodIdx = currProd.idx === 0 ? \"\" : currProd.idx;\n          this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {\n            const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({\n              prodOccurrence: currProd.idx,\n              rule: currRule,\n              maxLookahead: currProd.maxLookahead || this.maxLookahead,\n              hasPredicates: currProd.hasPredicates,\n              dynamicTokensEnabled: this.dynamicTokensEnabled,\n            });\n\n            const key = getKeyForAutomaticLookahead(\n              this.fullRuleNameToShort[currRule.name],\n              OR_IDX,\n              currProd.idx,\n            );\n            this.setLaFuncCache(key, laFunc);\n          });\n        });\n\n        forEach(repetition, (currProd) => {\n          this.computeLookaheadFunc(\n            currRule,\n            currProd.idx,\n            MANY_IDX,\n            \"Repetition\",\n            currProd.maxLookahead,\n            getProductionDslName(currProd),\n          );\n        });\n\n        forEach(option, (currProd) => {\n          this.computeLookaheadFunc(\n            currRule,\n            currProd.idx,\n            OPTION_IDX,\n            \"Option\",\n            currProd.maxLookahead,\n            getProductionDslName(currProd),\n          );\n        });\n\n        forEach(repetitionMandatory, (currProd) => {\n          this.computeLookaheadFunc(\n            currRule,\n            currProd.idx,\n            AT_LEAST_ONE_IDX,\n            \"RepetitionMandatory\",\n            currProd.maxLookahead,\n            getProductionDslName(currProd),\n          );\n        });\n\n        forEach(repetitionMandatoryWithSeparator, (currProd) => {\n          this.computeLookaheadFunc(\n            currRule,\n            currProd.idx,\n            AT_LEAST_ONE_SEP_IDX,\n            \"RepetitionMandatoryWithSeparator\",\n            currProd.maxLookahead,\n            getProductionDslName(currProd),\n          );\n        });\n\n        forEach(repetitionWithSeparator, (currProd) => {\n          this.computeLookaheadFunc(\n            currRule,\n            currProd.idx,\n            MANY_SEP_IDX,\n            \"RepetitionWithSeparator\",\n            currProd.maxLookahead,\n            getProductionDslName(currProd),\n          );\n        });\n      });\n    });\n  }\n\n  computeLookaheadFunc(\n    this: MixedInParser,\n    rule: Rule,\n    prodOccurrence: number,\n    prodKey: number,\n    prodType: OptionalProductionType,\n    prodMaxLookahead: number | undefined,\n    dslMethodName: string,\n  ): void {\n    this.TRACE_INIT(\n      `${dslMethodName}${prodOccurrence === 0 ? \"\" : prodOccurrence}`,\n      () => {\n        const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({\n          prodOccurrence,\n          rule,\n          maxLookahead: prodMaxLookahead || this.maxLookahead,\n          dynamicTokensEnabled: this.dynamicTokensEnabled,\n          prodType,\n        });\n        const key = getKeyForAutomaticLookahead(\n          this.fullRuleNameToShort[rule.name],\n          prodKey,\n          prodOccurrence,\n        );\n        this.setLaFuncCache(key, laFunc);\n      },\n    );\n  }\n\n  // this actually returns a number, but it is always used as a string (object prop key)\n  getKeyForAutomaticLookahead(\n    this: MixedInParser,\n    dslMethodIdx: number,\n    occurrence: number,\n  ): number {\n    const currRuleShortName: any = this.getLastExplicitRuleShortName();\n    return getKeyForAutomaticLookahead(\n      currRuleShortName,\n      dslMethodIdx,\n      occurrence,\n    );\n  }\n\n  getLaFuncFromCache(this: MixedInParser, key: number): Function {\n    return this.lookAheadFuncsCache.get(key);\n  }\n\n  /* istanbul ignore next */\n  setLaFuncCache(this: MixedInParser, key: number, value: Function): void {\n    this.lookAheadFuncsCache.set(key, value);\n  }\n}\n\nclass DslMethodsCollectorVisitor extends GAstVisitor {\n  public dslMethods: {\n    option: Option[];\n    alternation: Alternation[];\n    repetition: Repetition[];\n    repetitionWithSeparator: RepetitionWithSeparator[];\n    repetitionMandatory: RepetitionMandatory[];\n    repetitionMandatoryWithSeparator: RepetitionMandatoryWithSeparator[];\n  } = {\n    option: [],\n    alternation: [],\n    repetition: [],\n    repetitionWithSeparator: [],\n    repetitionMandatory: [],\n    repetitionMandatoryWithSeparator: [],\n  };\n\n  reset() {\n    this.dslMethods = {\n      option: [],\n      alternation: [],\n      repetition: [],\n      repetitionWithSeparator: [],\n      repetitionMandatory: [],\n      repetitionMandatoryWithSeparator: [],\n    };\n  }\n\n  public visitOption(option: Option): void {\n    this.dslMethods.option.push(option);\n  }\n\n  public visitRepetitionWithSeparator(manySep: RepetitionWithSeparator): void {\n    this.dslMethods.repetitionWithSeparator.push(manySep);\n  }\n\n  public visitRepetitionMandatory(atLeastOne: RepetitionMandatory): void {\n    this.dslMethods.repetitionMandatory.push(atLeastOne);\n  }\n\n  public visitRepetitionMandatoryWithSeparator(\n    atLeastOneSep: RepetitionMandatoryWithSeparator,\n  ): void {\n    this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);\n  }\n\n  public visitRepetition(many: Repetition): void {\n    this.dslMethods.repetition.push(many);\n  }\n\n  public visitAlternation(or: Alternation): void {\n    this.dslMethods.alternation.push(or);\n  }\n}\n\nconst collectorVisitor = new DslMethodsCollectorVisitor();\nexport function collectMethods(rule: Rule): {\n  option: Option[];\n  alternation: Alternation[];\n  repetition: Repetition[];\n  repetitionWithSeparator: RepetitionWithSeparator[];\n  repetitionMandatory: RepetitionMandatory[];\n  repetitionMandatoryWithSeparator: RepetitionMandatoryWithSeparator[];\n} {\n  collectorVisitor.reset();\n  rule.accept(collectorVisitor);\n  const dslMethods = collectorVisitor.dslMethods;\n  // avoid uncleaned references\n  collectorVisitor.reset();\n  return <any>dslMethods;\n}\n","import { CstNode, CstNodeLocation, IToken } from \"@chevrotain/types\";\n\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationOnlyOffset(\n  currNodeLocation: CstNodeLocation,\n  newLocationInfo: Required<Pick<IToken, \"startOffset\" | \"endOffset\">>,\n): void {\n  // First (valid) update for this cst node\n  if (isNaN(currNodeLocation.startOffset) === true) {\n    // assumption1: Token location information is either NaN or a valid number\n    // assumption2: Token location information is fully valid if it exist\n    // (both start/end offsets exist and are numbers).\n    currNodeLocation.startOffset = newLocationInfo.startOffset;\n    currNodeLocation.endOffset = newLocationInfo.endOffset;\n  }\n  // Once the startOffset has been updated with a valid number it should never receive\n  // any farther updates as the Token vector is sorted.\n  // We still have to check this this condition for every new possible location info\n  // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n  else if (currNodeLocation.endOffset! < newLocationInfo.endOffset === true) {\n    currNodeLocation.endOffset = newLocationInfo.endOffset;\n  }\n}\n\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationFull(\n  currNodeLocation: CstNodeLocation,\n  newLocationInfo: CstNodeLocation,\n): void {\n  // First (valid) update for this cst node\n  if (isNaN(currNodeLocation.startOffset) === true) {\n    // assumption1: Token location information is either NaN or a valid number\n    // assumption2: Token location information is fully valid if it exist\n    // (all start/end props exist and are numbers).\n    currNodeLocation.startOffset = newLocationInfo.startOffset;\n    currNodeLocation.startColumn = newLocationInfo.startColumn;\n    currNodeLocation.startLine = newLocationInfo.startLine;\n    currNodeLocation.endOffset = newLocationInfo.endOffset;\n    currNodeLocation.endColumn = newLocationInfo.endColumn;\n    currNodeLocation.endLine = newLocationInfo.endLine;\n  }\n  // Once the start props has been updated with a valid number it should never receive\n  // any farther updates as the Token vector is sorted.\n  // We still have to check this this condition for every new possible location info\n  // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n  else if (currNodeLocation.endOffset! < newLocationInfo.endOffset! === true) {\n    currNodeLocation.endOffset = newLocationInfo.endOffset;\n    currNodeLocation.endColumn = newLocationInfo.endColumn;\n    currNodeLocation.endLine = newLocationInfo.endLine;\n  }\n}\n\nexport function addTerminalToCst(\n  node: CstNode,\n  token: IToken,\n  tokenTypeName: string,\n): void {\n  if (node.children[tokenTypeName] === undefined) {\n    node.children[tokenTypeName] = [token];\n  } else {\n    node.children[tokenTypeName].push(token);\n  }\n}\n\nexport function addNoneTerminalToCst(\n  node: CstNode,\n  ruleName: string,\n  ruleResult: any,\n): void {\n  if (node.children[ruleName] === undefined) {\n    node.children[ruleName] = [ruleResult];\n  } else {\n    node.children[ruleName].push(ruleResult);\n  }\n}\n","const NAME = \"name\";\n\nexport function defineNameProp(obj: {}, nameValue: string): void {\n  Object.defineProperty(obj, NAME, {\n    enumerable: false,\n    configurable: true,\n    writable: false,\n    value: nameValue,\n  });\n}\n","import {\n  compact,\n  filter,\n  forEach,\n  isArray,\n  isEmpty,\n  isFunction,\n  isUndefined,\n  keys,\n  map,\n} from \"lodash-es\";\nimport { defineNameProp } from \"../../lang/lang_extensions.js\";\nimport { CstNode, ICstVisitor } from \"@chevrotain/types\";\n\nexport function defaultVisit<IN>(ctx: any, param: IN): void {\n  const childrenNames = keys(ctx);\n  const childrenNamesLength = childrenNames.length;\n  for (let i = 0; i < childrenNamesLength; i++) {\n    const currChildName = childrenNames[i];\n    const currChildArray = ctx[currChildName];\n    const currChildArrayLength = currChildArray.length;\n    for (let j = 0; j < currChildArrayLength; j++) {\n      const currChild: any = currChildArray[j];\n      // distinction between Tokens Children and CstNode children\n      if (currChild.tokenTypeIdx === undefined) {\n        this[currChild.name](currChild.children, param);\n      }\n    }\n  }\n  // defaultVisit does not support generic out param\n}\n\nexport function createBaseSemanticVisitorConstructor(\n  grammarName: string,\n  ruleNames: string[],\n): {\n  new (...args: any[]): ICstVisitor<any, any>;\n} {\n  const derivedConstructor: any = function () {};\n\n  // can be overwritten according to:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n  // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n  defineNameProp(derivedConstructor, grammarName + \"BaseSemantics\");\n\n  const semanticProto = {\n    visit: function (cstNode: CstNode | CstNode[], param: any) {\n      // enables writing more concise visitor methods when CstNode has only a single child\n      if (isArray(cstNode)) {\n        // A CST Node's children dictionary can never have empty arrays as values\n        // If a key is defined there will be at least one element in the corresponding value array.\n        cstNode = cstNode[0];\n      }\n\n      // enables passing optional CstNodes concisely.\n      if (isUndefined(cstNode)) {\n        return undefined;\n      }\n\n      return this[cstNode.name](cstNode.children, param);\n    },\n\n    validateVisitor: function () {\n      const semanticDefinitionErrors = validateVisitor(this, ruleNames);\n      if (!isEmpty(semanticDefinitionErrors)) {\n        const errorMessages = map(\n          semanticDefinitionErrors,\n          (currDefError) => currDefError.msg,\n        );\n        throw Error(\n          `Errors Detected in CST Visitor <${this.constructor.name}>:\\n\\t` +\n            `${errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\\t\")}`,\n        );\n      }\n    },\n  };\n\n  derivedConstructor.prototype = semanticProto;\n  derivedConstructor.prototype.constructor = derivedConstructor;\n\n  derivedConstructor._RULE_NAMES = ruleNames;\n\n  return derivedConstructor;\n}\n\nexport function createBaseVisitorConstructorWithDefaults(\n  grammarName: string,\n  ruleNames: string[],\n  baseConstructor: Function,\n): {\n  new (...args: any[]): ICstVisitor<any, any>;\n} {\n  const derivedConstructor: any = function () {};\n\n  // can be overwritten according to:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n  // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n  defineNameProp(derivedConstructor, grammarName + \"BaseSemanticsWithDefaults\");\n\n  const withDefaultsProto = Object.create(baseConstructor.prototype);\n  forEach(ruleNames, (ruleName) => {\n    withDefaultsProto[ruleName] = defaultVisit;\n  });\n\n  derivedConstructor.prototype = withDefaultsProto;\n  derivedConstructor.prototype.constructor = derivedConstructor;\n\n  return derivedConstructor;\n}\n\nexport enum CstVisitorDefinitionError {\n  REDUNDANT_METHOD,\n  MISSING_METHOD,\n}\n\nexport interface IVisitorDefinitionError {\n  msg: string;\n  type: CstVisitorDefinitionError;\n  methodName: string;\n}\n\nexport function validateVisitor(\n  visitorInstance: ICstVisitor<unknown, unknown>,\n  ruleNames: string[],\n): IVisitorDefinitionError[] {\n  const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);\n\n  return missingErrors;\n}\n\nexport function validateMissingCstMethods(\n  visitorInstance: ICstVisitor<unknown, unknown>,\n  ruleNames: string[],\n): IVisitorDefinitionError[] {\n  const missingRuleNames = filter(ruleNames, (currRuleName) => {\n    return isFunction((visitorInstance as any)[currRuleName]) === false;\n  });\n\n  const errors: IVisitorDefinitionError[] = map(\n    missingRuleNames,\n    (currRuleName) => {\n      return {\n        msg: `Missing visitor method: <${currRuleName}> on ${<any>(\n          visitorInstance.constructor.name\n        )} CST Visitor.`,\n        type: CstVisitorDefinitionError.MISSING_METHOD,\n        methodName: currRuleName,\n      };\n    },\n  );\n\n  return compact<IVisitorDefinitionError>(errors);\n}\n","import {\n  addNoneTerminalToCst,\n  addTerminalToCst,\n  setNodeLocationFull,\n  setNodeLocationOnlyOffset,\n} from \"../../cst/cst.js\";\nimport { has, isUndefined, keys, noop } from \"lodash-es\";\nimport {\n  createBaseSemanticVisitorConstructor,\n  createBaseVisitorConstructorWithDefaults,\n} from \"../../cst/cst_visitor.js\";\nimport {\n  CstNode,\n  CstNodeLocation,\n  ICstVisitor,\n  IParserConfig,\n  IToken,\n  nodeLocationTrackingOptions,\n} from \"@chevrotain/types\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n\n/**\n * This trait is responsible for the CST building logic.\n */\nexport class TreeBuilder {\n  outputCst: boolean;\n  CST_STACK: CstNode[];\n  baseCstVisitorConstructor: Function;\n  baseCstVisitorWithDefaultsConstructor: Function;\n\n  // dynamically assigned Methods\n  setNodeLocationFromNode: (\n    nodeLocation: CstNodeLocation,\n    locationInformation: CstNodeLocation,\n  ) => void;\n  setNodeLocationFromToken: (\n    nodeLocation: CstNodeLocation,\n    locationInformation: CstNodeLocation,\n  ) => void;\n  cstPostRule: (this: MixedInParser, ruleCstNode: CstNode) => void;\n\n  setInitialNodeLocation: (cstNode: CstNode) => void;\n  nodeLocationTracking: nodeLocationTrackingOptions;\n\n  initTreeBuilder(this: MixedInParser, config: IParserConfig) {\n    this.CST_STACK = [];\n\n    // outputCst is no longer exposed/defined in the pubic API\n    this.outputCst = (config as any).outputCst;\n\n    this.nodeLocationTracking = has(config, \"nodeLocationTracking\")\n      ? (config.nodeLocationTracking as nodeLocationTrackingOptions) // assumes end user provides the correct config value/type\n      : DEFAULT_PARSER_CONFIG.nodeLocationTracking;\n\n    if (!this.outputCst) {\n      this.cstInvocationStateUpdate = noop;\n      this.cstFinallyStateUpdate = noop;\n      this.cstPostTerminal = noop;\n      this.cstPostNonTerminal = noop;\n      this.cstPostRule = noop;\n    } else {\n      if (/full/i.test(this.nodeLocationTracking)) {\n        if (this.recoveryEnabled) {\n          this.setNodeLocationFromToken = setNodeLocationFull;\n          this.setNodeLocationFromNode = setNodeLocationFull;\n          this.cstPostRule = noop;\n          this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery;\n        } else {\n          this.setNodeLocationFromToken = noop;\n          this.setNodeLocationFromNode = noop;\n          this.cstPostRule = this.cstPostRuleFull;\n          this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;\n        }\n      } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n        if (this.recoveryEnabled) {\n          this.setNodeLocationFromToken = <any>setNodeLocationOnlyOffset;\n          this.setNodeLocationFromNode = <any>setNodeLocationOnlyOffset;\n          this.cstPostRule = noop;\n          this.setInitialNodeLocation =\n            this.setInitialNodeLocationOnlyOffsetRecovery;\n        } else {\n          this.setNodeLocationFromToken = noop;\n          this.setNodeLocationFromNode = noop;\n          this.cstPostRule = this.cstPostRuleOnlyOffset;\n          this.setInitialNodeLocation =\n            this.setInitialNodeLocationOnlyOffsetRegular;\n        }\n      } else if (/none/i.test(this.nodeLocationTracking)) {\n        this.setNodeLocationFromToken = noop;\n        this.setNodeLocationFromNode = noop;\n        this.cstPostRule = noop;\n        this.setInitialNodeLocation = noop;\n      } else {\n        throw Error(\n          `Invalid <nodeLocationTracking> config option: \"${config.nodeLocationTracking}\"`,\n        );\n      }\n    }\n  }\n\n  setInitialNodeLocationOnlyOffsetRecovery(\n    this: MixedInParser,\n    cstNode: any,\n  ): void {\n    cstNode.location = {\n      startOffset: NaN,\n      endOffset: NaN,\n    };\n  }\n\n  setInitialNodeLocationOnlyOffsetRegular(\n    this: MixedInParser,\n    cstNode: any,\n  ): void {\n    cstNode.location = {\n      // without error recovery the starting Location of a new CstNode is guaranteed\n      // To be the next Token's startOffset (for valid inputs).\n      // For invalid inputs there won't be any CSTOutput so this potential\n      // inaccuracy does not matter\n      startOffset: this.LA(1).startOffset,\n      endOffset: NaN,\n    };\n  }\n\n  setInitialNodeLocationFullRecovery(this: MixedInParser, cstNode: any): void {\n    cstNode.location = {\n      startOffset: NaN,\n      startLine: NaN,\n      startColumn: NaN,\n      endOffset: NaN,\n      endLine: NaN,\n      endColumn: NaN,\n    };\n  }\n\n  /**\n     *  @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n\n     * @param cstNode\n     */\n  setInitialNodeLocationFullRegular(this: MixedInParser, cstNode: any): void {\n    const nextToken = this.LA(1);\n    cstNode.location = {\n      startOffset: nextToken.startOffset,\n      startLine: nextToken.startLine,\n      startColumn: nextToken.startColumn,\n      endOffset: NaN,\n      endLine: NaN,\n      endColumn: NaN,\n    };\n  }\n\n  cstInvocationStateUpdate(this: MixedInParser, fullRuleName: string): void {\n    const cstNode: CstNode = {\n      name: fullRuleName,\n      children: Object.create(null),\n    };\n\n    this.setInitialNodeLocation(cstNode);\n    this.CST_STACK.push(cstNode);\n  }\n\n  cstFinallyStateUpdate(this: MixedInParser): void {\n    this.CST_STACK.pop();\n  }\n\n  cstPostRuleFull(this: MixedInParser, ruleCstNode: CstNode): void {\n    // casts to `required<CstNodeLocation>` are safe because `cstPostRuleFull` should only be invoked when full location is enabled\n    const prevToken = this.LA(0) as Required<CstNodeLocation>;\n    const loc = ruleCstNode.location as Required<CstNodeLocation>;\n\n    // If this condition is true it means we consumed at least one Token\n    // In this CstNode.\n    if (loc.startOffset <= prevToken.startOffset === true) {\n      loc.endOffset = prevToken.endOffset;\n      loc.endLine = prevToken.endLine;\n      loc.endColumn = prevToken.endColumn;\n    }\n    // \"empty\" CstNode edge case\n    else {\n      loc.startOffset = NaN;\n      loc.startLine = NaN;\n      loc.startColumn = NaN;\n    }\n  }\n\n  cstPostRuleOnlyOffset(this: MixedInParser, ruleCstNode: CstNode): void {\n    const prevToken = this.LA(0);\n    // `location' is not null because `cstPostRuleOnlyOffset` will only be invoked when location tracking is enabled.\n    const loc = ruleCstNode.location!;\n\n    // If this condition is true it means we consumed at least one Token\n    // In this CstNode.\n    if (loc.startOffset <= prevToken.startOffset === true) {\n      loc.endOffset = prevToken.endOffset;\n    }\n    // \"empty\" CstNode edge case\n    else {\n      loc.startOffset = NaN;\n    }\n  }\n\n  cstPostTerminal(\n    this: MixedInParser,\n    key: string,\n    consumedToken: IToken,\n  ): void {\n    const rootCst = this.CST_STACK[this.CST_STACK.length - 1];\n    addTerminalToCst(rootCst, consumedToken, key);\n    // This is only used when **both** error recovery and CST Output are enabled.\n    this.setNodeLocationFromToken(rootCst.location!, <any>consumedToken);\n  }\n\n  cstPostNonTerminal(\n    this: MixedInParser,\n    ruleCstResult: CstNode,\n    ruleName: string,\n  ): void {\n    const preCstNode = this.CST_STACK[this.CST_STACK.length - 1];\n    addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult);\n    // This is only used when **both** error recovery and CST Output are enabled.\n    this.setNodeLocationFromNode(preCstNode.location!, ruleCstResult.location!);\n  }\n\n  getBaseCstVisitorConstructor<IN = any, OUT = any>(\n    this: MixedInParser,\n  ): {\n    new (...args: any[]): ICstVisitor<IN, OUT>;\n  } {\n    if (isUndefined(this.baseCstVisitorConstructor)) {\n      const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(\n        this.className,\n        keys(this.gastProductionsCache),\n      );\n      this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;\n      return newBaseCstVisitorConstructor;\n    }\n\n    return <any>this.baseCstVisitorConstructor;\n  }\n\n  getBaseCstVisitorConstructorWithDefaults<IN = any, OUT = any>(\n    this: MixedInParser,\n  ): {\n    new (...args: any[]): ICstVisitor<IN, OUT>;\n  } {\n    if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n      const newConstructor = createBaseVisitorConstructorWithDefaults(\n        this.className,\n        keys(this.gastProductionsCache),\n        this.getBaseCstVisitorConstructor(),\n      );\n      this.baseCstVisitorWithDefaultsConstructor = newConstructor;\n      return newConstructor;\n    }\n\n    return <any>this.baseCstVisitorWithDefaultsConstructor;\n  }\n\n  getLastExplicitRuleShortName(this: MixedInParser): number {\n    const ruleStack = this.RULE_STACK;\n    return ruleStack[ruleStack.length - 1];\n  }\n\n  getPreviousExplicitRuleShortName(this: MixedInParser): number {\n    const ruleStack = this.RULE_STACK;\n    return ruleStack[ruleStack.length - 2];\n  }\n\n  getLastExplicitRuleOccurrenceIndex(this: MixedInParser): number {\n    const occurrenceStack = this.RULE_OCCURRENCE_STACK;\n    return occurrenceStack[occurrenceStack.length - 1];\n  }\n}\n","import { END_OF_FILE } from \"../parser.js\";\nimport { IToken } from \"@chevrotain/types\";\nimport { MixedInParser } from \"./parser_traits.js\";\n\n/**\n * Trait responsible abstracting over the interaction with Lexer output (Token vector).\n *\n * This could be generalized to support other kinds of lexers, e.g.\n * - Just in Time Lexing / Lexer-Less parsing.\n * - Streaming Lexer.\n */\nexport class LexerAdapter {\n  tokVector: IToken[];\n  tokVectorLength: number;\n  currIdx: number;\n\n  initLexerAdapter() {\n    this.tokVector = [];\n    this.tokVectorLength = 0;\n    this.currIdx = -1;\n  }\n\n  set input(newInput: IToken[]) {\n    // @ts-ignore - `this parameter` not supported in setters/getters\n    //   - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n    if (this.selfAnalysisDone !== true) {\n      throw Error(\n        `Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`,\n      );\n    }\n    // @ts-ignore - `this parameter` not supported in setters/getters\n    //   - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n    this.reset();\n    this.tokVector = newInput;\n    this.tokVectorLength = newInput.length;\n  }\n\n  get input(): IToken[] {\n    return this.tokVector;\n  }\n\n  // skips a token and returns the next token\n  SKIP_TOKEN(this: MixedInParser): IToken {\n    if (this.currIdx <= this.tokVector.length - 2) {\n      this.consumeToken();\n      return this.LA(1);\n    } else {\n      return END_OF_FILE;\n    }\n  }\n\n  // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n  // or lexers dependent on parser context.\n  LA(this: MixedInParser, howMuch: number): IToken {\n    const soughtIdx = this.currIdx + howMuch;\n    if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n      return END_OF_FILE;\n    } else {\n      return this.tokVector[soughtIdx];\n    }\n  }\n\n  consumeToken(this: MixedInParser) {\n    this.currIdx++;\n  }\n\n  exportLexerState(this: MixedInParser): number {\n    return this.currIdx;\n  }\n\n  importLexerState(this: MixedInParser, newState: number) {\n    this.currIdx = newState;\n  }\n\n  resetLexerState(this: MixedInParser): void {\n    this.currIdx = -1;\n  }\n\n  moveToTerminatedState(this: MixedInParser): void {\n    this.currIdx = this.tokVector.length - 1;\n  }\n\n  getLexerPosition(this: MixedInParser): number {\n    return this.exportLexerState();\n  }\n}\n","import {\n  AtLeastOneSepMethodOpts,\n  ConsumeMethodOpts,\n  DSLMethodOpts,\n  DSLMethodOptsWithErr,\n  GrammarAction,\n  IOrAlt,\n  IRuleConfig,\n  ISerializedGast,\n  IToken,\n  ManySepMethodOpts,\n  OrMethodOpts,\n  SubruleMethodOpts,\n  TokenType,\n} from \"@chevrotain/types\";\nimport { 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 { MixedInParser } from \"./parser_traits.js\";\nimport { Rule, serializeGrammar } from \"@chevrotain/gast\";\nimport { IParserDefinitionError } from \"../../grammar/types.js\";\nimport { ParserMethodInternal } from \"../types.js\";\n\n/**\n * This trait is responsible for implementing the public API\n * for defining Chevrotain parsers, i.e:\n * - CONSUME\n * - RULE\n * - OPTION\n * - ...\n */\nexport class RecognizerApi {\n  ACTION<T>(this: MixedInParser, impl: () => T): T {\n    return impl.call(this);\n  }\n\n  consume(\n    this: MixedInParser,\n    idx: number,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, idx, options);\n  }\n\n  subrule<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    idx: number,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, idx, options);\n  }\n\n  option<OUT>(\n    this: MixedInParser,\n    idx: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, idx);\n  }\n\n  or(\n    this: MixedInParser,\n    idx: number,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<any>,\n  ): any {\n    return this.orInternal(altsOrOpts, idx);\n  }\n\n  many(\n    this: MixedInParser,\n    idx: number,\n    actionORMethodDef: GrammarAction<any> | DSLMethodOpts<any>,\n  ): void {\n    return this.manyInternal(idx, actionORMethodDef);\n  }\n\n  atLeastOne(\n    this: MixedInParser,\n    idx: number,\n    actionORMethodDef: GrammarAction<any> | DSLMethodOptsWithErr<any>,\n  ): void {\n    return this.atLeastOneInternal(idx, actionORMethodDef);\n  }\n\n  CONSUME(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 0, options);\n  }\n\n  CONSUME1(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 1, options);\n  }\n\n  CONSUME2(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 2, options);\n  }\n\n  CONSUME3(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 3, options);\n  }\n\n  CONSUME4(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 4, options);\n  }\n\n  CONSUME5(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 5, options);\n  }\n\n  CONSUME6(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 6, options);\n  }\n\n  CONSUME7(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 7, options);\n  }\n\n  CONSUME8(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 8, options);\n  }\n\n  CONSUME9(\n    this: MixedInParser,\n    tokType: TokenType,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    return this.consumeInternal(tokType, 9, options);\n  }\n\n  SUBRULE<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 0, options);\n  }\n\n  SUBRULE1<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 1, options);\n  }\n\n  SUBRULE2<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 2, options);\n  }\n\n  SUBRULE3<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 3, options);\n  }\n\n  SUBRULE4<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 4, options);\n  }\n\n  SUBRULE5<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 5, options);\n  }\n\n  SUBRULE6<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 6, options);\n  }\n\n  SUBRULE7<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 7, options);\n  }\n\n  SUBRULE8<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 8, options);\n  }\n\n  SUBRULE9<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    return this.subruleInternal(ruleToCall, 9, options);\n  }\n\n  OPTION<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 0);\n  }\n\n  OPTION1<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 1);\n  }\n\n  OPTION2<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 2);\n  }\n\n  OPTION3<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 3);\n  }\n\n  OPTION4<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 4);\n  }\n\n  OPTION5<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 5);\n  }\n\n  OPTION6<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 6);\n  }\n\n  OPTION7<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 7);\n  }\n\n  OPTION8<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 8);\n  }\n\n  OPTION9<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): OUT | undefined {\n    return this.optionInternal(actionORMethodDef, 9);\n  }\n\n  OR<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 0);\n  }\n\n  OR1<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 1);\n  }\n\n  OR2<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 2);\n  }\n\n  OR3<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 3);\n  }\n\n  OR4<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 4);\n  }\n\n  OR5<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 5);\n  }\n\n  OR6<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 6);\n  }\n\n  OR7<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 7);\n  }\n\n  OR8<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 8);\n  }\n\n  OR9<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n  ): T {\n    return this.orInternal(altsOrOpts, 9);\n  }\n\n  MANY<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(0, actionORMethodDef);\n  }\n\n  MANY1<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(1, actionORMethodDef);\n  }\n\n  MANY2<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(2, actionORMethodDef);\n  }\n\n  MANY3<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(3, actionORMethodDef);\n  }\n\n  MANY4<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(4, actionORMethodDef);\n  }\n\n  MANY5<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(5, actionORMethodDef);\n  }\n\n  MANY6<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(6, actionORMethodDef);\n  }\n\n  MANY7<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(7, actionORMethodDef);\n  }\n\n  MANY8<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(8, actionORMethodDef);\n  }\n\n  MANY9<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    this.manyInternal(9, actionORMethodDef);\n  }\n\n  MANY_SEP<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(0, options);\n  }\n\n  MANY_SEP1<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(1, options);\n  }\n\n  MANY_SEP2<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(2, options);\n  }\n\n  MANY_SEP3<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(3, options);\n  }\n\n  MANY_SEP4<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(4, options);\n  }\n\n  MANY_SEP5<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(5, options);\n  }\n\n  MANY_SEP6<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(6, options);\n  }\n\n  MANY_SEP7<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(7, options);\n  }\n\n  MANY_SEP8<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(8, options);\n  }\n\n  MANY_SEP9<OUT>(this: MixedInParser, options: ManySepMethodOpts<OUT>): void {\n    this.manySepFirstInternal(9, options);\n  }\n\n  AT_LEAST_ONE<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(0, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE1<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    return this.atLeastOneInternal(1, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE2<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(2, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE3<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(3, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE4<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(4, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE5<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(5, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE6<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(6, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE7<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(7, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE8<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(8, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE9<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    this.atLeastOneInternal(9, actionORMethodDef);\n  }\n\n  AT_LEAST_ONE_SEP<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(0, options);\n  }\n\n  AT_LEAST_ONE_SEP1<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(1, options);\n  }\n\n  AT_LEAST_ONE_SEP2<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(2, options);\n  }\n\n  AT_LEAST_ONE_SEP3<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(3, options);\n  }\n\n  AT_LEAST_ONE_SEP4<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(4, options);\n  }\n\n  AT_LEAST_ONE_SEP5<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(5, options);\n  }\n\n  AT_LEAST_ONE_SEP6<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(6, options);\n  }\n\n  AT_LEAST_ONE_SEP7<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(7, options);\n  }\n\n  AT_LEAST_ONE_SEP8<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(8, options);\n  }\n\n  AT_LEAST_ONE_SEP9<OUT>(\n    this: MixedInParser,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    this.atLeastOneSepFirstInternal(9, options);\n  }\n\n  RULE<T>(\n    this: MixedInParser,\n    name: string,\n    implementation: (...implArgs: any[]) => T,\n    config: IRuleConfig<T> = DEFAULT_RULE_CONFIG,\n  ): (idxInCallingRule?: number, ...args: any[]) => T | any {\n    if (includes(this.definedRulesNames, name)) {\n      const errMsg =\n        defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n          topLevelRule: name,\n          grammarName: this.className,\n        });\n\n      const error = {\n        message: errMsg,\n        type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n        ruleName: name,\n      };\n      this.definitionErrors.push(error);\n    }\n\n    this.definedRulesNames.push(name);\n\n    const ruleImplementation = this.defineRule(name, implementation, config);\n    (this as any)[name] = ruleImplementation;\n    return ruleImplementation;\n  }\n\n  OVERRIDE_RULE<T>(\n    this: MixedInParser,\n    name: string,\n    impl: (...implArgs: any[]) => T,\n    config: IRuleConfig<T> = DEFAULT_RULE_CONFIG,\n  ): (idxInCallingRule?: number, ...args: any[]) => T {\n    const ruleErrors: IParserDefinitionError[] = validateRuleIsOverridden(\n      name,\n      this.definedRulesNames,\n      this.className,\n    );\n    this.definitionErrors = this.definitionErrors.concat(ruleErrors);\n\n    const ruleImplementation = this.defineRule(name, impl, config);\n    (this as any)[name] = ruleImplementation;\n    return ruleImplementation;\n  }\n\n  BACKTRACK<T>(\n    this: MixedInParser,\n    grammarRule: (...args: any[]) => T,\n    args?: any[],\n  ): () => boolean {\n    return function () {\n      // save org state\n      this.isBackTrackingStack.push(1);\n      const orgState = this.saveRecogState();\n      try {\n        grammarRule.apply(this, args);\n        // if no exception was thrown we have succeed parsing the rule.\n        return true;\n      } catch (e) {\n        if (isRecognitionException(e)) {\n          return false;\n        } else {\n          throw e;\n        }\n      } finally {\n        this.reloadRecogState(orgState);\n        this.isBackTrackingStack.pop();\n      }\n    };\n  }\n\n  // GAST export APIs\n  public getGAstProductions(this: MixedInParser): Record<string, Rule> {\n    return this.gastProductionsCache;\n  }\n\n  public getSerializedGastProductions(this: MixedInParser): ISerializedGast[] {\n    return serializeGrammar(values(this.gastProductionsCache));\n  }\n}\n","import {\n  AtLeastOneSepMethodOpts,\n  ConsumeMethodOpts,\n  DSLMethodOpts,\n  DSLMethodOptsWithErr,\n  GrammarAction,\n  IOrAlt,\n  IParserConfig,\n  IRuleConfig,\n  IToken,\n  ManySepMethodOpts,\n  OrMethodOpts,\n  ParserMethod,\n  SubruleMethodOpts,\n  TokenType,\n  TokenTypeDictionary,\n  TokenVocabulary,\n} from \"@chevrotain/types\";\nimport {\n  clone,\n  every,\n  flatten,\n  has,\n  isArray,\n  isEmpty,\n  isObject,\n  reduce,\n  uniq,\n  values,\n} from \"lodash-es\";\nimport {\n  AT_LEAST_ONE_IDX,\n  AT_LEAST_ONE_SEP_IDX,\n  BITS_FOR_METHOD_TYPE,\n  BITS_FOR_OCCURRENCE_IDX,\n  MANY_IDX,\n  MANY_SEP_IDX,\n  OPTION_IDX,\n  OR_IDX,\n} from \"../../grammar/keys.js\";\nimport {\n  isRecognitionException,\n  MismatchedTokenException,\n  NotAllInputParsedException,\n} from \"../../exceptions_public.js\";\nimport { PROD_TYPE } from \"../../grammar/lookahead.js\";\nimport {\n  AbstractNextTerminalAfterProductionWalker,\n  NextTerminalAfterAtLeastOneSepWalker,\n  NextTerminalAfterAtLeastOneWalker,\n  NextTerminalAfterManySepWalker,\n  NextTerminalAfterManyWalker,\n} from \"../../grammar/interpreter.js\";\nimport { DEFAULT_RULE_CONFIG, IParserState, TokenMatcher } from \"../parser.js\";\nimport { IN_RULE_RECOVERY_EXCEPTION } from \"./recoverable.js\";\nimport { EOF } from \"../../../scan/tokens_public.js\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport {\n  augmentTokenTypes,\n  isTokenType,\n  tokenStructuredMatcher,\n  tokenStructuredMatcherNoCategories,\n} from \"../../../scan/tokens.js\";\nimport { Rule } from \"@chevrotain/gast\";\nimport { ParserMethodInternal } from \"../types.js\";\n\n/**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\nexport class RecognizerEngine {\n  isBackTrackingStack: boolean[];\n  className: string;\n  RULE_STACK: number[];\n  RULE_OCCURRENCE_STACK: number[];\n  definedRulesNames: string[];\n  tokensMap: { [fqn: string]: TokenType };\n  gastProductionsCache: Record<string, Rule>;\n  shortRuleNameToFull: Record<string, string>;\n  fullRuleNameToShort: Record<string, number>;\n  // The shortName Index must be coded \"after\" the first 8bits to enable building unique lookahead keys\n  ruleShortNameIdx: number;\n  tokenMatcher: TokenMatcher;\n  subruleIdx: number;\n\n  initRecognizerEngine(\n    tokenVocabulary: TokenVocabulary,\n    config: IParserConfig,\n  ) {\n    this.className = this.constructor.name;\n    // TODO: would using an ES6 Map or plain object be faster (CST building scenario)\n    this.shortRuleNameToFull = {};\n    this.fullRuleNameToShort = {};\n    this.ruleShortNameIdx = 256;\n    this.tokenMatcher = tokenStructuredMatcherNoCategories;\n    this.subruleIdx = 0;\n\n    this.definedRulesNames = [];\n    this.tokensMap = {};\n    this.isBackTrackingStack = [];\n    this.RULE_STACK = [];\n    this.RULE_OCCURRENCE_STACK = [];\n    this.gastProductionsCache = {};\n\n    if (has(config, \"serializedGrammar\")) {\n      throw Error(\n        \"The Parser's configuration can no longer contain a <serializedGrammar> property.\\n\" +\n          \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n\" +\n          \"\\tFor Further details.\",\n      );\n    }\n\n    if (isArray(tokenVocabulary)) {\n      // This only checks for Token vocabularies provided as arrays.\n      // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n      // rather than all edge cases of empty Token vocabularies.\n      if (isEmpty(tokenVocabulary as any[])) {\n        throw Error(\n          \"A Token Vocabulary cannot be empty.\\n\" +\n            \"\\tNote that the first argument for the parser constructor\\n\" +\n            \"\\tis no longer a Token vector (since v4.0).\",\n        );\n      }\n\n      if (typeof (tokenVocabulary as any[])[0].startOffset === \"number\") {\n        throw Error(\n          \"The Parser constructor no longer accepts a token vector as the first argument.\\n\" +\n            \"\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n\" +\n            \"\\tFor Further details.\",\n        );\n      }\n    }\n\n    if (isArray(tokenVocabulary)) {\n      this.tokensMap = reduce(\n        tokenVocabulary,\n        (acc, tokType: TokenType) => {\n          acc[tokType.name] = tokType;\n          return acc;\n        },\n        {} as { [tokenName: string]: TokenType },\n      );\n    } else if (\n      has(tokenVocabulary, \"modes\") &&\n      every(flatten(values((<any>tokenVocabulary).modes)), isTokenType)\n    ) {\n      const allTokenTypes = flatten(values((<any>tokenVocabulary).modes));\n      const uniqueTokens = uniq(allTokenTypes);\n      this.tokensMap = <any>reduce(\n        uniqueTokens,\n        (acc, tokType: TokenType) => {\n          acc[tokType.name] = tokType;\n          return acc;\n        },\n        {} as { [tokenName: string]: TokenType },\n      );\n    } else if (isObject(tokenVocabulary)) {\n      this.tokensMap = clone(tokenVocabulary as TokenTypeDictionary);\n    } else {\n      throw new Error(\n        \"<tokensDictionary> argument must be An Array of Token constructors,\" +\n          \" A dictionary of Token constructors or an IMultiModeLexerDefinition\",\n      );\n    }\n\n    // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n    // parsed with a clear error message (\"expecting EOF but found ...\")\n    this.tokensMap[\"EOF\"] = EOF;\n\n    const allTokenTypes = has(tokenVocabulary, \"modes\")\n      ? flatten(values((<any>tokenVocabulary).modes))\n      : values(tokenVocabulary);\n    const noTokenCategoriesUsed = every(allTokenTypes, (tokenConstructor) =>\n      isEmpty(tokenConstructor.categoryMatches),\n    );\n\n    this.tokenMatcher = noTokenCategoriesUsed\n      ? tokenStructuredMatcherNoCategories\n      : tokenStructuredMatcher;\n\n    // Because ES2015+ syntax should be supported for creating Token classes\n    // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n    // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n    augmentTokenTypes(values(this.tokensMap));\n  }\n\n  defineRule<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleName: string,\n    impl: (...args: ARGS) => R,\n    config: IRuleConfig<R>,\n  ): ParserMethodInternal<ARGS, R> {\n    if (this.selfAnalysisDone) {\n      throw Error(\n        `Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'\\n` +\n          `Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`,\n      );\n    }\n    const resyncEnabled: boolean = has(config, \"resyncEnabled\")\n      ? (config.resyncEnabled as boolean) // assumes end user provides the correct config value/type\n      : DEFAULT_RULE_CONFIG.resyncEnabled;\n    const recoveryValueFunc = has(config, \"recoveryValueFunc\")\n      ? (config.recoveryValueFunc as () => R) // assumes end user provides the correct config value/type\n      : DEFAULT_RULE_CONFIG.recoveryValueFunc;\n\n    // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n    // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n    const shortName =\n      this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX);\n\n    this.ruleShortNameIdx++;\n    this.shortRuleNameToFull[shortName] = ruleName;\n    this.fullRuleNameToShort[ruleName] = shortName;\n\n    let invokeRuleWithTry: ParserMethod<ARGS, R>;\n\n    // Micro optimization, only check the condition **once** on rule definition\n    // instead of **every single** rule invocation.\n    if (this.outputCst === true) {\n      invokeRuleWithTry = function invokeRuleWithTry(\n        this: MixedInParser,\n        ...args: ARGS\n      ): R {\n        try {\n          this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);\n          impl.apply(this, args);\n          const cst = this.CST_STACK[this.CST_STACK.length - 1];\n          this.cstPostRule(cst);\n          return cst as unknown as R;\n        } catch (e) {\n          return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc) as R;\n        } finally {\n          this.ruleFinallyStateUpdate();\n        }\n      };\n    } else {\n      invokeRuleWithTry = function invokeRuleWithTryCst(\n        this: MixedInParser,\n        ...args: ARGS\n      ): R {\n        try {\n          this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);\n          return impl.apply(this, args);\n        } catch (e) {\n          return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc) as R;\n        } finally {\n          this.ruleFinallyStateUpdate();\n        }\n      };\n    }\n\n    const wrappedGrammarRule: ParserMethodInternal<ARGS, R> = Object.assign(\n      invokeRuleWithTry as any,\n      { ruleName, originalGrammarAction: impl },\n    );\n\n    return wrappedGrammarRule;\n  }\n\n  invokeRuleCatch(\n    this: MixedInParser,\n    e: Error,\n    resyncEnabledConfig: boolean,\n    recoveryValueFunc: Function,\n  ): unknown {\n    const isFirstInvokedRule = this.RULE_STACK.length === 1;\n    // note the reSync is always enabled for the first rule invocation, because we must always be able to\n    // reSync with EOF and just output some INVALID ParseTree\n    // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking\n    // path is really the most valid one\n    const reSyncEnabled =\n      resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled;\n\n    if (isRecognitionException(e)) {\n      const recogError: any = e;\n      if (reSyncEnabled) {\n        const reSyncTokType = this.findReSyncTokenType();\n        if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n          recogError.resyncedTokens = this.reSyncTo(reSyncTokType);\n          if (this.outputCst) {\n            const partialCstResult: any =\n              this.CST_STACK[this.CST_STACK.length - 1];\n            partialCstResult.recoveredNode = true;\n            return partialCstResult;\n          } else {\n            return recoveryValueFunc(e);\n          }\n        } else {\n          if (this.outputCst) {\n            const partialCstResult: any =\n              this.CST_STACK[this.CST_STACK.length - 1];\n            partialCstResult.recoveredNode = true;\n            recogError.partialCstResult = partialCstResult;\n          }\n          // to be handled Further up the call stack\n          throw recogError;\n        }\n      } else if (isFirstInvokedRule) {\n        // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n        this.moveToTerminatedState();\n        // the parser should never throw one of its own errors outside its flow.\n        // even if error recovery is disabled\n        return recoveryValueFunc(e);\n      } else {\n        // to be recovered Further up the call stack\n        throw recogError;\n      }\n    } else {\n      // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n      throw e;\n    }\n  }\n\n  // Implementation of parsing DSL\n  optionInternal<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n    occurrence: number,\n  ): OUT | undefined {\n    const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);\n    return this.optionInternalLogic(actionORMethodDef, occurrence, key);\n  }\n\n  optionInternalLogic<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n    occurrence: number,\n    key: number,\n  ): OUT | undefined {\n    let lookAheadFunc = this.getLaFuncFromCache(key);\n    let action: GrammarAction<OUT>;\n    if (typeof actionORMethodDef !== \"function\") {\n      action = actionORMethodDef.DEF;\n      const predicate = actionORMethodDef.GATE;\n      // predicate present\n      if (predicate !== undefined) {\n        const orgLookaheadFunction = lookAheadFunc;\n        lookAheadFunc = () => {\n          return predicate.call(this) && orgLookaheadFunction.call(this);\n        };\n      }\n    } else {\n      action = actionORMethodDef;\n    }\n\n    if (lookAheadFunc.call(this) === true) {\n      return action.call(this);\n    }\n    return undefined;\n  }\n\n  atLeastOneInternal<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    const laKey = this.getKeyForAutomaticLookahead(\n      AT_LEAST_ONE_IDX,\n      prodOccurrence,\n    );\n    return this.atLeastOneInternalLogic(\n      prodOccurrence,\n      actionORMethodDef,\n      laKey,\n    );\n  }\n\n  atLeastOneInternalLogic<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n    key: number,\n  ): void {\n    let lookAheadFunc = this.getLaFuncFromCache(key);\n    let action;\n    if (typeof actionORMethodDef !== \"function\") {\n      action = actionORMethodDef.DEF;\n      const predicate = actionORMethodDef.GATE;\n      // predicate present\n      if (predicate !== undefined) {\n        const orgLookaheadFunction = lookAheadFunc;\n        lookAheadFunc = () => {\n          return predicate.call(this) && orgLookaheadFunction.call(this);\n        };\n      }\n    } else {\n      action = actionORMethodDef;\n    }\n\n    if ((<Function>lookAheadFunc).call(this) === true) {\n      let notStuck = this.doSingleRepetition(action);\n      while (\n        (<Function>lookAheadFunc).call(this) === true &&\n        notStuck === true\n      ) {\n        notStuck = this.doSingleRepetition(action);\n      }\n    } else {\n      throw this.raiseEarlyExitException(\n        prodOccurrence,\n        PROD_TYPE.REPETITION_MANDATORY,\n        (<DSLMethodOptsWithErr<OUT>>actionORMethodDef).ERR_MSG,\n      );\n    }\n\n    // note that while it may seem that this can cause an error because by using a recursive call to\n    // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n    // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n\n    // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n    this.attemptInRepetitionRecovery(\n      this.atLeastOneInternal,\n      [prodOccurrence, actionORMethodDef],\n      <any>lookAheadFunc,\n      AT_LEAST_ONE_IDX,\n      prodOccurrence,\n      NextTerminalAfterAtLeastOneWalker,\n    );\n  }\n\n  atLeastOneSepFirstInternal<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    const laKey = this.getKeyForAutomaticLookahead(\n      AT_LEAST_ONE_SEP_IDX,\n      prodOccurrence,\n    );\n    this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);\n  }\n\n  atLeastOneSepFirstInternalLogic<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    options: AtLeastOneSepMethodOpts<OUT>,\n    key: number,\n  ): void {\n    const action = options.DEF;\n    const separator = options.SEP;\n\n    const firstIterationLookaheadFunc = this.getLaFuncFromCache(key);\n\n    // 1st iteration\n    if (firstIterationLookaheadFunc.call(this) === true) {\n      (<GrammarAction<OUT>>action).call(this);\n\n      //  TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n      //  because it is only needed in error recovery scenarios.\n      const separatorLookAheadFunc = () => {\n        return this.tokenMatcher(this.LA(1), separator);\n      };\n\n      // 2nd..nth iterations\n      while (this.tokenMatcher(this.LA(1), separator) === true) {\n        // note that this CONSUME will never enter recovery because\n        // the separatorLookAheadFunc checks that the separator really does exist.\n        this.CONSUME(separator);\n        // No need for checking infinite loop here due to consuming the separator.\n        (<GrammarAction<OUT>>action).call(this);\n      }\n\n      // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n      this.attemptInRepetitionRecovery(\n        this.repetitionSepSecondInternal,\n        [\n          prodOccurrence,\n          separator,\n          separatorLookAheadFunc,\n          action,\n          NextTerminalAfterAtLeastOneSepWalker,\n        ],\n        separatorLookAheadFunc,\n        AT_LEAST_ONE_SEP_IDX,\n        prodOccurrence,\n        NextTerminalAfterAtLeastOneSepWalker,\n      );\n    } else {\n      throw this.raiseEarlyExitException(\n        prodOccurrence,\n        PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n        options.ERR_MSG,\n      );\n    }\n  }\n\n  manyInternal<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);\n    return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n  }\n\n  manyInternalLogic<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n    key: number,\n  ) {\n    let lookaheadFunction = this.getLaFuncFromCache(key);\n    let action;\n    if (typeof actionORMethodDef !== \"function\") {\n      action = actionORMethodDef.DEF;\n      const predicate = actionORMethodDef.GATE;\n      // predicate present\n      if (predicate !== undefined) {\n        const orgLookaheadFunction = lookaheadFunction;\n        lookaheadFunction = () => {\n          return predicate.call(this) && orgLookaheadFunction.call(this);\n        };\n      }\n    } else {\n      action = actionORMethodDef;\n    }\n\n    let notStuck = true;\n    while (lookaheadFunction.call(this) === true && notStuck === true) {\n      notStuck = this.doSingleRepetition(action);\n    }\n\n    // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n    this.attemptInRepetitionRecovery(\n      this.manyInternal,\n      [prodOccurrence, actionORMethodDef],\n      <any>lookaheadFunction,\n      MANY_IDX,\n      prodOccurrence,\n      NextTerminalAfterManyWalker,\n      // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n      // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n      // An infinite loop cannot occur as:\n      // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n      // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n      notStuck,\n    );\n  }\n\n  manySepFirstInternal<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    options: ManySepMethodOpts<OUT>,\n  ): void {\n    const laKey = this.getKeyForAutomaticLookahead(\n      MANY_SEP_IDX,\n      prodOccurrence,\n    );\n    this.manySepFirstInternalLogic(prodOccurrence, options, laKey);\n  }\n\n  manySepFirstInternalLogic<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    options: ManySepMethodOpts<OUT>,\n    key: number,\n  ): void {\n    const action = options.DEF;\n    const separator = options.SEP;\n    const firstIterationLaFunc = this.getLaFuncFromCache(key);\n\n    // 1st iteration\n    if (firstIterationLaFunc.call(this) === true) {\n      action.call(this);\n\n      const separatorLookAheadFunc = () => {\n        return this.tokenMatcher(this.LA(1), separator);\n      };\n      // 2nd..nth iterations\n      while (this.tokenMatcher(this.LA(1), separator) === true) {\n        // note that this CONSUME will never enter recovery because\n        // the separatorLookAheadFunc checks that the separator really does exist.\n        this.CONSUME(separator);\n        // No need for checking infinite loop here due to consuming the separator.\n        action.call(this);\n      }\n\n      // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n      this.attemptInRepetitionRecovery(\n        this.repetitionSepSecondInternal,\n        [\n          prodOccurrence,\n          separator,\n          separatorLookAheadFunc,\n          action,\n          NextTerminalAfterManySepWalker,\n        ],\n        separatorLookAheadFunc,\n        MANY_SEP_IDX,\n        prodOccurrence,\n        NextTerminalAfterManySepWalker,\n      );\n    }\n  }\n\n  repetitionSepSecondInternal<OUT>(\n    this: MixedInParser,\n    prodOccurrence: number,\n    separator: TokenType,\n    separatorLookAheadFunc: () => boolean,\n    action: GrammarAction<OUT>,\n    nextTerminalAfterWalker: typeof AbstractNextTerminalAfterProductionWalker,\n  ): void {\n    while (separatorLookAheadFunc()) {\n      // note that this CONSUME will never enter recovery because\n      // the separatorLookAheadFunc checks that the separator really does exist.\n      this.CONSUME(separator);\n      action.call(this);\n    }\n\n    // we can only arrive to this function after an error\n    // has occurred (hence the name 'second') so the following\n    // IF will always be entered, its possible to remove it...\n    // however it is kept to avoid confusion and be consistent.\n    // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n    /* istanbul ignore else */\n    this.attemptInRepetitionRecovery(\n      this.repetitionSepSecondInternal,\n      [\n        prodOccurrence,\n        separator,\n        separatorLookAheadFunc,\n        action,\n        nextTerminalAfterWalker,\n      ],\n      separatorLookAheadFunc,\n      AT_LEAST_ONE_SEP_IDX,\n      prodOccurrence,\n      nextTerminalAfterWalker,\n    );\n  }\n\n  doSingleRepetition(this: MixedInParser, action: Function): any {\n    const beforeIteration = this.getLexerPosition();\n    action.call(this);\n    const afterIteration = this.getLexerPosition();\n\n    // This boolean will indicate if this repetition progressed\n    // or if we are \"stuck\" (potential infinite loop in the repetition).\n    return afterIteration > beforeIteration;\n  }\n\n  orInternal<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n    occurrence: number,\n  ): T {\n    const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);\n    const alts = isArray(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF;\n\n    const laFunc = this.getLaFuncFromCache(laKey);\n    const altIdxToTake = laFunc.call(this, alts);\n    if (altIdxToTake !== undefined) {\n      const chosenAlternative: any = alts[altIdxToTake];\n      return chosenAlternative.ALT.call(this);\n    }\n    this.raiseNoAltException(\n      occurrence,\n      (altsOrOpts as OrMethodOpts<unknown>).ERR_MSG,\n    );\n  }\n\n  ruleFinallyStateUpdate(this: MixedInParser): void {\n    this.RULE_STACK.pop();\n    this.RULE_OCCURRENCE_STACK.pop();\n\n    // NOOP when cst is disabled\n    this.cstFinallyStateUpdate();\n\n    if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n      const firstRedundantTok = this.LA(1);\n      const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n        firstRedundant: firstRedundantTok,\n        ruleName: this.getCurrRuleFullName(),\n      });\n      this.SAVE_ERROR(\n        new NotAllInputParsedException(errMsg, firstRedundantTok),\n      );\n    }\n  }\n\n  subruleInternal<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    idx: number,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R {\n    let ruleResult;\n    try {\n      const args = options !== undefined ? options.ARGS : undefined;\n      this.subruleIdx = idx;\n      ruleResult = ruleToCall.apply(this, args);\n      this.cstPostNonTerminal(\n        ruleResult,\n        options !== undefined && options.LABEL !== undefined\n          ? options.LABEL\n          : ruleToCall.ruleName,\n      );\n      return ruleResult;\n    } catch (e) {\n      throw this.subruleInternalError(e, options, ruleToCall.ruleName);\n    }\n  }\n\n  subruleInternalError(\n    this: MixedInParser,\n    e: any,\n    options: SubruleMethodOpts<unknown[]> | undefined,\n    ruleName: string,\n  ): void {\n    if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n      this.cstPostNonTerminal(\n        e.partialCstResult,\n        options !== undefined && options.LABEL !== undefined\n          ? options.LABEL\n          : ruleName,\n      );\n\n      delete e.partialCstResult;\n    }\n    throw e;\n  }\n\n  consumeInternal(\n    this: MixedInParser,\n    tokType: TokenType,\n    idx: number,\n    options: ConsumeMethodOpts | undefined,\n  ): IToken {\n    let consumedToken!: IToken;\n    try {\n      const nextToken = this.LA(1);\n      if (this.tokenMatcher(nextToken, tokType) === true) {\n        this.consumeToken();\n        consumedToken = nextToken;\n      } else {\n        this.consumeInternalError(tokType, nextToken, options);\n      }\n    } catch (eFromConsumption) {\n      consumedToken = this.consumeInternalRecovery(\n        tokType,\n        idx,\n        eFromConsumption,\n      );\n    }\n\n    this.cstPostTerminal(\n      options !== undefined && options.LABEL !== undefined\n        ? options.LABEL\n        : tokType.name,\n      consumedToken,\n    );\n    return consumedToken;\n  }\n\n  consumeInternalError(\n    this: MixedInParser,\n    tokType: TokenType,\n    nextToken: IToken,\n    options: ConsumeMethodOpts | undefined,\n  ): void {\n    let msg;\n    const previousToken = this.LA(0);\n    if (options !== undefined && options.ERR_MSG) {\n      msg = options.ERR_MSG;\n    } else {\n      msg = this.errorMessageProvider.buildMismatchTokenMessage({\n        expected: tokType,\n        actual: nextToken,\n        previous: previousToken,\n        ruleName: this.getCurrRuleFullName(),\n      });\n    }\n    throw this.SAVE_ERROR(\n      new MismatchedTokenException(msg, nextToken, previousToken),\n    );\n  }\n\n  consumeInternalRecovery(\n    this: MixedInParser,\n    tokType: TokenType,\n    idx: number,\n    eFromConsumption: Error,\n  ): IToken {\n    // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n    // but the original syntax could have been parsed successfully without any backtracking + recovery\n    if (\n      this.recoveryEnabled &&\n      // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n      eFromConsumption.name === \"MismatchedTokenException\" &&\n      !this.isBackTracking()\n    ) {\n      const follows = this.getFollowsForInRuleRecovery(<any>tokType, idx);\n      try {\n        return this.tryInRuleRecovery(<any>tokType, follows);\n      } catch (eFromInRuleRecovery) {\n        if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n          // failed in RuleRecovery.\n          // throw the original error in order to trigger reSync error recovery\n          throw eFromConsumption;\n        } else {\n          throw eFromInRuleRecovery;\n        }\n      }\n    } else {\n      throw eFromConsumption;\n    }\n  }\n\n  saveRecogState(this: MixedInParser): IParserState {\n    // errors is a getter which will clone the errors array\n    const savedErrors = this.errors;\n    const savedRuleStack = clone(this.RULE_STACK);\n    return {\n      errors: savedErrors,\n      lexerState: this.exportLexerState(),\n      RULE_STACK: savedRuleStack,\n      CST_STACK: this.CST_STACK,\n    };\n  }\n\n  reloadRecogState(this: MixedInParser, newState: IParserState) {\n    this.errors = newState.errors;\n    this.importLexerState(newState.lexerState);\n    this.RULE_STACK = newState.RULE_STACK;\n  }\n\n  ruleInvocationStateUpdate(\n    this: MixedInParser,\n    shortName: number,\n    fullName: string,\n    idxInCallingRule: number,\n  ): void {\n    this.RULE_OCCURRENCE_STACK.push(idxInCallingRule);\n    this.RULE_STACK.push(shortName);\n    // NOOP when cst is disabled\n    this.cstInvocationStateUpdate(fullName);\n  }\n\n  isBackTracking(this: MixedInParser): boolean {\n    return this.isBackTrackingStack.length !== 0;\n  }\n\n  getCurrRuleFullName(this: MixedInParser): string {\n    const shortName = this.getLastExplicitRuleShortName();\n    return this.shortRuleNameToFull[shortName];\n  }\n\n  shortRuleNameToFullName(this: MixedInParser, shortName: number) {\n    return this.shortRuleNameToFull[shortName];\n  }\n\n  public isAtEndOfInput(this: MixedInParser): boolean {\n    return this.tokenMatcher(this.LA(1), EOF);\n  }\n\n  public reset(this: MixedInParser): void {\n    this.resetLexerState();\n    this.subruleIdx = 0;\n    this.isBackTrackingStack = [];\n    this.errors = [];\n    this.RULE_STACK = [];\n    // TODO: extract a specific reset for TreeBuilder trait\n    this.CST_STACK = [];\n    this.RULE_OCCURRENCE_STACK = [];\n  }\n}\n","import {\n  IParserConfig,\n  IParserErrorMessageProvider,\n  IRecognitionException,\n} from \"@chevrotain/types\";\nimport {\n  EarlyExitException,\n  isRecognitionException,\n  NoViableAltException,\n} from \"../../exceptions_public.js\";\nimport { clone, has } from \"lodash-es\";\nimport {\n  getLookaheadPathsForOptionalProd,\n  getLookaheadPathsForOr,\n  PROD_TYPE,\n} from \"../../grammar/lookahead.js\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class ErrorHandler {\n  _errors: IRecognitionException[];\n  errorMessageProvider: IParserErrorMessageProvider;\n\n  initErrorHandler(config: IParserConfig) {\n    this._errors = [];\n    this.errorMessageProvider = has(config, \"errorMessageProvider\")\n      ? (config.errorMessageProvider as IParserErrorMessageProvider) // assumes end user provides the correct config value/type\n      : DEFAULT_PARSER_CONFIG.errorMessageProvider;\n  }\n\n  SAVE_ERROR(\n    this: MixedInParser,\n    error: IRecognitionException,\n  ): IRecognitionException {\n    if (isRecognitionException(error)) {\n      error.context = {\n        ruleStack: this.getHumanReadableRuleStack(),\n        ruleOccurrenceStack: clone(this.RULE_OCCURRENCE_STACK),\n      };\n      this._errors.push(error);\n      return error;\n    } else {\n      throw Error(\n        \"Trying to save an Error which is not a RecognitionException\",\n      );\n    }\n  }\n\n  get errors(): IRecognitionException[] {\n    return clone(this._errors);\n  }\n\n  set errors(newErrors: IRecognitionException[]) {\n    this._errors = newErrors;\n  }\n\n  // TODO: consider caching the error message computed information\n  raiseEarlyExitException(\n    this: MixedInParser,\n    occurrence: number,\n    prodType: PROD_TYPE,\n    userDefinedErrMsg: string | undefined,\n  ): never {\n    const ruleName = this.getCurrRuleFullName();\n    const ruleGrammar = this.getGAstProductions()[ruleName];\n    const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(\n      occurrence,\n      ruleGrammar,\n      prodType,\n      this.maxLookahead,\n    );\n    const insideProdPaths = lookAheadPathsPerAlternative[0];\n    const actualTokens = [];\n    for (let i = 1; i <= this.maxLookahead; i++) {\n      actualTokens.push(this.LA(i));\n    }\n    const msg = this.errorMessageProvider.buildEarlyExitMessage({\n      expectedIterationPaths: insideProdPaths,\n      actual: actualTokens,\n      previous: this.LA(0),\n      customUserDescription: userDefinedErrMsg,\n      ruleName: ruleName,\n    });\n\n    throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)));\n  }\n\n  // TODO: consider caching the error message computed information\n  raiseNoAltException(\n    this: MixedInParser,\n    occurrence: number,\n    errMsgTypes: string | undefined,\n  ): never {\n    const ruleName = this.getCurrRuleFullName();\n    const ruleGrammar = this.getGAstProductions()[ruleName];\n    // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n    const lookAheadPathsPerAlternative = getLookaheadPathsForOr(\n      occurrence,\n      ruleGrammar,\n      this.maxLookahead,\n    );\n\n    const actualTokens = [];\n    for (let i = 1; i <= this.maxLookahead; i++) {\n      actualTokens.push(this.LA(i));\n    }\n    const previousToken = this.LA(0);\n\n    const errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n      expectedPathsPerAlt: lookAheadPathsPerAlternative,\n      actual: actualTokens,\n      previous: previousToken,\n      customUserDescription: errMsgTypes,\n      ruleName: this.getCurrRuleFullName(),\n    });\n\n    throw this.SAVE_ERROR(\n      new NoViableAltException(errMsg, this.LA(1), previousToken),\n    );\n  }\n}\n","import {\n  ISyntacticContentAssistPath,\n  IToken,\n  ITokenGrammarPath,\n  TokenType,\n} from \"@chevrotain/types\";\nimport {\n  NextAfterTokenWalker,\n  nextPossibleTokensAfter,\n} from \"../../grammar/interpreter.js\";\nimport { first, isUndefined } from \"lodash-es\";\nimport { MixedInParser } from \"./parser_traits.js\";\n\nexport class ContentAssist {\n  initContentAssist() {}\n\n  public computeContentAssist(\n    this: MixedInParser,\n    startRuleName: string,\n    precedingInput: IToken[],\n  ): ISyntacticContentAssistPath[] {\n    const startRuleGast = this.gastProductionsCache[startRuleName];\n\n    if (isUndefined(startRuleGast)) {\n      throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`);\n    }\n\n    return nextPossibleTokensAfter(\n      [startRuleGast],\n      precedingInput,\n      this.tokenMatcher,\n      this.maxLookahead,\n    );\n  }\n\n  // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n  // TODO: should this be more explicitly part of the public API?\n  public getNextPossibleTokenTypes(\n    this: MixedInParser,\n    grammarPath: ITokenGrammarPath,\n  ): TokenType[] {\n    const topRuleName = first(grammarPath.ruleStack)!;\n    const gastProductions = this.getGAstProductions();\n    const topProduction = gastProductions[topRuleName];\n    const nextPossibleTokenTypes = new NextAfterTokenWalker(\n      topProduction,\n      grammarPath,\n    ).startWalking();\n    return nextPossibleTokenTypes;\n  }\n}\n","import {\n  AtLeastOneSepMethodOpts,\n  ConsumeMethodOpts,\n  CstNode,\n  DSLMethodOpts,\n  DSLMethodOptsWithErr,\n  GrammarAction,\n  IOrAlt,\n  IParserConfig,\n  IProduction,\n  IToken,\n  ManySepMethodOpts,\n  OrMethodOpts,\n  SubruleMethodOpts,\n  TokenType,\n} from \"@chevrotain/types\";\nimport {\n  forEach,\n  has,\n  isArray,\n  isFunction,\n  last as peek,\n  some,\n} from \"lodash-es\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport {\n  Alternation,\n  Alternative,\n  NonTerminal,\n  Option,\n  Repetition,\n  RepetitionMandatory,\n  RepetitionMandatoryWithSeparator,\n  RepetitionWithSeparator,\n  Rule,\n  Terminal,\n} from \"@chevrotain/gast\";\nimport { Lexer } from \"../../../scan/lexer_public.js\";\nimport {\n  augmentTokenTypes,\n  hasShortKeyProperty,\n} from \"../../../scan/tokens.js\";\nimport {\n  createToken,\n  createTokenInstance,\n} from \"../../../scan/tokens_public.js\";\nimport { END_OF_FILE } from \"../parser.js\";\nimport { BITS_FOR_OCCURRENCE_IDX } from \"../../grammar/keys.js\";\nimport { ParserMethodInternal } from \"../types.js\";\n\ntype ProdWithDef = IProduction & { definition?: IProduction[] };\nconst RECORDING_NULL_OBJECT = {\n  description: \"This Object indicates the Parser is during Recording Phase\",\n};\nObject.freeze(RECORDING_NULL_OBJECT);\n\nconst HANDLE_SEPARATOR = true;\nconst MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1;\n\nconst RFT = createToken({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer.NA });\naugmentTokenTypes([RFT]);\nconst RECORDING_PHASE_TOKEN = createTokenInstance(\n  RFT,\n  \"This IToken indicates the Parser is in Recording Phase\\n\\t\" +\n    \"\" +\n    \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n  // Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n  // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n  -1,\n  -1,\n  -1,\n  -1,\n  -1,\n  -1,\n);\nObject.freeze(RECORDING_PHASE_TOKEN);\n\nconst RECORDING_PHASE_CSTNODE: CstNode = {\n  name:\n    \"This CSTNode indicates the Parser is in Recording Phase\\n\\t\" +\n    \"See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n  children: {},\n};\n\n/**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\nexport class GastRecorder {\n  recordingProdStack: ProdWithDef[];\n  RECORDING_PHASE: boolean;\n\n  initGastRecorder(this: MixedInParser, config: IParserConfig): void {\n    this.recordingProdStack = [];\n    this.RECORDING_PHASE = false;\n  }\n\n  enableRecording(this: MixedInParser): void {\n    this.RECORDING_PHASE = true;\n\n    this.TRACE_INIT(\"Enable Recording\", () => {\n      /**\n       * Warning Dark Voodoo Magic upcoming!\n       * We are \"replacing\" the public parsing DSL methods API\n       * With **new** alternative implementations on the Parser **instance**\n       *\n       * So far this is the only way I've found to avoid performance regressions during parsing time.\n       * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the \"internal\"\n       *   implementations directly instead.\n       */\n      for (let i = 0; i < 10; i++) {\n        const idx = i > 0 ? i : \"\";\n        this[`CONSUME${idx}` as \"CONSUME\"] = function (arg1, arg2) {\n          return this.consumeInternalRecord(arg1, i, arg2);\n        };\n        this[`SUBRULE${idx}` as \"SUBRULE\"] = function (arg1, arg2) {\n          return this.subruleInternalRecord(arg1, i, arg2) as any;\n        };\n        this[`OPTION${idx}` as \"OPTION\"] = function (arg1) {\n          return this.optionInternalRecord(arg1, i);\n        };\n        this[`OR${idx}` as \"OR\"] = function (arg1) {\n          return this.orInternalRecord(arg1, i);\n        };\n        this[`MANY${idx}` as \"MANY\"] = function (arg1) {\n          this.manyInternalRecord(i, arg1);\n        };\n        this[`MANY_SEP${idx}` as \"MANY_SEP\"] = function (arg1) {\n          this.manySepFirstInternalRecord(i, arg1);\n        };\n        this[`AT_LEAST_ONE${idx}` as \"AT_LEAST_ONE\"] = function (arg1) {\n          this.atLeastOneInternalRecord(i, arg1);\n        };\n        this[`AT_LEAST_ONE_SEP${idx}` as \"AT_LEAST_ONE_SEP\"] = function (arg1) {\n          this.atLeastOneSepFirstInternalRecord(i, arg1);\n        };\n      }\n\n      // DSL methods with the idx(suffix) as an argument\n      this[`consume`] = function (idx, arg1, arg2) {\n        return this.consumeInternalRecord(arg1, idx, arg2);\n      };\n      this[`subrule`] = function (idx, arg1, arg2) {\n        return this.subruleInternalRecord(arg1, idx, arg2) as any;\n      };\n      this[`option`] = function (idx, arg1) {\n        return this.optionInternalRecord(arg1, idx);\n      };\n      this[`or`] = function (idx, arg1) {\n        return this.orInternalRecord(arg1, idx);\n      };\n      this[`many`] = function (idx, arg1) {\n        this.manyInternalRecord(idx, arg1);\n      };\n      this[`atLeastOne`] = function (idx, arg1) {\n        this.atLeastOneInternalRecord(idx, arg1);\n      };\n\n      this.ACTION = this.ACTION_RECORD;\n      this.BACKTRACK = this.BACKTRACK_RECORD;\n      this.LA = this.LA_RECORD;\n    });\n  }\n\n  disableRecording(this: MixedInParser) {\n    this.RECORDING_PHASE = false;\n    // By deleting these **instance** properties, any future invocation\n    // will be deferred to the original methods on the **prototype** object\n    // This seems to get rid of any incorrect optimizations that V8 may\n    // do during the recording phase.\n    this.TRACE_INIT(\"Deleting Recording methods\", () => {\n      const that: any = this;\n\n      for (let i = 0; i < 10; i++) {\n        const idx = i > 0 ? i : \"\";\n        delete that[`CONSUME${idx}`];\n        delete that[`SUBRULE${idx}`];\n        delete that[`OPTION${idx}`];\n        delete that[`OR${idx}`];\n        delete that[`MANY${idx}`];\n        delete that[`MANY_SEP${idx}`];\n        delete that[`AT_LEAST_ONE${idx}`];\n        delete that[`AT_LEAST_ONE_SEP${idx}`];\n      }\n\n      delete that[`consume`];\n      delete that[`subrule`];\n      delete that[`option`];\n      delete that[`or`];\n      delete that[`many`];\n      delete that[`atLeastOne`];\n\n      delete that.ACTION;\n      delete that.BACKTRACK;\n      delete that.LA;\n    });\n  }\n\n  //   Parser methods are called inside an ACTION?\n  //   Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n  // @ts-expect-error -- noop place holder\n  ACTION_RECORD<T>(this: MixedInParser, impl: () => T): T {\n    // NO-OP during recording\n  }\n\n  // Executing backtracking logic will break our recording logic assumptions\n  BACKTRACK_RECORD<T>(\n    grammarRule: (...args: any[]) => T,\n    args?: any[],\n  ): () => boolean {\n    return () => true;\n  }\n\n  // LA is part of the official API and may be used for custom lookahead logic\n  // by end users who may forget to wrap it in ACTION or inside a GATE\n  LA_RECORD(howMuch: number): IToken {\n    // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n    // On LA return EOF at the end of the input so an infinite loop may occur.\n    return END_OF_FILE;\n  }\n\n  topLevelRuleRecord(name: string, def: Function): Rule {\n    try {\n      const newTopLevelRule = new Rule({ definition: [], name: name });\n      newTopLevelRule.name = name;\n      this.recordingProdStack.push(newTopLevelRule);\n      def.call(this);\n      this.recordingProdStack.pop();\n      return newTopLevelRule;\n    } catch (originalError) {\n      if (originalError.KNOWN_RECORDER_ERROR !== true) {\n        try {\n          originalError.message =\n            originalError.message +\n            '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n            \"https://chevrotain.io/docs/guide/internals.html#grammar-recording\";\n        } catch (mutabilityError) {\n          // We may not be able to modify the original error object\n          throw originalError;\n        }\n      }\n      throw originalError;\n    }\n  }\n\n  // Implementation of parsing DSL\n  optionInternalRecord<OUT>(\n    this: MixedInParser,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n    occurrence: number,\n  ): OUT {\n    return recordProd.call(this, Option, actionORMethodDef, occurrence);\n  }\n\n  atLeastOneInternalRecord<OUT>(\n    this: MixedInParser,\n    occurrence: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOptsWithErr<OUT>,\n  ): void {\n    recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence);\n  }\n\n  atLeastOneSepFirstInternalRecord<OUT>(\n    this: MixedInParser,\n    occurrence: number,\n    options: AtLeastOneSepMethodOpts<OUT>,\n  ): void {\n    recordProd.call(\n      this,\n      RepetitionMandatoryWithSeparator,\n      options,\n      occurrence,\n      HANDLE_SEPARATOR,\n    );\n  }\n\n  manyInternalRecord<OUT>(\n    this: MixedInParser,\n    occurrence: number,\n    actionORMethodDef: GrammarAction<OUT> | DSLMethodOpts<OUT>,\n  ): void {\n    recordProd.call(this, Repetition, actionORMethodDef, occurrence);\n  }\n\n  manySepFirstInternalRecord<OUT>(\n    this: MixedInParser,\n    occurrence: number,\n    options: ManySepMethodOpts<OUT>,\n  ): void {\n    recordProd.call(\n      this,\n      RepetitionWithSeparator,\n      options,\n      occurrence,\n      HANDLE_SEPARATOR,\n    );\n  }\n\n  orInternalRecord<T>(\n    this: MixedInParser,\n    altsOrOpts: IOrAlt<any>[] | OrMethodOpts<unknown>,\n    occurrence: number,\n  ): T {\n    return recordOrProd.call(this, altsOrOpts, occurrence);\n  }\n\n  subruleInternalRecord<ARGS extends unknown[], R>(\n    this: MixedInParser,\n    ruleToCall: ParserMethodInternal<ARGS, R>,\n    occurrence: number,\n    options?: SubruleMethodOpts<ARGS>,\n  ): R | CstNode {\n    assertMethodIdxIsValid(occurrence);\n    if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n      const error: any = new Error(\n        `<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid` +\n          ` expecting a Parser method reference but got: <${JSON.stringify(\n            ruleToCall,\n          )}>` +\n          `\\n inside top level rule: <${\n            (<Rule>this.recordingProdStack[0]).name\n          }>`,\n      );\n      error.KNOWN_RECORDER_ERROR = true;\n      throw error;\n    }\n\n    const prevProd: any = peek(this.recordingProdStack);\n    const ruleName = ruleToCall.ruleName;\n    const newNoneTerminal = new NonTerminal({\n      idx: occurrence,\n      nonTerminalName: ruleName,\n      label: options?.LABEL,\n      // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n      referencedRule: undefined,\n    });\n    prevProd.definition.push(newNoneTerminal);\n\n    return this.outputCst\n      ? RECORDING_PHASE_CSTNODE\n      : <any>RECORDING_NULL_OBJECT;\n  }\n\n  consumeInternalRecord(\n    this: MixedInParser,\n    tokType: TokenType,\n    occurrence: number,\n    options?: ConsumeMethodOpts,\n  ): IToken {\n    assertMethodIdxIsValid(occurrence);\n    if (!hasShortKeyProperty(tokType)) {\n      const error: any = new Error(\n        `<CONSUME${getIdxSuffix(occurrence)}> argument is invalid` +\n          ` expecting a TokenType reference but got: <${JSON.stringify(\n            tokType,\n          )}>` +\n          `\\n inside top level rule: <${\n            (<Rule>this.recordingProdStack[0]).name\n          }>`,\n      );\n      error.KNOWN_RECORDER_ERROR = true;\n      throw error;\n    }\n    const prevProd: any = peek(this.recordingProdStack);\n    const newNoneTerminal = new Terminal({\n      idx: occurrence,\n      terminalType: tokType,\n      label: options?.LABEL,\n    });\n    prevProd.definition.push(newNoneTerminal);\n\n    return RECORDING_PHASE_TOKEN;\n  }\n}\n\nfunction recordProd(\n  prodConstructor: any,\n  mainProdArg: any,\n  occurrence: number,\n  handleSep: boolean = false,\n): any {\n  assertMethodIdxIsValid(occurrence);\n  const prevProd: any = peek(this.recordingProdStack);\n  const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF;\n\n  const newProd = new prodConstructor({ definition: [], idx: occurrence });\n  if (handleSep) {\n    newProd.separator = mainProdArg.SEP;\n  }\n  if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n    newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n  }\n\n  this.recordingProdStack.push(newProd);\n  grammarAction.call(this);\n  prevProd.definition.push(newProd);\n  this.recordingProdStack.pop();\n\n  return RECORDING_NULL_OBJECT;\n}\n\nfunction recordOrProd(mainProdArg: any, occurrence: number): any {\n  assertMethodIdxIsValid(occurrence);\n  const prevProd: any = peek(this.recordingProdStack);\n  // Only an array of alternatives\n  const hasOptions = isArray(mainProdArg) === false;\n  const alts: IOrAlt<unknown>[] =\n    hasOptions === false ? mainProdArg : mainProdArg.DEF;\n\n  const newOrProd = new Alternation({\n    definition: [],\n    idx: occurrence,\n    ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true,\n  });\n  if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n    newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n  }\n\n  const hasPredicates = some(alts, (currAlt: any) => isFunction(currAlt.GATE));\n  newOrProd.hasPredicates = hasPredicates;\n\n  prevProd.definition.push(newOrProd);\n\n  forEach(alts, (currAlt) => {\n    const currAltFlat = new Alternative({ definition: [] });\n    newOrProd.definition.push(currAltFlat);\n    if (has(currAlt, \"IGNORE_AMBIGUITIES\")) {\n      currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES as boolean; // assumes end user provides the correct config value/type\n    }\n    // **implicit** ignoreAmbiguities due to usage of gate\n    else if (has(currAlt, \"GATE\")) {\n      currAltFlat.ignoreAmbiguities = true;\n    }\n    this.recordingProdStack.push(currAltFlat);\n    currAlt.ALT.call(this);\n    this.recordingProdStack.pop();\n  });\n  return RECORDING_NULL_OBJECT;\n}\n\nfunction getIdxSuffix(idx: number): string {\n  return idx === 0 ? \"\" : `${idx}`;\n}\n\nfunction assertMethodIdxIsValid(idx: number): void {\n  if (idx < 0 || idx > MAX_METHOD_IDX) {\n    const error: any = new Error(\n      // The stack trace will contain all the needed details\n      `Invalid DSL Method idx value: <${idx}>\\n\\t` +\n        `Idx value must be a none negative value smaller than ${\n          MAX_METHOD_IDX + 1\n        }`,\n    );\n    error.KNOWN_RECORDER_ERROR = true;\n    throw error;\n  }\n}\n","import { IParserConfig } from \"@chevrotain/types\";\nimport { has } from \"lodash-es\";\nimport { timer } from \"@chevrotain/utils\";\nimport { MixedInParser } from \"./parser_traits.js\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser.js\";\n\n/**\n * Trait responsible for runtime parsing errors.\n */\nexport class PerformanceTracer {\n  traceInitPerf: boolean | number;\n  traceInitMaxIdent: number;\n  traceInitIndent: number;\n\n  initPerformanceTracer(config: IParserConfig) {\n    if (has(config, \"traceInitPerf\")) {\n      const userTraceInitPerf = config.traceInitPerf;\n      const traceIsNumber = typeof userTraceInitPerf === \"number\";\n      this.traceInitMaxIdent = traceIsNumber\n        ? <number>userTraceInitPerf\n        : Infinity;\n      this.traceInitPerf = traceIsNumber\n        ? userTraceInitPerf > 0\n        : (userTraceInitPerf as boolean); // assumes end user provides the correct config value/type\n    } else {\n      this.traceInitMaxIdent = 0;\n      this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf;\n    }\n\n    this.traceInitIndent = -1;\n  }\n\n  TRACE_INIT<T>(this: MixedInParser, phaseDesc: string, phaseImpl: () => T): T {\n    // No need to optimize this using NOOP pattern because\n    // It is not called in a hot spot...\n    if (this.traceInitPerf === true) {\n      this.traceInitIndent++;\n      const indent = new Array(this.traceInitIndent + 1).join(\"\\t\");\n      if (this.traceInitIndent < this.traceInitMaxIdent) {\n        console.log(`${indent}--> <${phaseDesc}>`);\n      }\n      const { time, value } = timer(phaseImpl);\n      /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n      const traceMethod = time > 10 ? console.warn : console.log;\n      if (this.traceInitIndent < this.traceInitMaxIdent) {\n        traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`);\n      }\n      this.traceInitIndent--;\n      return value;\n    } else {\n      return phaseImpl();\n    }\n  }\n}\n","export function applyMixins(derivedCtor: any, baseCtors: any[]) {\n  baseCtors.forEach((baseCtor) => {\n    const baseProto = baseCtor.prototype;\n    Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n      if (propName === \"constructor\") {\n        return;\n      }\n\n      const basePropDescriptor = Object.getOwnPropertyDescriptor(\n        baseProto,\n        propName,\n      );\n      // Handle Accessors\n      if (\n        basePropDescriptor &&\n        (basePropDescriptor.get || basePropDescriptor.set)\n      ) {\n        Object.defineProperty(\n          derivedCtor.prototype,\n          propName,\n          basePropDescriptor,\n        );\n      } else {\n        derivedCtor.prototype[propName] = baseCtor.prototype[propName];\n      }\n    });\n  });\n}\n","import { 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 {\n  defaultGrammarValidatorErrorProvider,\n  defaultParserErrorProvider,\n} from \"../errors_public.js\";\nimport {\n  resolveGrammar,\n  validateGrammar,\n} from \"../grammar/gast/gast_resolver_public.js\";\nimport {\n  CstNode,\n  IParserConfig,\n  IRecognitionException,\n  IRuleConfig,\n  IToken,\n  TokenType,\n  TokenVocabulary,\n} from \"@chevrotain/types\";\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\";\n\nimport { ErrorHandler } from \"./traits/error_handler.js\";\nimport { MixedInParser } from \"./traits/parser_traits.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 { IParserDefinitionError } from \"../grammar/types.js\";\nimport { Rule } from \"@chevrotain/gast\";\nimport { IParserConfigInternal, ParserMethodInternal } from \"./types.js\";\nimport { validateLookahead } from \"../grammar/checks.js\";\n\nexport const END_OF_FILE = createTokenInstance(\n  EOF,\n  \"\",\n  NaN,\n  NaN,\n  NaN,\n  NaN,\n  NaN,\n  NaN,\n);\nObject.freeze(END_OF_FILE);\n\nexport type TokenMatcher = (token: IToken, tokType: TokenType) => boolean;\n\nexport const DEFAULT_PARSER_CONFIG: Required<\n  Omit<IParserConfigInternal, \"lookaheadStrategy\">\n> = Object.freeze({\n  recoveryEnabled: false,\n  maxLookahead: 3,\n  dynamicTokensEnabled: false,\n  outputCst: true,\n  errorMessageProvider: defaultParserErrorProvider,\n  nodeLocationTracking: \"none\",\n  traceInitPerf: false,\n  skipValidations: false,\n});\n\nexport const DEFAULT_RULE_CONFIG: Required<IRuleConfig<any>> = Object.freeze({\n  recoveryValueFunc: () => undefined,\n  resyncEnabled: true,\n});\n\nexport enum ParserDefinitionErrorType {\n  INVALID_RULE_NAME = 0,\n  DUPLICATE_RULE_NAME = 1,\n  INVALID_RULE_OVERRIDE = 2,\n  DUPLICATE_PRODUCTIONS = 3,\n  UNRESOLVED_SUBRULE_REF = 4,\n  LEFT_RECURSION = 5,\n  NONE_LAST_EMPTY_ALT = 6,\n  AMBIGUOUS_ALTS = 7,\n  CONFLICT_TOKENS_RULES_NAMESPACE = 8,\n  INVALID_TOKEN_NAME = 9,\n  NO_NON_EMPTY_LOOKAHEAD = 10,\n  AMBIGUOUS_PREFIX_ALTS = 11,\n  TOO_MANY_ALTS = 12,\n  CUSTOM_LOOKAHEAD_VALIDATION = 13,\n}\n\nexport interface IParserDuplicatesDefinitionError\n  extends IParserDefinitionError {\n  dslName: string;\n  occurrence: number;\n  parameter?: string;\n}\n\nexport interface IParserEmptyAlternativeDefinitionError\n  extends IParserDefinitionError {\n  occurrence: number;\n  alternative: number;\n}\n\nexport interface IParserAmbiguousAlternativesDefinitionError\n  extends IParserDefinitionError {\n  occurrence: number | string;\n  alternatives: number[];\n}\n\nexport interface IParserUnresolvedRefDefinitionError\n  extends IParserDefinitionError {\n  unresolvedRefName: string;\n}\n\nexport interface IParserState {\n  errors: IRecognitionException[];\n  lexerState: any;\n  RULE_STACK: number[];\n  CST_STACK: CstNode[];\n}\n\nexport type Predicate = () => boolean;\n\nexport function EMPTY_ALT(): () => undefined;\nexport function EMPTY_ALT<T>(value: T): () => T;\nexport function EMPTY_ALT(value: any = undefined) {\n  return function () {\n    return value;\n  };\n}\n\nexport class Parser {\n  // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n  // (normally during the parser's constructor).\n  // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n  // for example: duplicate rule names, referencing an unresolved subrule, ect...\n  // This flag should not be enabled during normal usage, it is used in special situations, for example when\n  // needing to display the parser definition errors in some GUI(online playground).\n  static DEFER_DEFINITION_ERRORS_HANDLING: boolean = false;\n\n  /**\n   *  @deprecated use the **instance** method with the same name instead\n   */\n  static performSelfAnalysis(parserInstance: Parser): void {\n    throw Error(\n      \"The **static** `performSelfAnalysis` method has been deprecated.\" +\n        \"\\t\\nUse the **instance** method with the same name instead.\",\n    );\n  }\n\n  public performSelfAnalysis(this: MixedInParser): void {\n    this.TRACE_INIT(\"performSelfAnalysis\", () => {\n      let defErrorsMsgs;\n\n      this.selfAnalysisDone = true;\n      const className = this.className;\n\n      this.TRACE_INIT(\"toFastProps\", () => {\n        // Without this voodoo magic the parser would be x3-x4 slower\n        // It seems it is better to invoke `toFastProperties` **before**\n        // Any manipulations of the `this` object done during the recording phase.\n        toFastProperties(this);\n      });\n\n      this.TRACE_INIT(\"Grammar Recording\", () => {\n        try {\n          this.enableRecording();\n          // Building the GAST\n          forEach(this.definedRulesNames, (currRuleName) => {\n            const wrappedRule = (this as any)[\n              currRuleName\n            ] as ParserMethodInternal<unknown[], unknown>;\n            const originalGrammarAction = wrappedRule[\"originalGrammarAction\"];\n            let recordedRuleGast!: Rule;\n            this.TRACE_INIT(`${currRuleName} Rule`, () => {\n              recordedRuleGast = this.topLevelRuleRecord(\n                currRuleName,\n                originalGrammarAction,\n              );\n            });\n            this.gastProductionsCache[currRuleName] = recordedRuleGast;\n          });\n        } finally {\n          this.disableRecording();\n        }\n      });\n\n      let resolverErrors: IParserDefinitionError[] = [];\n      this.TRACE_INIT(\"Grammar Resolving\", () => {\n        resolverErrors = resolveGrammar({\n          rules: values(this.gastProductionsCache),\n        });\n        this.definitionErrors = this.definitionErrors.concat(resolverErrors);\n      });\n\n      this.TRACE_INIT(\"Grammar Validations\", () => {\n        // only perform additional grammar validations IFF no resolving errors have occurred.\n        // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.\n        if (isEmpty(resolverErrors) && this.skipValidations === false) {\n          const validationErrors = validateGrammar({\n            rules: values(this.gastProductionsCache),\n            tokenTypes: values(this.tokensMap),\n            errMsgProvider: defaultGrammarValidatorErrorProvider,\n            grammarName: className,\n          });\n          const lookaheadValidationErrors = validateLookahead({\n            lookaheadStrategy: this.lookaheadStrategy,\n            rules: values(this.gastProductionsCache),\n            tokenTypes: values(this.tokensMap),\n            grammarName: className,\n          });\n          this.definitionErrors = this.definitionErrors.concat(\n            validationErrors,\n            lookaheadValidationErrors,\n          );\n        }\n      });\n\n      // this analysis may fail if the grammar is not perfectly valid\n      if (isEmpty(this.definitionErrors)) {\n        // The results of these computations are not needed unless error recovery is enabled.\n        if (this.recoveryEnabled) {\n          this.TRACE_INIT(\"computeAllProdsFollows\", () => {\n            const allFollows = computeAllProdsFollows(\n              values(this.gastProductionsCache),\n            );\n            this.resyncFollows = allFollows;\n          });\n        }\n\n        this.TRACE_INIT(\"ComputeLookaheadFunctions\", () => {\n          this.lookaheadStrategy.initialize?.({\n            rules: values(this.gastProductionsCache),\n          });\n          this.preComputeLookaheadFunctions(values(this.gastProductionsCache));\n        });\n      }\n\n      if (\n        !Parser.DEFER_DEFINITION_ERRORS_HANDLING &&\n        !isEmpty(this.definitionErrors)\n      ) {\n        defErrorsMsgs = map(\n          this.definitionErrors,\n          (defError) => defError.message,\n        );\n        throw new Error(\n          `Parser Definition Errors detected:\\n ${defErrorsMsgs.join(\n            \"\\n-------------------------------\\n\",\n          )}`,\n        );\n      }\n    });\n  }\n\n  definitionErrors: IParserDefinitionError[] = [];\n  selfAnalysisDone = false;\n  protected skipValidations: boolean;\n\n  constructor(tokenVocabulary: TokenVocabulary, config: IParserConfig) {\n    const that: MixedInParser = this as any;\n    that.initErrorHandler(config);\n    that.initLexerAdapter();\n    that.initLooksAhead(config);\n    that.initRecognizerEngine(tokenVocabulary, config);\n    that.initRecoverable(config);\n    that.initTreeBuilder(config);\n    that.initContentAssist();\n    that.initGastRecorder(config);\n    that.initPerformanceTracer(config);\n\n    if (has(config, \"ignoredIssues\")) {\n      throw new Error(\n        \"The <ignoredIssues> IParserConfig property has been deprecated.\\n\\t\" +\n          \"Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\\n\\t\" +\n          \"See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\\t\" +\n          \"For further details.\",\n      );\n    }\n\n    this.skipValidations = has(config, \"skipValidations\")\n      ? (config.skipValidations as boolean) // casting assumes the end user passing the correct type\n      : DEFAULT_PARSER_CONFIG.skipValidations;\n  }\n}\n\napplyMixins(Parser, [\n  Recoverable,\n  LooksAhead,\n  TreeBuilder,\n  LexerAdapter,\n  RecognizerEngine,\n  RecognizerApi,\n  ErrorHandler,\n  ContentAssist,\n  GastRecorder,\n  PerformanceTracer,\n]);\n\nexport class CstParser extends Parser {\n  constructor(\n    tokenVocabulary: TokenVocabulary,\n    config: IParserConfigInternal = DEFAULT_PARSER_CONFIG,\n  ) {\n    const configClone = clone(config);\n    configClone.outputCst = true;\n    super(tokenVocabulary, configClone);\n  }\n}\n\nexport class EmbeddedActionsParser extends Parser {\n  constructor(\n    tokenVocabulary: TokenVocabulary,\n    config: IParserConfigInternal = DEFAULT_PARSER_CONFIG,\n  ) {\n    const configClone = clone(config);\n    configClone.outputCst = false;\n    super(tokenVocabulary, configClone);\n  }\n}\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport map from \"lodash-es/map.js\"\r\nimport filter from \"lodash-es/filter.js\"\r\nimport {\r\n    IProduction,\r\n    IProductionWithOccurrence,\r\n    TokenType,\r\n    Alternation,\r\n    NonTerminal,\r\n    Rule,\r\n    Option,\r\n    RepetitionMandatory,\r\n    Repetition,\r\n    Terminal,\r\n    Alternative,\r\n    RepetitionWithSeparator,\r\n    RepetitionMandatoryWithSeparator,\r\n    LookaheadProductionType\r\n} from \"chevrotain\"\r\n\r\nexport function buildATNKey(rule: Rule, type: LookaheadProductionType, occurrence: number): string {\r\n    return `${rule.name}_${type}_${occurrence}`;\r\n}\r\n\r\nexport interface ATN {\r\n    decisionMap: Record<string, DecisionState>\r\n    states: ATNState[]\r\n    decisionStates: DecisionState[]\r\n    ruleToStartState: Map<Rule, RuleStartState>\r\n    ruleToStopState: Map<Rule, RuleStopState>\r\n}\r\n\r\nexport const ATN_INVALID_TYPE = 0\r\nexport const ATN_BASIC = 1\r\nexport const ATN_RULE_START = 2\r\nexport const ATN_PLUS_BLOCK_START = 4\r\nexport const ATN_STAR_BLOCK_START = 5\r\n// Currently unused as the ATN is not used for lexing\r\nexport const ATN_TOKEN_START = 6\r\nexport const ATN_RULE_STOP = 7\r\nexport const ATN_BLOCK_END = 8\r\nexport const ATN_STAR_LOOP_BACK = 9\r\nexport const ATN_STAR_LOOP_ENTRY = 10\r\nexport const ATN_PLUS_LOOP_BACK = 11\r\nexport const ATN_LOOP_END = 12\r\n\r\nexport type ATNState =\r\n    | BasicState\r\n    | BasicBlockStartState\r\n    | PlusBlockStartState\r\n    | PlusLoopbackState\r\n    | StarBlockStartState\r\n    | StarLoopbackState\r\n    | StarLoopEntryState\r\n    | BlockEndState\r\n    | RuleStartState\r\n    | RuleStopState\r\n    | LoopEndState\r\n\r\nexport interface ATNBaseState {\r\n    atn: ATN\r\n    production: IProductionWithOccurrence\r\n    stateNumber: number\r\n    rule: Rule\r\n    epsilonOnlyTransitions: boolean\r\n    transitions: Transition[]\r\n    nextTokenWithinRule: number[]\r\n}\r\n\r\nexport interface BasicState extends ATNBaseState {\r\n    type: typeof ATN_BASIC\r\n}\r\n\r\nexport interface BlockStartState extends DecisionState {\r\n    end: BlockEndState\r\n}\r\n\r\nexport interface BasicBlockStartState extends BlockStartState {\r\n    type: typeof ATN_BASIC\r\n}\r\n\r\nexport interface PlusBlockStartState extends BlockStartState {\r\n    loopback: PlusLoopbackState\r\n    type: typeof ATN_PLUS_BLOCK_START\r\n}\r\n\r\nexport interface PlusLoopbackState extends DecisionState {\r\n    type: typeof ATN_PLUS_LOOP_BACK\r\n}\r\n\r\nexport interface StarBlockStartState extends BlockStartState {\r\n    type: typeof ATN_STAR_BLOCK_START\r\n}\r\n\r\nexport interface StarLoopbackState extends ATNBaseState {\r\n    type: typeof ATN_STAR_LOOP_BACK\r\n}\r\n\r\nexport interface StarLoopEntryState extends DecisionState {\r\n    loopback: StarLoopbackState\r\n    type: typeof ATN_STAR_LOOP_ENTRY\r\n}\r\n\r\nexport interface BlockEndState extends ATNBaseState {\r\n    start: BlockStartState\r\n    type: typeof ATN_BLOCK_END\r\n}\r\n\r\nexport interface DecisionState extends ATNBaseState {\r\n    decision: number\r\n}\r\n\r\nexport interface LoopEndState extends ATNBaseState {\r\n    loopback: ATNState\r\n    type: typeof ATN_LOOP_END\r\n}\r\n\r\nexport interface RuleStartState extends ATNBaseState {\r\n    stop: RuleStopState\r\n    type: typeof ATN_RULE_START\r\n}\r\n\r\nexport interface RuleStopState extends ATNBaseState {\r\n    type: typeof ATN_RULE_STOP\r\n}\r\n\r\nexport interface Transition {\r\n    target: ATNState\r\n    isEpsilon(): boolean\r\n}\r\n\r\nexport abstract class AbstractTransition implements Transition {\r\n    target: ATNState\r\n\r\n    constructor(target: ATNState) {\r\n        this.target = target\r\n    }\r\n\r\n    isEpsilon() {\r\n        return false\r\n    }\r\n}\r\n\r\nexport class AtomTransition extends AbstractTransition {\r\n    tokenType: TokenType\r\n\r\n    constructor(target: ATNState, tokenType: TokenType) {\r\n        super(target)\r\n        this.tokenType = tokenType\r\n    }\r\n}\r\n\r\nexport class EpsilonTransition extends AbstractTransition {\r\n    constructor(target: ATNState) {\r\n        super(target)\r\n    }\r\n\r\n    isEpsilon() {\r\n        return true\r\n    }\r\n}\r\n\r\nexport class RuleTransition extends AbstractTransition {\r\n    rule: Rule\r\n    followState: ATNState\r\n\r\n    constructor(ruleStart: RuleStartState, rule: Rule, followState: ATNState) {\r\n        super(ruleStart)\r\n        this.rule = rule\r\n        this.followState = followState\r\n    }\r\n\r\n    isEpsilon() {\r\n        return true\r\n    }\r\n}\r\n\r\ninterface ATNHandle {\r\n    left: ATNState\r\n    right: ATNState\r\n}\r\n\r\nexport function createATN(rules: Rule[]): ATN {\r\n    const atn: ATN = {\r\n        decisionMap: {},\r\n        decisionStates: [],\r\n        ruleToStartState: new Map(),\r\n        ruleToStopState: new Map(),\r\n        states: []\r\n    }\r\n    createRuleStartAndStopATNStates(atn, rules)\r\n    const ruleLength = rules.length\r\n    for (let i = 0; i < ruleLength; i++) {\r\n        const rule = rules[i]\r\n        const ruleBlock = block(atn, rule, rule)\r\n        if (ruleBlock === undefined) {\r\n            continue\r\n        }\r\n        buildRuleHandle(atn, rule, ruleBlock)\r\n    }\r\n    return atn\r\n}\r\n\r\nfunction createRuleStartAndStopATNStates(atn: ATN, rules: Rule[]): void {\r\n    const ruleLength = rules.length\r\n    for (let i = 0; i < ruleLength; i++) {\r\n        const rule = rules[i]\r\n        const start = newState<RuleStartState>(atn, rule, undefined, {\r\n            type: ATN_RULE_START\r\n        })\r\n        const stop = newState<RuleStopState>(atn, rule, undefined, {\r\n            type: ATN_RULE_STOP\r\n        })\r\n        start.stop = stop\r\n        atn.ruleToStartState.set(rule, start)\r\n        atn.ruleToStopState.set(rule, stop)\r\n    }\r\n}\r\n\r\nfunction atom(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    production: IProduction\r\n): ATNHandle | undefined {\r\n    if (production instanceof Terminal) {\r\n        return tokenRef(atn, rule, production.terminalType, production)\r\n    } else if (production instanceof NonTerminal) {\r\n        return ruleRef(atn, rule, production)\r\n    } else if (production instanceof Alternation) {\r\n        return alternation(atn, rule, production)\r\n    } else if (production instanceof Option) {\r\n        return option(atn, rule, production)\r\n    } else if (production instanceof Repetition) {\r\n        return repetition(atn, rule, production)\r\n    } else if (production instanceof RepetitionWithSeparator) {\r\n        return repetitionSep(atn, rule, production)\r\n    } else if (production instanceof RepetitionMandatory) {\r\n        return repetitionMandatory(atn, rule, production)\r\n    } else if (production instanceof RepetitionMandatoryWithSeparator) {\r\n        return repetitionMandatorySep(atn, rule, production)\r\n    } else {\r\n        return block(atn, rule, production as Alternative)\r\n    }\r\n}\r\n\r\nfunction repetition(atn: ATN, rule: Rule, repetition: Repetition): ATNHandle {\r\n    const starState = newState<StarBlockStartState>(atn, rule, repetition, {\r\n        type: ATN_STAR_BLOCK_START\r\n    })\r\n    defineDecisionState(atn, starState)\r\n    const handle = makeAlts(\r\n        atn,\r\n        rule,\r\n        starState,\r\n        repetition,\r\n        block(atn, rule, repetition)\r\n    )\r\n    return star(atn, rule, repetition, handle)\r\n}\r\n\r\nfunction repetitionSep(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    repetition: RepetitionWithSeparator\r\n): ATNHandle {\r\n    const starState = newState<StarBlockStartState>(atn, rule, repetition, {\r\n        type: ATN_STAR_BLOCK_START\r\n    })\r\n    defineDecisionState(atn, starState)\r\n    const handle = makeAlts(\r\n        atn,\r\n        rule,\r\n        starState,\r\n        repetition,\r\n        block(atn, rule, repetition)\r\n    )\r\n    const sep = tokenRef(atn, rule, repetition.separator, repetition)\r\n    return star(atn, rule, repetition, handle, sep)\r\n}\r\n\r\nfunction repetitionMandatory(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    repetition: RepetitionMandatory\r\n): ATNHandle {\r\n    const plusState = newState<PlusBlockStartState>(atn, rule, repetition, {\r\n        type: ATN_PLUS_BLOCK_START\r\n    })\r\n    defineDecisionState(atn, plusState)\r\n    const handle = makeAlts(\r\n        atn,\r\n        rule,\r\n        plusState,\r\n        repetition,\r\n        block(atn, rule, repetition)\r\n    )\r\n    return plus(atn, rule, repetition, handle)\r\n}\r\n\r\nfunction repetitionMandatorySep(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    repetition: RepetitionMandatoryWithSeparator\r\n): ATNHandle {\r\n    const plusState = newState<PlusBlockStartState>(atn, rule, repetition, {\r\n        type: ATN_PLUS_BLOCK_START\r\n    })\r\n    defineDecisionState(atn, plusState)\r\n    const handle = makeAlts(\r\n        atn,\r\n        rule,\r\n        plusState,\r\n        repetition,\r\n        block(atn, rule, repetition)\r\n    )\r\n    const sep = tokenRef(atn, rule, repetition.separator, repetition)\r\n    return plus(atn, rule, repetition, handle, sep)\r\n}\r\n\r\nfunction alternation(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    alternation: Alternation\r\n): ATNHandle {\r\n    const start = newState<BasicBlockStartState>(atn, rule, alternation, {\r\n        type: ATN_BASIC\r\n    })\r\n    defineDecisionState(atn, start)\r\n    const alts = map(alternation.definition, (e) => atom(atn, rule, e))\r\n    const handle = makeAlts(atn, rule, start, alternation, ...alts)\r\n    return handle\r\n}\r\n\r\nfunction option(atn: ATN, rule: Rule, option: Option): ATNHandle {\r\n    const start = newState<BasicBlockStartState>(atn, rule, option, {\r\n        type: ATN_BASIC\r\n    })\r\n    defineDecisionState(atn, start)\r\n    const handle = makeAlts(atn, rule, start, option, block(atn, rule, option))\r\n    return optional(atn, rule, option, handle)\r\n}\r\n\r\nfunction block(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    block: { definition: IProduction[] }\r\n): ATNHandle | undefined {\r\n    const handles = filter(\r\n        map(block.definition, (e) => atom(atn, rule, e)),\r\n        (e) => e !== undefined\r\n    ) as ATNHandle[]\r\n    if (handles.length === 1) {\r\n        return handles[0]\r\n    } else if (handles.length === 0) {\r\n        return undefined\r\n    } else {\r\n        return makeBlock(atn, handles)\r\n    }\r\n}\r\n\r\nfunction plus(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    plus: IProductionWithOccurrence,\r\n    handle: ATNHandle,\r\n    sep?: ATNHandle\r\n): ATNHandle {\r\n    const blkStart = handle.left as PlusBlockStartState\r\n    const blkEnd = handle.right\r\n\r\n    const loop = newState<PlusLoopbackState>(atn, rule, plus, {\r\n        type: ATN_PLUS_LOOP_BACK\r\n    })\r\n    defineDecisionState(atn, loop)\r\n    const end = newState<LoopEndState>(atn, rule, plus, {\r\n        type: ATN_LOOP_END\r\n    })\r\n    blkStart.loopback = loop\r\n    end.loopback = loop\r\n    atn.decisionMap[buildATNKey(rule, sep ? 'RepetitionMandatoryWithSeparator' : 'RepetitionMandatory', plus.idx)] = loop;\r\n    epsilon(blkEnd, loop) // block can see loop back\r\n\r\n    // Depending on whether we have a separator we put the exit transition at index 1 or 0\r\n    // This influences the chosen option in the lookahead DFA\r\n    if (sep === undefined) {\r\n        epsilon(loop, blkStart) // loop back to start\r\n        epsilon(loop, end) // exit\r\n    } else {\r\n        epsilon(loop, end) // exit\r\n        // loop back to start with separator\r\n        epsilon(loop, sep.left)\r\n        epsilon(sep.right, blkStart)\r\n    }\r\n\r\n    return {\r\n        left: blkStart,\r\n        right: end\r\n    }\r\n}\r\n\r\nfunction star(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    star: IProductionWithOccurrence,\r\n    handle: ATNHandle,\r\n    sep?: ATNHandle\r\n): ATNHandle {\r\n    const start = handle.left\r\n    const end = handle.right\r\n\r\n    const entry = newState<StarLoopEntryState>(atn, rule, star, {\r\n        type: ATN_STAR_LOOP_ENTRY\r\n    })\r\n    defineDecisionState(atn, entry)\r\n    const loopEnd = newState<LoopEndState>(atn, rule, star, {\r\n        type: ATN_LOOP_END\r\n    })\r\n    const loop = newState<StarLoopbackState>(atn, rule, star, {\r\n        type: ATN_STAR_LOOP_BACK\r\n    })\r\n    entry.loopback = loop\r\n    loopEnd.loopback = loop\r\n\r\n    epsilon(entry, start) // loop enter edge (alt 2)\r\n    epsilon(entry, loopEnd) // bypass loop edge (alt 1)\r\n    epsilon(end, loop) // block end hits loop back\r\n\r\n    if (sep !== undefined) {\r\n        epsilon(loop, loopEnd) // end loop\r\n        // loop back to start of handle using separator\r\n        epsilon(loop, sep.left)\r\n        epsilon(sep.right, start)\r\n    } else {\r\n        epsilon(loop, entry) // loop back to entry/exit decision\r\n    }\r\n\r\n    atn.decisionMap[buildATNKey(rule, sep ? 'RepetitionWithSeparator' : 'Repetition', star.idx)] = entry;\r\n    return {\r\n        left: entry,\r\n        right: loopEnd\r\n    }\r\n}\r\n\r\nfunction optional(atn: ATN, rule: Rule, optional: Option, handle: ATNHandle): ATNHandle {\r\n    const start = handle.left as DecisionState\r\n    const end = handle.right\r\n\r\n    epsilon(start, end)\r\n\r\n    atn.decisionMap[buildATNKey(rule, 'Option', optional.idx)] = start;\r\n    return handle\r\n}\r\n\r\nfunction defineDecisionState(atn: ATN, state: DecisionState): number {\r\n    atn.decisionStates.push(state)\r\n    state.decision = atn.decisionStates.length - 1\r\n    return state.decision\r\n}\r\n\r\nfunction makeAlts(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    start: BlockStartState,\r\n    production: IProductionWithOccurrence,\r\n    ...alts: (ATNHandle | undefined)[]\r\n): ATNHandle {\r\n    const end = newState<BlockEndState>(atn, rule, production, {\r\n        type: ATN_BLOCK_END,\r\n        start\r\n    })\r\n    start.end = end\r\n    for (const alt of alts) {\r\n        if (alt !== undefined) {\r\n            // hook alts up to decision block\r\n            epsilon(start, alt.left)\r\n            epsilon(alt.right, end)\r\n        } else {\r\n            epsilon(start, end)\r\n        }\r\n    }\r\n\r\n    const handle: ATNHandle = {\r\n        left: start as ATNState,\r\n        right: end\r\n    }\r\n    atn.decisionMap[buildATNKey(rule, getProdType(production), production.idx)] = start\r\n    return handle\r\n}\r\n\r\nfunction getProdType(production: IProduction): LookaheadProductionType {\r\n    if (production instanceof Alternation) {\r\n        return 'Alternation';\r\n    } else if (production instanceof Option) {\r\n        return 'Option';\r\n    } else if (production instanceof Repetition) {\r\n        return 'Repetition';\r\n    } else if (production instanceof RepetitionWithSeparator) {\r\n        return 'RepetitionWithSeparator';\r\n    } else if (production instanceof RepetitionMandatory) {\r\n        return 'RepetitionMandatory';\r\n    } else if (production instanceof RepetitionMandatoryWithSeparator) {\r\n        return 'RepetitionMandatoryWithSeparator';\r\n    } else {\r\n        throw new Error('Invalid production type encountered');\r\n    }\r\n}\r\n\r\nfunction makeBlock(atn: ATN, alts: ATNHandle[]): ATNHandle {\r\n    const altsLength = alts.length\r\n    for (let i = 0; i < altsLength - 1; i++) {\r\n        const handle = alts[i]\r\n        let transition: Transition | undefined\r\n        if (handle.left.transitions.length === 1) {\r\n            transition = handle.left.transitions[0]\r\n        }\r\n        const isRuleTransition = transition instanceof RuleTransition\r\n        const ruleTransition = transition as RuleTransition\r\n        const next = alts[i + 1].left\r\n        if (\r\n            handle.left.type === ATN_BASIC &&\r\n            handle.right.type === ATN_BASIC &&\r\n            transition !== undefined &&\r\n            ((isRuleTransition && ruleTransition.followState === handle.right) ||\r\n                transition.target === handle.right)\r\n        ) {\r\n            // we can avoid epsilon edge to next element\r\n            if (isRuleTransition) {\r\n                ruleTransition.followState = next\r\n            } else {\r\n                transition.target = next\r\n            }\r\n            removeState(atn, handle.right) // we skipped over this state\r\n        } else {\r\n            // need epsilon if previous block's right end node is complex\r\n            epsilon(handle.right, next)\r\n        }\r\n    }\r\n\r\n    const first = alts[0]\r\n    const last = alts[altsLength - 1]\r\n    return {\r\n        left: first.left,\r\n        right: last.right\r\n    }\r\n}\r\n\r\nfunction tokenRef(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    tokenType: TokenType,\r\n    production: IProductionWithOccurrence\r\n): ATNHandle {\r\n    const left = newState<BasicState>(atn, rule, production, {\r\n        type: ATN_BASIC\r\n    })\r\n    const right = newState<BasicState>(atn, rule, production, {\r\n        type: ATN_BASIC\r\n    })\r\n    addTransition(left, new AtomTransition(right, tokenType))\r\n    return {\r\n        left,\r\n        right\r\n    }\r\n}\r\n\r\nfunction ruleRef(\r\n    atn: ATN,\r\n    currentRule: Rule,\r\n    nonTerminal: NonTerminal\r\n): ATNHandle {\r\n    const rule = nonTerminal.referencedRule\r\n    const start = atn.ruleToStartState.get(rule)!\r\n    const left = newState<BasicBlockStartState>(atn, currentRule, nonTerminal, {\r\n        type: ATN_BASIC\r\n    })\r\n    const right = newState<BasicBlockStartState>(atn, currentRule, nonTerminal, {\r\n        type: ATN_BASIC\r\n    })\r\n\r\n    const call = new RuleTransition(start, rule, right)\r\n    addTransition(left, call)\r\n\r\n    return {\r\n        left,\r\n        right\r\n    }\r\n}\r\n\r\nfunction buildRuleHandle(atn: ATN, rule: Rule, block: ATNHandle): ATNHandle {\r\n    const start = atn.ruleToStartState.get(rule)!\r\n    epsilon(start, block.left)\r\n    const stop = atn.ruleToStopState.get(rule)!\r\n    epsilon(block.right, stop)\r\n    const handle: ATNHandle = {\r\n        left: start,\r\n        right: stop\r\n    }\r\n    return handle\r\n}\r\n\r\nfunction epsilon(a: ATNBaseState, b: ATNBaseState): void {\r\n    const transition = new EpsilonTransition(b as ATNState)\r\n    addTransition(a, transition)\r\n}\r\n\r\nfunction newState<T extends ATNState>(\r\n    atn: ATN,\r\n    rule: Rule,\r\n    production: IProductionWithOccurrence | undefined,\r\n    partial: Partial<T>\r\n): T {\r\n    const t: T = {\r\n        atn,\r\n        production,\r\n        epsilonOnlyTransitions: false,\r\n        rule,\r\n        transitions: [],\r\n        nextTokenWithinRule: [],\r\n        stateNumber: atn.states.length,\r\n        ...partial\r\n    } as unknown as T\r\n    atn.states.push(t)\r\n    return t\r\n}\r\n\r\nfunction addTransition(state: ATNBaseState, transition: Transition) {\r\n    // A single ATN state can only contain epsilon transitions or non-epsilon transitions\r\n    // Because they are never mixed, only setting the property for the first transition is fine\r\n    if (state.transitions.length === 0) {\r\n        state.epsilonOnlyTransitions = transition.isEpsilon()\r\n    }\r\n    state.transitions.push(transition)\r\n}\r\n\r\nfunction removeState(atn: ATN, state: ATNState): void {\r\n    atn.states.splice(atn.states.indexOf(state), 1)\r\n}\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport map from \"lodash-es/map.js\"\r\nimport { ATNState, DecisionState } from \"./atn.js\"\r\n\r\nexport interface DFA {\r\n  start?: DFAState\r\n  states: Record<string, DFAState>\r\n  decision: number\r\n  atnStartState: DecisionState\r\n}\r\n\r\nexport interface DFAState {\r\n  configs: ATNConfigSet\r\n  edges: Record<number, DFAState>\r\n  isAcceptState: boolean\r\n  prediction: number\r\n}\r\n\r\nexport const DFA_ERROR = {} as DFAState\r\n\r\nexport interface ATNConfig {\r\n  state: ATNState\r\n  alt: number\r\n  stack: ATNState[]\r\n}\r\n\r\nexport class ATNConfigSet {\r\n  private map: Record<string, number> = {}\r\n  private configs: ATNConfig[] = []\r\n\r\n  uniqueAlt: number | undefined\r\n\r\n  get size(): number {\r\n    return this.configs.length\r\n  }\r\n\r\n  finalize(): void {\r\n    // Empties the map to free up memory\r\n    this.map = {}\r\n  }\r\n\r\n  add(config: ATNConfig): void {\r\n    const key = getATNConfigKey(config)\r\n    // Only add configs which don't exist in our map already\r\n    // While this does not influence the actual algorithm, adding them anyway would massively increase memory consumption\r\n    if (!(key in this.map)) {\r\n      this.map[key] = this.configs.length\r\n      this.configs.push(config)\r\n    }\r\n  }\r\n\r\n  get elements(): readonly ATNConfig[] {\r\n    return this.configs\r\n  }\r\n\r\n  get alts(): number[] {\r\n    return map(this.configs, (e) => e.alt)\r\n  }\r\n\r\n  get key(): string {\r\n    let value = \"\"\r\n    for (const k in this.map) {\r\n      value += k + \":\"\r\n    }\r\n    return value\r\n  }\r\n}\r\n\r\nexport function getATNConfigKey(config: ATNConfig, alt = true) {\r\n  return `${alt ? `a${config.alt}` : \"\"}s${\r\n    config.state.stateNumber\r\n  }:${config.stack.map((e) => e.stateNumber.toString()).join(\"_\")}`\r\n}\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport {\r\n    IToken,\r\n    TokenType,\r\n    tokenMatcher,\r\n    tokenLabel,\r\n    Rule,\r\n    IProductionWithOccurrence,\r\n    NonTerminal,\r\n    Alternation,\r\n    Option,\r\n    RepetitionMandatory,\r\n    RepetitionMandatoryWithSeparator,\r\n    RepetitionWithSeparator,\r\n    Repetition,\r\n    Terminal,\r\n    BaseParser,\r\n    LLkLookaheadStrategy,\r\n    ILookaheadValidationError,\r\n    IOrAlt,\r\n    getLookaheadPaths,\r\n    OptionalProductionType\r\n} from \"chevrotain\";\r\nimport {\r\n    ATN,\r\n    ATNState,\r\n    ATN_RULE_STOP,\r\n    AtomTransition,\r\n    buildATNKey,\r\n    createATN,\r\n    DecisionState,\r\n    EpsilonTransition,\r\n    RuleTransition,\r\n    Transition\r\n} from \"./atn.js\";\r\nimport {\r\n    ATNConfig,\r\n    ATNConfigSet,\r\n    DFA,\r\n    DFAState,\r\n    DFA_ERROR,\r\n    getATNConfigKey\r\n} from \"./dfa.js\";\r\nimport min from \"lodash-es/min.js\";\r\nimport flatMap from \"lodash-es/flatMap.js\";\r\nimport uniqBy from \"lodash-es/uniqBy.js\";\r\nimport map from \"lodash-es/map.js\";\r\nimport flatten from \"lodash-es/flatten.js\";\r\nimport forEach from \"lodash-es/forEach.js\";\r\nimport isEmpty from \"lodash-es/isEmpty.js\";\r\nimport reduce from \"lodash-es/reduce.js\";\r\n\r\ntype DFACache = (predicateSet: PredicateSet) => DFA\r\n\r\nexport type AmbiguityReport = (message: string) => void;\r\n\r\nfunction createDFACache(startState: DecisionState, decision: number): DFACache {\r\n    const map: Record<string, DFA | undefined> = {}\r\n    return (predicateSet) => {\r\n        const key = predicateSet.toString()\r\n        let existing = map[key]\r\n        if (existing !== undefined) {\r\n            return existing\r\n        } else {\r\n            existing = {\r\n                atnStartState: startState,\r\n                decision,\r\n                states: {}\r\n            }\r\n            map[key] = existing\r\n            return existing\r\n        }\r\n    }\r\n}\r\n\r\nclass PredicateSet {\r\n    private predicates: boolean[] = []\r\n\r\n    is(index: number): boolean {\r\n        return index >= this.predicates.length || this.predicates[index]\r\n    }\r\n\r\n    set(index: number, value: boolean) {\r\n        this.predicates[index] = value\r\n    }\r\n\r\n    toString(): string {\r\n        let value = \"\"\r\n        const size = this.predicates.length\r\n        for (let i = 0; i < size; i++) {\r\n            value += this.predicates[i] === true ? \"1\" : \"0\"\r\n        }\r\n        return value\r\n    }\r\n}\r\n\r\ninterface AdaptivePredictError {\r\n    tokenPath: IToken[]\r\n    possibleTokenTypes: TokenType[]\r\n    actualToken: IToken\r\n}\r\n\r\nconst EMPTY_PREDICATES = new PredicateSet()\r\n\r\nexport interface LLStarLookaheadOptions {\r\n    logging?: AmbiguityReport\r\n}\r\n\r\nexport class LLStarLookaheadStrategy extends LLkLookaheadStrategy {\r\n\r\n    private atn: ATN;\r\n    private dfas: DFACache[];\r\n    private logging: AmbiguityReport;\r\n\r\n    constructor(options?: LLStarLookaheadOptions) {\r\n        super();\r\n        this.logging = options?.logging ?? ((message) => console.log(message));\r\n    }\r\n\r\n    override initialize(options: { rules: Rule[] }): void {\r\n        this.atn = createATN(options.rules);\r\n        this.dfas = initATNSimulator(this.atn);\r\n    }\r\n\r\n    override validateAmbiguousAlternationAlternatives(): ILookaheadValidationError[] {\r\n        return [];\r\n    }\r\n\r\n    override validateEmptyOrAlternatives(): ILookaheadValidationError[] {\r\n        return [];\r\n    }\r\n\r\n    override buildLookaheadForAlternation(options: {\r\n        prodOccurrence: number;\r\n        rule: Rule;\r\n        maxLookahead: number;\r\n        hasPredicates: boolean;\r\n        dynamicTokensEnabled: boolean\r\n    }): (this: BaseParser, orAlts?: IOrAlt<any>[] | undefined) => number | undefined {\r\n        const { prodOccurrence, rule, hasPredicates, dynamicTokensEnabled } = options;\r\n        const dfas = this.dfas;\r\n        const logging = this.logging;\r\n        const key = buildATNKey(rule, 'Alternation', prodOccurrence);\r\n        const decisionState = this.atn.decisionMap[key];\r\n        const decisionIndex = decisionState.decision;\r\n        const partialAlts: (TokenType | undefined)[][] = map(\r\n            getLookaheadPaths({\r\n                maxLookahead: 1,\r\n                occurrence: prodOccurrence,\r\n                prodType: \"Alternation\",\r\n                rule: rule\r\n            }),\r\n            (currAlt) => map(currAlt, (path) => path[0])\r\n        )\r\n\r\n        if (isLL1Sequence(partialAlts, false) && !dynamicTokensEnabled) {\r\n            const choiceToAlt = reduce(\r\n                partialAlts,\r\n                (result, currAlt, idx) => {\r\n                    forEach(currAlt, (currTokType) => {\r\n                        if (currTokType) {\r\n                            result[currTokType.tokenTypeIdx!] = idx\r\n                            forEach(currTokType.categoryMatches!, (currExtendingType) => {\r\n                                result[currExtendingType] = idx\r\n                            })\r\n                        }\r\n                    })\r\n                    return result\r\n                },\r\n                {} as Record<number, number>\r\n            )\r\n\r\n            if (hasPredicates) {\r\n                return function (this: BaseParser, orAlts) {\r\n                    const nextToken = this.LA(1)\r\n                    const prediction: number | undefined = choiceToAlt[nextToken.tokenTypeIdx]\r\n                    if (orAlts !== undefined && prediction !== undefined) {\r\n                        const gate = orAlts[prediction]?.GATE\r\n                        if (gate !== undefined && gate.call(this) === false) {\r\n                            return undefined;\r\n                        }\r\n                    }\r\n                    return prediction\r\n                }\r\n            } else {\r\n                return function (this: BaseParser): number | undefined {\r\n                    const nextToken = this.LA(1)\r\n                    return choiceToAlt[nextToken.tokenTypeIdx];\r\n                }\r\n            }\r\n        } else if (hasPredicates) {\r\n            return function (this: BaseParser, orAlts) {\r\n                const predicates = new PredicateSet()\r\n                const length = orAlts === undefined ? 0 : orAlts.length\r\n                for (let i = 0; i < length; i++) {\r\n                    const gate = orAlts?.[i].GATE\r\n                    predicates.set(i, gate === undefined || gate.call(this))\r\n                }\r\n                const result = adaptivePredict.call(this, dfas, decisionIndex, predicates, logging);\r\n                return typeof result === 'number' ? result : undefined;\r\n            }\r\n        } else {\r\n            return function (this: BaseParser) {\r\n                const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging);\r\n                return typeof result === 'number' ? result : undefined;\r\n            }\r\n        }\r\n    }\r\n\r\n    override buildLookaheadForOptional(options: {\r\n        prodOccurrence: number;\r\n        prodType: OptionalProductionType;\r\n        rule: Rule;\r\n        maxLookahead: number;\r\n        dynamicTokensEnabled: boolean\r\n    }): (this: BaseParser) => boolean {\r\n        const { prodOccurrence, rule, prodType, dynamicTokensEnabled } = options;\r\n        const dfas = this.dfas;\r\n        const logging = this.logging;\r\n        const key = buildATNKey(rule, prodType, prodOccurrence);\r\n        const decisionState = this.atn.decisionMap[key];\r\n        const decisionIndex = decisionState.decision;\r\n        const alts = map(\r\n            getLookaheadPaths({\r\n                maxLookahead: 1,\r\n                occurrence: prodOccurrence,\r\n                prodType,\r\n                rule\r\n            }),\r\n            (e) => {\r\n              return map(e, (g) => g[0])\r\n            }\r\n          )\r\n        \r\n          if (isLL1Sequence(alts) && alts[0][0] && !dynamicTokensEnabled) {\r\n            const alt = alts[0]\r\n            const singleTokensTypes = flatten(alt)\r\n        \r\n            if (\r\n              singleTokensTypes.length === 1 &&\r\n              isEmpty(singleTokensTypes[0].categoryMatches)\r\n            ) {\r\n              const expectedTokenType = singleTokensTypes[0]\r\n              const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx\r\n        \r\n              return function (this: BaseParser): boolean {\r\n                return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey\r\n              }\r\n            } else {\r\n              const choiceToAlt = reduce(\r\n                singleTokensTypes,\r\n                (result, currTokType) => {\r\n                  if (currTokType !== undefined) {\r\n                    result[currTokType.tokenTypeIdx!] = true\r\n                    forEach(currTokType.categoryMatches, (currExtendingType) => {\r\n                      result[currExtendingType] = true\r\n                    })\r\n                  }\r\n                  return result\r\n                },\r\n                {} as Record<number, boolean>\r\n              )\r\n        \r\n              return function (this: BaseParser): boolean {\r\n                const nextToken = this.LA(1)\r\n                return choiceToAlt[nextToken.tokenTypeIdx] === true\r\n              }\r\n            }\r\n          }\r\n          return function (this: BaseParser) {\r\n            const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging)\r\n              return typeof result === \"object\" ? false : result === 0;\r\n          }\r\n    }\r\n\r\n}\r\n\r\nfunction isLL1Sequence(sequences: (TokenType | undefined)[][], allowEmpty = true): boolean {\r\n    const fullSet = new Set<number>()\r\n\r\n    for (const alt of sequences) {\r\n        const altSet = new Set<number>()\r\n        for (const tokType of alt) {\r\n            if (tokType === undefined) {\r\n                if (allowEmpty) {\r\n                    // Epsilon production encountered\r\n                    break\r\n                } else {\r\n                    return false;\r\n                }\r\n            }\r\n            const indices = [tokType.tokenTypeIdx!].concat(tokType.categoryMatches!)\r\n            for (const index of indices) {\r\n                if (fullSet.has(index)) {\r\n                    if (!altSet.has(index)) {\r\n                        return false\r\n                    }\r\n                } else {\r\n                    fullSet.add(index)\r\n                    altSet.add(index)\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return true\r\n}\r\n\r\nfunction initATNSimulator(atn: ATN): DFACache[] {\r\n    const decisionLength = atn.decisionStates.length\r\n    const decisionToDFA: DFACache[] = Array(decisionLength)\r\n    for (let i = 0; i < decisionLength; i++) {\r\n        decisionToDFA[i] = createDFACache(atn.decisionStates[i], i)\r\n    }\r\n    return decisionToDFA;\r\n}\r\n\r\nfunction adaptivePredict(\r\n    this: BaseParser,\r\n    dfaCaches: DFACache[],\r\n    decision: number,\r\n    predicateSet: PredicateSet,\r\n    logging: AmbiguityReport\r\n): number | AdaptivePredictError {\r\n    const dfa = dfaCaches[decision](predicateSet)\r\n    let start = dfa.start\r\n    if (start === undefined) {\r\n        const closure = computeStartState(dfa.atnStartState as ATNState)\r\n        start = addDFAState(dfa, newDFAState(closure))\r\n        dfa.start = start\r\n    }\r\n\r\n    const alt = performLookahead.apply(this, [dfa, start, predicateSet, logging])\r\n    return alt\r\n}\r\n\r\nfunction performLookahead(\r\n    this: BaseParser,\r\n    dfa: DFA,\r\n    s0: DFAState,\r\n    predicateSet: PredicateSet,\r\n    logging: AmbiguityReport\r\n): number | AdaptivePredictError {\r\n    let previousD = s0\r\n\r\n    let i = 1\r\n    const path: IToken[] = []\r\n    let t = this.LA(i++)\r\n\r\n    while (true) {\r\n        let d = getExistingTargetState(previousD, t)\r\n        if (d === undefined) {\r\n            d = computeLookaheadTarget.apply(this, [dfa, previousD, t, i, predicateSet, logging])\r\n        }\r\n\r\n        if (d === DFA_ERROR) {\r\n            return buildAdaptivePredictError(path, previousD, t)\r\n        }\r\n\r\n        if (d.isAcceptState === true) {\r\n            return d.prediction\r\n        }\r\n\r\n        previousD = d\r\n        path.push(t)\r\n        t = this.LA(i++)\r\n    }\r\n}\r\n\r\nfunction computeLookaheadTarget(\r\n    this: BaseParser,\r\n    dfa: DFA,\r\n    previousD: DFAState,\r\n    token: IToken,\r\n    lookahead: number,\r\n    predicateSet: PredicateSet,\r\n    logging: AmbiguityReport\r\n): DFAState {\r\n    const reach = computeReachSet(previousD.configs, token, predicateSet)\r\n    if (reach.size === 0) {\r\n        addDFAEdge(dfa, previousD, token, DFA_ERROR)\r\n        return DFA_ERROR\r\n    }\r\n\r\n    let newState = newDFAState(reach)\r\n    const predictedAlt = getUniqueAlt(reach, predicateSet)\r\n\r\n    if (predictedAlt !== undefined) {\r\n        newState.isAcceptState = true\r\n        newState.prediction = predictedAlt\r\n        newState.configs.uniqueAlt = predictedAlt\r\n    } else if (hasConflictTerminatingPrediction(reach)) {\r\n        const prediction = min(reach.alts)!\r\n        newState.isAcceptState = true\r\n        newState.prediction = prediction\r\n        newState.configs.uniqueAlt = prediction\r\n        reportLookaheadAmbiguity.apply(this, [dfa, lookahead, reach.alts, logging])\r\n    }\r\n\r\n    newState = addDFAEdge(dfa, previousD, token, newState)\r\n    return newState\r\n}\r\n\r\nfunction reportLookaheadAmbiguity(\r\n    this: BaseParser,\r\n    dfa: DFA,\r\n    lookahead: number,\r\n    ambiguityIndices: number[],\r\n    logging: AmbiguityReport\r\n) {\r\n    const prefixPath: TokenType[] = []\r\n    for (let i = 1; i <= lookahead; i++) {\r\n        prefixPath.push(this.LA(i).tokenType)\r\n    }\r\n    const atnState = dfa.atnStartState\r\n    const topLevelRule = atnState.rule\r\n    const production = atnState.production\r\n    const message = buildAmbiguityError({\r\n        topLevelRule,\r\n        ambiguityIndices,\r\n        production,\r\n        prefixPath\r\n    })\r\n    logging(message)\r\n}\r\n\r\nfunction buildAmbiguityError(options: {\r\n    topLevelRule: Rule\r\n    prefixPath: TokenType[]\r\n    ambiguityIndices: number[]\r\n    production: IProductionWithOccurrence\r\n}): string {\r\n    const pathMsg = map(options.prefixPath, (currtok) =>\r\n        tokenLabel(currtok)\r\n    ).join(\", \")\r\n    const occurrence =\r\n        options.production.idx === 0 ? \"\" : options.production.idx\r\n    let currMessage =\r\n        `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\r\n            \", \"\r\n        )}> in <${getProductionDslName(options.production)}${occurrence}>` +\r\n        ` inside <${options.topLevelRule.name}> Rule,\\n` +\r\n        `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`\r\n\r\n    currMessage =\r\n        currMessage +\r\n        `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\r\n        `For Further details.`\r\n    return currMessage\r\n}\r\n\r\nfunction getProductionDslName(prod: IProductionWithOccurrence): string {\r\n    if (prod instanceof NonTerminal) {\r\n        return \"SUBRULE\"\r\n    } else if (prod instanceof Option) {\r\n        return \"OPTION\"\r\n    } else if (prod instanceof Alternation) {\r\n        return \"OR\"\r\n    } else if (prod instanceof RepetitionMandatory) {\r\n        return \"AT_LEAST_ONE\"\r\n    } else if (prod instanceof RepetitionMandatoryWithSeparator) {\r\n        return \"AT_LEAST_ONE_SEP\"\r\n    } else if (prod instanceof RepetitionWithSeparator) {\r\n        return \"MANY_SEP\"\r\n    } else if (prod instanceof Repetition) {\r\n        return \"MANY\"\r\n    } else if (prod instanceof Terminal) {\r\n        return \"CONSUME\"\r\n    } else {\r\n        throw Error(\"non exhaustive match\")\r\n    }\r\n}\r\n\r\nfunction buildAdaptivePredictError(\r\n    path: IToken[],\r\n    previous: DFAState,\r\n    current: IToken\r\n): AdaptivePredictError {\r\n    const nextTransitions = flatMap(\r\n        previous.configs.elements,\r\n        (e) => e.state.transitions\r\n    )\r\n    const nextTokenTypes = uniqBy(\r\n        nextTransitions\r\n            .filter((e): e is AtomTransition => e instanceof AtomTransition)\r\n            .map((e) => e.tokenType),\r\n        (e) => e.tokenTypeIdx\r\n    )\r\n    return {\r\n        actualToken: current,\r\n        possibleTokenTypes: nextTokenTypes,\r\n        tokenPath: path\r\n    }\r\n}\r\n\r\nfunction getExistingTargetState(\r\n    state: DFAState,\r\n    token: IToken\r\n): DFAState | undefined {\r\n    return state.edges[token.tokenTypeIdx]\r\n}\r\n\r\nfunction computeReachSet(\r\n    configs: ATNConfigSet,\r\n    token: IToken,\r\n    predicateSet: PredicateSet\r\n): ATNConfigSet {\r\n    const intermediate = new ATNConfigSet()\r\n    const skippedStopStates: ATNConfig[] = []\r\n\r\n    for (const c of configs.elements) {\r\n        if (predicateSet.is(c.alt) === false) {\r\n            continue\r\n        }\r\n        if (c.state.type === ATN_RULE_STOP) {\r\n            skippedStopStates.push(c)\r\n            continue\r\n        }\r\n        const transitionLength = c.state.transitions.length\r\n        for (let i = 0; i < transitionLength; i++) {\r\n            const transition = c.state.transitions[i]\r\n            const target = getReachableTarget(transition, token)\r\n            if (target !== undefined) {\r\n                intermediate.add({\r\n                    state: target,\r\n                    alt: c.alt,\r\n                    stack: c.stack\r\n                })\r\n            }\r\n        }\r\n    }\r\n\r\n    let reach: ATNConfigSet | undefined\r\n\r\n    if (skippedStopStates.length === 0 && intermediate.size === 1) {\r\n        reach = intermediate\r\n    }\r\n\r\n    if (reach === undefined) {\r\n        reach = new ATNConfigSet()\r\n        for (const c of intermediate.elements) {\r\n            closure(c, reach)\r\n        }\r\n    }\r\n\r\n    if (skippedStopStates.length > 0 && !hasConfigInRuleStopState(reach)) {\r\n        for (const c of skippedStopStates) {\r\n            reach.add(c)\r\n        }\r\n    }\r\n\r\n    return reach\r\n}\r\n\r\nfunction getReachableTarget(\r\n    transition: Transition,\r\n    token: IToken\r\n): ATNState | undefined {\r\n    if (\r\n        transition instanceof AtomTransition &&\r\n        tokenMatcher(token, transition.tokenType)\r\n    ) {\r\n        return transition.target\r\n    }\r\n    return undefined\r\n}\r\n\r\nfunction getUniqueAlt(\r\n    configs: ATNConfigSet,\r\n    predicateSet: PredicateSet\r\n): number | undefined {\r\n    let alt: number | undefined\r\n    for (const c of configs.elements) {\r\n        if (predicateSet.is(c.alt) === true) {\r\n            if (alt === undefined) {\r\n                alt = c.alt\r\n            } else if (alt !== c.alt) {\r\n                return undefined\r\n            }\r\n        }\r\n    }\r\n    return alt\r\n}\r\n\r\nfunction newDFAState(closure: ATNConfigSet): DFAState {\r\n    return {\r\n        configs: closure,\r\n        edges: {},\r\n        isAcceptState: false,\r\n        prediction: -1\r\n    }\r\n}\r\n\r\nfunction addDFAEdge(\r\n    dfa: DFA,\r\n    from: DFAState,\r\n    token: IToken,\r\n    to: DFAState\r\n): DFAState {\r\n    to = addDFAState(dfa, to)\r\n    from.edges[token.tokenTypeIdx] = to\r\n    return to\r\n}\r\n\r\nfunction addDFAState(dfa: DFA, state: DFAState): DFAState {\r\n    if (state === DFA_ERROR) {\r\n        return state\r\n    }\r\n    // Repetitions have the same config set\r\n    // Therefore, storing the key of the config in a map allows us to create a loop in our DFA\r\n    const mapKey = state.configs.key\r\n    const existing = dfa.states[mapKey]\r\n    if (existing !== undefined) {\r\n        return existing\r\n    }\r\n    state.configs.finalize()\r\n    dfa.states[mapKey] = state\r\n    return state\r\n}\r\n\r\nfunction computeStartState(atnState: ATNState): ATNConfigSet {\r\n    const configs = new ATNConfigSet()\r\n\r\n    const numberOfTransitions = atnState.transitions.length\r\n    for (let i = 0; i < numberOfTransitions; i++) {\r\n        const target = atnState.transitions[i].target\r\n        const config: ATNConfig = {\r\n            state: target,\r\n            alt: i,\r\n            stack: []\r\n        }\r\n        closure(config, configs)\r\n    }\r\n\r\n    return configs\r\n}\r\n\r\nfunction closure(config: ATNConfig, configs: ATNConfigSet): void {\r\n    const p = config.state\r\n\r\n    if (p.type === ATN_RULE_STOP) {\r\n        if (config.stack.length > 0) {\r\n            const atnStack = [...config.stack]\r\n            const followState = atnStack.pop()!\r\n            const followConfig: ATNConfig = {\r\n                state: followState,\r\n                alt: config.alt,\r\n                stack: atnStack\r\n            }\r\n            closure(followConfig, configs)\r\n        } else {\r\n            // Dipping into outer context, simply add the config\r\n            // This will stop computation once every config is at the rule stop state\r\n            configs.add(config)\r\n        }\r\n        return\r\n    }\r\n\r\n    if (!p.epsilonOnlyTransitions) {\r\n        configs.add(config)\r\n    }\r\n\r\n    const transitionLength = p.transitions.length\r\n    for (let i = 0; i < transitionLength; i++) {\r\n        const transition = p.transitions[i]\r\n        const c = getEpsilonTarget(config, transition)\r\n\r\n        if (c !== undefined) {\r\n            closure(c, configs)\r\n        }\r\n    }\r\n}\r\n\r\nfunction getEpsilonTarget(\r\n    config: ATNConfig,\r\n    transition: Transition\r\n): ATNConfig | undefined {\r\n    if (transition instanceof EpsilonTransition) {\r\n        return {\r\n            state: transition.target,\r\n            alt: config.alt,\r\n            stack: config.stack\r\n        }\r\n    } else if (transition instanceof RuleTransition) {\r\n        const stack = [...config.stack, transition.followState]\r\n        return {\r\n            state: transition.target,\r\n            alt: config.alt,\r\n            stack\r\n        }\r\n    }\r\n    return undefined\r\n}\r\n\r\nfunction hasConfigInRuleStopState(configs: ATNConfigSet): boolean {\r\n    for (const c of configs.elements) {\r\n        if (c.state.type === ATN_RULE_STOP) {\r\n            return true\r\n        }\r\n    }\r\n    return false\r\n}\r\n\r\nfunction allConfigsInRuleStopStates(configs: ATNConfigSet): boolean {\r\n    for (const c of configs.elements) {\r\n        if (c.state.type !== ATN_RULE_STOP) {\r\n            return false\r\n        }\r\n    }\r\n    return true\r\n}\r\n\r\nfunction hasConflictTerminatingPrediction(configs: ATNConfigSet): boolean {\r\n    if (allConfigsInRuleStopStates(configs)) {\r\n        return true\r\n    }\r\n    const altSets = getConflictingAltSets(configs.elements)\r\n    const heuristic =\r\n        hasConflictingAltSet(altSets) && !hasStateAssociatedWithOneAlt(altSets)\r\n    return heuristic\r\n}\r\n\r\nfunction getConflictingAltSets(\r\n    configs: readonly ATNConfig[]\r\n): Map<string, Record<number, boolean>> {\r\n    const configToAlts = new Map<string, Record<number, boolean>>()\r\n    for (const c of configs) {\r\n        const key = getATNConfigKey(c, false)\r\n        let alts = configToAlts.get(key)\r\n        if (alts === undefined) {\r\n            alts = {}\r\n            configToAlts.set(key, alts)\r\n        }\r\n        alts[c.alt] = true\r\n    }\r\n    return configToAlts\r\n}\r\n\r\nfunction hasConflictingAltSet(\r\n    altSets: Map<string, Record<number, boolean>>\r\n): boolean {\r\n    for (const value of Array.from(altSets.values())) {\r\n        if (Object.keys(value).length > 1) {\r\n            return true\r\n        }\r\n    }\r\n    return false\r\n}\r\n\r\nfunction hasStateAssociatedWithOneAlt(\r\n    altSets: Map<string, Record<number, boolean>>\r\n): boolean {\r\n    for (const value of Array.from(altSets.values())) {\r\n        if (Object.keys(value).length === 1) {\r\n            return true\r\n        }\r\n    }\r\n    return false\r\n}\r\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 * ------------------------------------------------------------------------------------------ */\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","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { IToken, TokenType } from 'chevrotain';\r\nimport type { Range } from 'vscode-languageserver-types';\r\nimport type { AbstractElement } from '../languages/generated/ast.js';\r\nimport type { AstNode, CompositeCstNode, CstNode, LeafCstNode, RootCstNode } from '../syntax-tree.js';\r\nimport { Position } from 'vscode-languageserver-types';\r\nimport { isCompositeCstNode } from '../syntax-tree.js';\r\nimport { tokenToRange } from '../utils/cst-utils.js';\r\n\r\nexport class CstNodeBuilder {\r\n\r\n    private rootNode!: RootCstNodeImpl;\r\n    private nodeStack: CompositeCstNodeImpl[] = [];\r\n\r\n    private get current(): CompositeCstNodeImpl {\r\n        return this.nodeStack[this.nodeStack.length - 1];\r\n    }\r\n\r\n    buildRootNode(input: string): RootCstNode {\r\n        this.rootNode = new RootCstNodeImpl(input);\r\n        this.rootNode.root = this.rootNode;\r\n        this.nodeStack = [this.rootNode];\r\n        return this.rootNode;\r\n    }\r\n\r\n    buildCompositeNode(feature: AbstractElement): CompositeCstNode {\r\n        const compositeNode = new CompositeCstNodeImpl();\r\n        compositeNode.grammarSource = feature;\r\n        compositeNode.root = this.rootNode;\r\n        this.current.content.push(compositeNode);\r\n        this.nodeStack.push(compositeNode);\r\n        return compositeNode;\r\n    }\r\n\r\n    buildLeafNode(token: IToken, feature: AbstractElement): LeafCstNode {\r\n        const leafNode = new LeafCstNodeImpl(token.startOffset, token.image.length, tokenToRange(token), token.tokenType, false);\r\n        leafNode.grammarSource = feature;\r\n        leafNode.root = this.rootNode;\r\n        this.current.content.push(leafNode);\r\n        return leafNode;\r\n    }\r\n\r\n    removeNode(node: CstNode): void {\r\n        const parent = node.container;\r\n        if (parent) {\r\n            const index = parent.content.indexOf(node);\r\n            if (index >= 0) {\r\n                parent.content.splice(index, 1);\r\n            }\r\n        }\r\n    }\r\n\r\n    construct(item: { $type: string | symbol | undefined, $cstNode: CstNode }): void {\r\n        const current: CstNode = this.current;\r\n        // The specified item could be a datatype ($type is symbol) or a fragment ($type is undefined)\r\n        // Only if the $type is a string, we actually assign the element\r\n        if (typeof item.$type === 'string') {\r\n            this.current.astNode = <AstNode>item;\r\n        }\r\n        item.$cstNode = current;\r\n        const node = this.nodeStack.pop();\r\n        // Empty composite nodes are not valid\r\n        // Simply remove the node from the tree\r\n        if (node?.content.length === 0) {\r\n            this.removeNode(node);\r\n        }\r\n    }\r\n\r\n    addHiddenTokens(hiddenTokens: IToken[]): void {\r\n        for (const token of hiddenTokens) {\r\n            const hiddenNode = new LeafCstNodeImpl(token.startOffset, token.image.length, tokenToRange(token), token.tokenType, true);\r\n            hiddenNode.root = this.rootNode;\r\n            this.addHiddenToken(this.rootNode, hiddenNode);\r\n        }\r\n    }\r\n\r\n    private addHiddenToken(node: CompositeCstNode, token: LeafCstNode): void {\r\n        const { offset: tokenStart, end: tokenEnd } = token;\r\n\r\n        for (let i = 0; i < node.content.length; i++) {\r\n            const child = node.content[i];\r\n            const { offset: childStart, end: childEnd } = child;\r\n            if (isCompositeCstNode(child) && tokenStart > childStart && tokenEnd < childEnd) {\r\n                this.addHiddenToken(child, token);\r\n                return;\r\n            } else if (tokenEnd <= childStart) {\r\n                node.content.splice(i, 0, token);\r\n                return;\r\n            }\r\n        }\r\n\r\n        // We know that we haven't found a suited position for the token\r\n        // So we simply add it to the end of the current node\r\n        node.content.push(token);\r\n    }\r\n}\r\n\r\nexport abstract class AbstractCstNode implements CstNode {\r\n    abstract get offset(): number;\r\n    abstract get length(): number;\r\n    abstract get end(): number;\r\n    abstract get range(): Range;\r\n\r\n    container?: CompositeCstNode;\r\n    grammarSource: AbstractElement;\r\n    root: RootCstNode;\r\n    private _astNode?: AstNode;\r\n\r\n    /** @deprecated use `container` instead. */\r\n    get parent(): CompositeCstNode | undefined {\r\n        return this.container;\r\n    }\r\n\r\n    /** @deprecated use `grammarSource` instead. */\r\n    get feature(): AbstractElement {\r\n        return this.grammarSource;\r\n    }\r\n\r\n    get hidden(): boolean {\r\n        return false;\r\n    }\r\n\r\n    get astNode(): AstNode {\r\n        const node = typeof this._astNode?.$type === 'string' ? this._astNode : this.container?.astNode;\r\n        if (!node) {\r\n            throw new Error('This node has no associated AST element');\r\n        }\r\n        return node;\r\n    }\r\n\r\n    set astNode(value: AstNode | undefined) {\r\n        this._astNode = value;\r\n    }\r\n\r\n    /** @deprecated use `astNode` instead. */\r\n    get element(): AstNode {\r\n        return this.astNode;\r\n    }\r\n\r\n    get text(): string {\r\n        return this.root.fullText.substring(this.offset, this.end);\r\n    }\r\n}\r\n\r\nexport class LeafCstNodeImpl extends AbstractCstNode implements LeafCstNode {\r\n    get offset(): number {\r\n        return this._offset;\r\n    }\r\n\r\n    get length(): number {\r\n        return this._length;\r\n    }\r\n\r\n    get end(): number {\r\n        return this._offset + this._length;\r\n    }\r\n\r\n    override get hidden(): boolean {\r\n        return this._hidden;\r\n    }\r\n\r\n    get tokenType(): TokenType {\r\n        return this._tokenType;\r\n    }\r\n\r\n    get range(): Range {\r\n        return this._range;\r\n    }\r\n\r\n    private _hidden: boolean;\r\n    private _offset: number;\r\n    private _length: number;\r\n    private _range: Range;\r\n    private _tokenType: TokenType;\r\n\r\n    constructor(offset: number, length: number, range: Range, tokenType: TokenType, hidden = false) {\r\n        super();\r\n        this._hidden = hidden;\r\n        this._offset = offset;\r\n        this._tokenType = tokenType;\r\n        this._length = length;\r\n        this._range = range;\r\n    }\r\n}\r\n\r\nexport class CompositeCstNodeImpl extends AbstractCstNode implements CompositeCstNode {\r\n    readonly content: CstNode[] = new CstNodeContainer(this);\r\n    private _rangeCache?: Range;\r\n\r\n    /** @deprecated use `content` instead. */\r\n    get children(): CstNode[] {\r\n        return this.content;\r\n    }\r\n\r\n    get offset(): number {\r\n        return this.firstNonHiddenNode?.offset ?? 0;\r\n    }\r\n\r\n    get length(): number {\r\n        return this.end - this.offset;\r\n    }\r\n\r\n    get end(): number {\r\n        return this.lastNonHiddenNode?.end ?? 0;\r\n    }\r\n\r\n    get range(): Range {\r\n        const firstNode = this.firstNonHiddenNode;\r\n        const lastNode = this.lastNonHiddenNode;\r\n        if (firstNode && lastNode) {\r\n            if (this._rangeCache === undefined) {\r\n                const { range: firstRange } = firstNode;\r\n                const { range: lastRange } = lastNode;\r\n                this._rangeCache = { start: firstRange.start, end: lastRange.end.line < firstRange.start.line ? firstRange.start : lastRange.end };\r\n            }\r\n            return this._rangeCache;\r\n        } else {\r\n            return { start: Position.create(0, 0), end: Position.create(0, 0) };\r\n        }\r\n    }\r\n\r\n    private get firstNonHiddenNode(): CstNode | undefined {\r\n        for (const child of this.content) {\r\n            if (!child.hidden) {\r\n                return child;\r\n            }\r\n        }\r\n        return this.content[0];\r\n    }\r\n\r\n    private get lastNonHiddenNode(): CstNode | undefined {\r\n        for (let i = this.content.length - 1; i >= 0; i--) {\r\n            const child = this.content[i];\r\n            if (!child.hidden) {\r\n                return child;\r\n            }\r\n        }\r\n        return this.content[this.content.length - 1];\r\n    }\r\n}\r\n\r\nclass CstNodeContainer extends Array<CstNode> {\r\n    readonly parent: CompositeCstNode;\r\n\r\n    constructor(parent: CompositeCstNode) {\r\n        super();\r\n        this.parent = parent;\r\n        Object.setPrototypeOf(this, CstNodeContainer.prototype);\r\n    }\r\n\r\n    override push(...items: CstNode[]): number {\r\n        this.addParents(items);\r\n        return super.push(...items);\r\n    }\r\n\r\n    override unshift(...items: CstNode[]): number {\r\n        this.addParents(items);\r\n        return super.unshift(...items);\r\n    }\r\n\r\n    override splice(start: number, count: number, ...items: CstNode[]): CstNode[] {\r\n        this.addParents(items);\r\n        return super.splice(start, count, ...items);\r\n    }\r\n\r\n    private addParents(items: CstNode[]): void {\r\n        for (const item of items) {\r\n            (<AbstractCstNode>item).container = this.parent;\r\n        }\r\n    }\r\n}\r\n\r\nexport class RootCstNodeImpl extends CompositeCstNodeImpl implements RootCstNode {\r\n    private _text = '';\r\n\r\n    override get text(): string {\r\n        return this._text.substring(this.offset, this.end);\r\n    }\r\n\r\n    get fullText(): string {\r\n        return this._text;\r\n    }\r\n\r\n    constructor(input?: string) {\r\n        super();\r\n        this._text = input ?? '';\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { DSLMethodOpts, ILexingError, IOrAlt, IParserErrorMessageProvider, IRecognitionException, IToken, TokenType, TokenVocabulary } from 'chevrotain';\r\nimport type { AbstractElement, Action, Assignment, ParserRule } from '../languages/generated/ast.js';\r\nimport type { Linker } from '../references/linker.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstReflection, CompositeCstNode, CstNode } from '../syntax-tree.js';\r\nimport type { Lexer } from './lexer.js';\r\nimport type { IParserConfig } from './parser-config.js';\r\nimport type { ValueConverter } from './value-converter.js';\r\nimport { defaultParserErrorProvider, EmbeddedActionsParser, LLkLookaheadStrategy } from 'chevrotain';\r\nimport { LLStarLookaheadStrategy } from 'chevrotain-allstar';\r\nimport { isAssignment, isCrossReference, isKeyword } from '../languages/generated/ast.js';\r\nimport { getExplicitRuleType, isDataTypeRule } from '../utils/grammar-utils.js';\r\nimport { assignMandatoryProperties, getContainerOfType, linkContentToContainer } from '../utils/ast-utils.js';\r\nimport { CstNodeBuilder } from './cst-node-builder.js';\r\nimport type { LexingReport } from './token-builder.js';\r\n\r\nexport type ParseResult<T = AstNode> = {\r\n    value: T,\r\n    parserErrors: IRecognitionException[],\r\n    lexerErrors: ILexingError[],\r\n    lexerReport?: LexingReport\r\n}\r\n\r\nexport const DatatypeSymbol = Symbol('Datatype');\r\n\r\ninterface DataTypeNode {\r\n    $cstNode: CompositeCstNode\r\n    /** Instead of a string, this node is uniquely identified by the `Datatype` symbol */\r\n    $type: symbol\r\n    /** Used as a storage for all parsed terminals, keywords and sub-datatype rules */\r\n    value: string\r\n}\r\n\r\nfunction isDataTypeNode(node: { $type: string | symbol | undefined }): node is DataTypeNode {\r\n    return node.$type === DatatypeSymbol;\r\n}\r\n\r\ntype RuleResult = (args: Args) => any;\r\n\r\ntype Args = Record<string, boolean>;\r\n\r\ntype RuleImpl = (args: Args) => any;\r\n\r\ninterface AssignmentElement {\r\n    assignment?: Assignment\r\n    isCrossRef: boolean\r\n}\r\n\r\n/**\r\n * Base interface for all parsers. Mainly used by the `parser-builder-base.ts` to perform work on different kinds of parsers.\r\n * The main use cases are:\r\n * * AST parser: Based on a string, create an AST for the current grammar\r\n * * Completion parser: Based on a partial string, identify the current position of the input within the grammar\r\n */\r\nexport interface BaseParser {\r\n    /**\r\n     * Adds a new parser rule to the parser\r\n     */\r\n    rule(rule: ParserRule, impl: RuleImpl): RuleResult;\r\n    /**\r\n     * Returns the executable rule function for the specified rule name\r\n     */\r\n    getRule(name: string): RuleResult | undefined;\r\n    /**\r\n     * Performs alternatives parsing (the `|` operation in EBNF/Langium)\r\n     */\r\n    alternatives(idx: number, choices: Array<IOrAlt<any>>): void;\r\n    /**\r\n     * Parses the callback as optional (the `?` operation in EBNF/Langium)\r\n     */\r\n    optional(idx: number, callback: DSLMethodOpts<unknown>): void;\r\n    /**\r\n     * Parses the callback 0 or more times (the `*` operation in EBNF/Langium)\r\n     */\r\n    many(idx: number, callback: DSLMethodOpts<unknown>): void;\r\n    /**\r\n     * Parses the callback 1 or more times (the `+` operation in EBNF/Langium)\r\n     */\r\n    atLeastOne(idx: number, callback: DSLMethodOpts<unknown>): void;\r\n    /**\r\n     * Consumes a specific token type from the token input stream.\r\n     * Requires a unique index within the rule for a specific token type.\r\n     */\r\n    consume(idx: number, tokenType: TokenType, feature: AbstractElement): void;\r\n    /**\r\n     * Invokes the executable function for a given parser rule.\r\n     * Requires a unique index within the rule for a specific sub rule.\r\n     * Arguments can be supplied to the rule invocation for semantic predicates\r\n     */\r\n    subrule(idx: number, rule: RuleResult, feature: AbstractElement, args: Args): void;\r\n    /**\r\n     * Executes a grammar action that modifies the currently active AST node\r\n     */\r\n    action($type: string, action: Action): void;\r\n    /**\r\n     * Finishes construction of the current AST node. Only used by the AST parser.\r\n     */\r\n    construct(): unknown;\r\n    /**\r\n     * Whether the parser is currently actually in use or in \"recording mode\".\r\n     * Recording mode is activated once when the parser is analyzing itself.\r\n     * During this phase, no input exists and therefore no AST should be constructed\r\n     */\r\n    isRecording(): boolean;\r\n    /**\r\n     * Current state of the unordered groups\r\n     */\r\n    get unorderedGroups(): Map<string, boolean[]>;\r\n    /**\r\n     * The rule stack indicates the indices of rules that are currently invoked,\r\n     * in order of their invocation.\r\n     */\r\n    getRuleStack(): number[];\r\n}\r\n\r\nconst ruleSuffix = '\\u200B';\r\nconst withRuleSuffix = (name: string): string => name.endsWith(ruleSuffix) ? name : name + ruleSuffix;\r\n\r\nexport abstract class AbstractLangiumParser implements BaseParser {\r\n\r\n    protected readonly lexer: Lexer;\r\n    protected readonly wrapper: ChevrotainWrapper;\r\n    protected _unorderedGroups: Map<string, boolean[]> = new Map<string, boolean[]>();\r\n\r\n    protected allRules = new Map<string, RuleResult>();\r\n    protected mainRule!: RuleResult;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.lexer = services.parser.Lexer;\r\n        const tokens = this.lexer.definition;\r\n        const production = services.LanguageMetaData.mode === 'production';\r\n        this.wrapper = new ChevrotainWrapper(tokens, {\r\n            ...services.parser.ParserConfig,\r\n            skipValidations: production,\r\n            errorMessageProvider: services.parser.ParserErrorMessageProvider\r\n        });\r\n    }\r\n\r\n    alternatives(idx: number, choices: Array<IOrAlt<any>>): void {\r\n        this.wrapper.wrapOr(idx, choices);\r\n    }\r\n\r\n    optional(idx: number, callback: DSLMethodOpts<unknown>): void {\r\n        this.wrapper.wrapOption(idx, callback);\r\n    }\r\n\r\n    many(idx: number, callback: DSLMethodOpts<unknown>): void {\r\n        this.wrapper.wrapMany(idx, callback);\r\n    }\r\n\r\n    atLeastOne(idx: number, callback: DSLMethodOpts<unknown>): void {\r\n        this.wrapper.wrapAtLeastOne(idx, callback);\r\n    }\r\n\r\n    abstract rule(rule: ParserRule, impl: RuleImpl): RuleResult;\r\n    abstract consume(idx: number, tokenType: TokenType, feature: AbstractElement): void;\r\n    abstract subrule(idx: number, rule: RuleResult, feature: AbstractElement, args: Args): void;\r\n    abstract action($type: string, action: Action): void;\r\n    abstract construct(): unknown;\r\n\r\n    getRule(name: string): RuleResult | undefined {\r\n        return this.allRules.get(name);\r\n    }\r\n\r\n    isRecording(): boolean {\r\n        return this.wrapper.IS_RECORDING;\r\n    }\r\n\r\n    get unorderedGroups(): Map<string, boolean[]> {\r\n        return this._unorderedGroups;\r\n    }\r\n\r\n    getRuleStack(): number[] {\r\n        return (this.wrapper as any).RULE_STACK;\r\n    }\r\n\r\n    finalize(): void {\r\n        this.wrapper.wrapSelfAnalysis();\r\n    }\r\n}\r\n\r\nexport interface ParserOptions {\r\n    rule?: string\r\n}\r\n\r\nexport class LangiumParser extends AbstractLangiumParser {\r\n    private readonly linker: Linker;\r\n    private readonly converter: ValueConverter;\r\n    private readonly astReflection: AstReflection;\r\n    private readonly nodeBuilder = new CstNodeBuilder();\r\n    private stack: any[] = [];\r\n    private assignmentMap = new Map<AbstractElement, AssignmentElement | undefined>();\r\n\r\n    private get current(): any {\r\n        return this.stack[this.stack.length - 1];\r\n    }\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        super(services);\r\n        this.linker = services.references.Linker;\r\n        this.converter = services.parser.ValueConverter;\r\n        this.astReflection = services.shared.AstReflection;\r\n    }\r\n\r\n    rule(rule: ParserRule, impl: RuleImpl): RuleResult {\r\n        const type = this.computeRuleType(rule);\r\n        const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(type, impl).bind(this));\r\n        this.allRules.set(rule.name, ruleMethod);\r\n        if (rule.entry) {\r\n            this.mainRule = ruleMethod;\r\n        }\r\n        return ruleMethod;\r\n    }\r\n\r\n    private computeRuleType(rule: ParserRule): string | symbol | undefined {\r\n        if (rule.fragment) {\r\n            return undefined;\r\n        } else if (isDataTypeRule(rule)) {\r\n            return DatatypeSymbol;\r\n        } else {\r\n            const explicit = getExplicitRuleType(rule);\r\n            return explicit ?? rule.name;\r\n        }\r\n    }\r\n\r\n    parse<T extends AstNode = AstNode>(input: string, options: ParserOptions = {}): ParseResult<T> {\r\n        this.nodeBuilder.buildRootNode(input);\r\n        const lexerResult = this.lexer.tokenize(input);\r\n        this.wrapper.input = lexerResult.tokens;\r\n        const ruleMethod = options.rule ? this.allRules.get(options.rule) : this.mainRule;\r\n        if (!ruleMethod) {\r\n            throw new Error(options.rule ? `No rule found with name '${options.rule}'` : 'No main rule available.');\r\n        }\r\n        const result = ruleMethod.call(this.wrapper, {});\r\n        this.nodeBuilder.addHiddenTokens(lexerResult.hidden);\r\n        this.unorderedGroups.clear();\r\n        return {\r\n            value: result,\r\n            lexerErrors: lexerResult.errors,\r\n            lexerReport: lexerResult.report,\r\n            parserErrors: this.wrapper.errors\r\n        };\r\n    }\r\n\r\n    private startImplementation($type: string | symbol | undefined, implementation: RuleImpl): RuleImpl {\r\n        return (args) => {\r\n            if (!this.isRecording()) {\r\n                const node: any = { $type };\r\n                this.stack.push(node);\r\n                if ($type === DatatypeSymbol) {\r\n                    node.value = '';\r\n                }\r\n            }\r\n            let result: unknown;\r\n            try {\r\n                result = implementation(args);\r\n            } catch (err) {\r\n                result = undefined;\r\n            }\r\n            if (!this.isRecording() && result === undefined) {\r\n                result = this.construct();\r\n            }\r\n            return result;\r\n        };\r\n    }\r\n\r\n    consume(idx: number, tokenType: TokenType, feature: AbstractElement): void {\r\n        const token = this.wrapper.wrapConsume(idx, tokenType);\r\n        if (!this.isRecording() && this.isValidToken(token)) {\r\n            const leafNode = this.nodeBuilder.buildLeafNode(token, feature);\r\n            const { assignment, isCrossRef } = this.getAssignment(feature);\r\n            const current = this.current;\r\n            if (assignment) {\r\n                const convertedValue = isKeyword(feature) ? token.image : this.converter.convert(token.image, leafNode);\r\n                this.assign(assignment.operator, assignment.feature, convertedValue, leafNode, isCrossRef);\r\n            } else if (isDataTypeNode(current)) {\r\n                let text = token.image;\r\n                if (!isKeyword(feature)) {\r\n                    text = this.converter.convert(text, leafNode).toString();\r\n                }\r\n                current.value += text;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Most consumed parser tokens are valid. However there are two cases in which they are not valid:\r\n     *\r\n     * 1. They were inserted during error recovery by the parser. These tokens don't really exist and should not be further processed\r\n     * 2. They contain invalid token ranges. This might include the special EOF token, or other tokens produced by invalid token builders.\r\n     */\r\n    private isValidToken(token: IToken): boolean {\r\n        return !token.isInsertedInRecovery && !isNaN(token.startOffset) && typeof token.endOffset === 'number' && !isNaN(token.endOffset);\r\n    }\r\n\r\n    subrule(idx: number, rule: RuleResult, feature: AbstractElement, args: Args): void {\r\n        let cstNode: CompositeCstNode | undefined;\r\n        if (!this.isRecording()) {\r\n            cstNode = this.nodeBuilder.buildCompositeNode(feature);\r\n        }\r\n        const subruleResult = this.wrapper.wrapSubrule(idx, rule, args) as any;\r\n        if (!this.isRecording() && cstNode && cstNode.length > 0) {\r\n            this.performSubruleAssignment(subruleResult, feature, cstNode);\r\n        }\r\n    }\r\n\r\n    private performSubruleAssignment(result: any, feature: AbstractElement, cstNode: CompositeCstNode): void {\r\n        const { assignment, isCrossRef } = this.getAssignment(feature);\r\n        if (assignment) {\r\n            this.assign(assignment.operator, assignment.feature, result, cstNode, isCrossRef);\r\n        } else if (!assignment) {\r\n            // If we call a subrule without an assignment we either:\r\n            // 1. append the result of the subrule (data type rule)\r\n            // 2. override the current object with the newly parsed object\r\n            // If the current element is an AST node and the result of the subrule\r\n            // is a data type rule, we can safely discard the results.\r\n            const current = this.current;\r\n            if (isDataTypeNode(current)) {\r\n                current.value += result.toString();\r\n            } else if (typeof result === 'object' && result) {\r\n                const resultKind = result.$type;\r\n                const object = this.assignWithoutOverride(result, current);\r\n                if (resultKind) {\r\n                    object.$type = resultKind;\r\n                }\r\n                const newItem = object;\r\n                this.stack.pop();\r\n                this.stack.push(newItem);\r\n            }\r\n        }\r\n    }\r\n\r\n    action($type: string, action: Action): void {\r\n        if (!this.isRecording()) {\r\n            let last = this.current;\r\n            if (action.feature && action.operator) {\r\n                last = this.construct();\r\n                this.nodeBuilder.removeNode(last.$cstNode);\r\n                const node = this.nodeBuilder.buildCompositeNode(action);\r\n                node.content.push(last.$cstNode);\r\n                const newItem = { $type };\r\n                this.stack.push(newItem);\r\n                this.assign(action.operator, action.feature, last, last.$cstNode, false);\r\n            } else {\r\n                last.$type = $type;\r\n            }\r\n        }\r\n    }\r\n\r\n    construct(): unknown {\r\n        if (this.isRecording()) {\r\n            return undefined;\r\n        }\r\n        const obj = this.current;\r\n        linkContentToContainer(obj);\r\n        this.nodeBuilder.construct(obj);\r\n        this.stack.pop();\r\n        if (isDataTypeNode(obj)) {\r\n            return this.converter.convert(obj.value, obj.$cstNode);\r\n        } else {\r\n            assignMandatoryProperties(this.astReflection, obj);\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    private getAssignment(feature: AbstractElement): AssignmentElement {\r\n        if (!this.assignmentMap.has(feature)) {\r\n            const assignment = getContainerOfType(feature, isAssignment);\r\n            this.assignmentMap.set(feature, {\r\n                assignment: assignment,\r\n                isCrossRef: assignment ? isCrossReference(assignment.terminal) : false\r\n            });\r\n        }\r\n        return this.assignmentMap.get(feature)!;\r\n    }\r\n\r\n    private assign(operator: string, feature: string, value: unknown, cstNode: CstNode, isCrossRef: boolean): void {\r\n        const obj = this.current;\r\n        let item: unknown;\r\n        if (isCrossRef && typeof value === 'string') {\r\n            item = this.linker.buildReference(obj, feature, cstNode, value);\r\n        } else {\r\n            item = value;\r\n        }\r\n        switch (operator) {\r\n            case '=': {\r\n                obj[feature] = item;\r\n                break;\r\n            }\r\n            case '?=': {\r\n                obj[feature] = true;\r\n                break;\r\n            }\r\n            case '+=': {\r\n                if (!Array.isArray(obj[feature])) {\r\n                    obj[feature] = [];\r\n                }\r\n                obj[feature].push(item);\r\n            }\r\n        }\r\n    }\r\n\r\n    private assignWithoutOverride(target: any, source: any): any {\r\n        for (const [name, existingValue] of Object.entries(source)) {\r\n            const newValue = target[name];\r\n            if (newValue === undefined) {\r\n                target[name] = existingValue;\r\n            } else if (Array.isArray(newValue) && Array.isArray(existingValue)) {\r\n                existingValue.push(...newValue);\r\n                target[name] = existingValue;\r\n            }\r\n        }\r\n        // The target was parsed from a unassigned subrule\r\n        // After the subrule construction, it received a cst node\r\n        // This CST node will later be overriden by the cst node builder\r\n        // To prevent references to stale AST nodes in the CST,\r\n        // we need to remove the reference here\r\n        const targetCstNode = target.$cstNode;\r\n        if (targetCstNode) {\r\n            targetCstNode.astNode = undefined;\r\n            target.$cstNode = undefined;\r\n        }\r\n        return target;\r\n    }\r\n\r\n    get definitionErrors(): IParserDefinitionError[] {\r\n        return this.wrapper.definitionErrors;\r\n    }\r\n}\r\n\r\nexport interface IParserDefinitionError {\r\n    message: string\r\n    type: number\r\n    ruleName?: string\r\n}\r\n\r\nexport abstract class AbstractParserErrorMessageProvider implements IParserErrorMessageProvider {\r\n\r\n    buildMismatchTokenMessage(options: {\r\n        expected: TokenType\r\n        actual: IToken\r\n        previous: IToken\r\n        ruleName: string\r\n    }): string {\r\n        return defaultParserErrorProvider.buildMismatchTokenMessage(options);\r\n    }\r\n\r\n    buildNotAllInputParsedMessage(options: {\r\n        firstRedundant: IToken\r\n        ruleName: string\r\n    }): string {\r\n        return defaultParserErrorProvider.buildNotAllInputParsedMessage(options);\r\n    }\r\n\r\n    buildNoViableAltMessage(options: {\r\n        expectedPathsPerAlt: TokenType[][][]\r\n        actual: IToken[]\r\n        previous: IToken\r\n        customUserDescription: string\r\n        ruleName: string\r\n    }): string {\r\n        return defaultParserErrorProvider.buildNoViableAltMessage(options);\r\n    }\r\n\r\n    buildEarlyExitMessage(options: {\r\n        expectedIterationPaths: TokenType[][]\r\n        actual: IToken[]\r\n        previous: IToken\r\n        customUserDescription: string\r\n        ruleName: string\r\n    }): string {\r\n        return defaultParserErrorProvider.buildEarlyExitMessage(options);\r\n    }\r\n\r\n}\r\n\r\nexport class LangiumParserErrorMessageProvider extends AbstractParserErrorMessageProvider {\r\n\r\n    override buildMismatchTokenMessage({ expected, actual }: {\r\n        expected: TokenType\r\n        actual: IToken\r\n        previous: IToken\r\n        ruleName: string\r\n    }): string {\r\n        const expectedMsg = expected.LABEL\r\n            ? '`' + expected.LABEL + '`'\r\n            : expected.name.endsWith(':KW')\r\n                ? `keyword '${expected.name.substring(0, expected.name.length - 3)}'`\r\n                : `token of type '${expected.name}'`;\r\n        return `Expecting ${expectedMsg} but found \\`${actual.image}\\`.`;\r\n    }\r\n\r\n    override buildNotAllInputParsedMessage({ firstRedundant }: {\r\n        firstRedundant: IToken\r\n        ruleName: string\r\n    }): string {\r\n        return `Expecting end of file but found \\`${firstRedundant.image}\\`.`;\r\n    }\r\n}\r\n\r\nexport interface CompletionParserResult {\r\n    tokens: IToken[]\r\n    elementStack: AbstractElement[]\r\n    tokenIndex: number\r\n}\r\n\r\nexport class LangiumCompletionParser extends AbstractLangiumParser {\r\n    private tokens: IToken[] = [];\r\n\r\n    private elementStack: AbstractElement[] = [];\r\n    private lastElementStack: AbstractElement[] = [];\r\n    private nextTokenIndex = 0;\r\n    private stackSize = 0;\r\n\r\n    action(): void {\r\n        // NOOP\r\n    }\r\n\r\n    construct(): unknown {\r\n        // NOOP\r\n        return undefined;\r\n    }\r\n\r\n    parse(input: string): CompletionParserResult {\r\n        this.resetState();\r\n        const tokens = this.lexer.tokenize(input, { mode: 'partial' });\r\n        this.tokens = tokens.tokens;\r\n        this.wrapper.input = [...this.tokens];\r\n        this.mainRule.call(this.wrapper, {});\r\n        this.unorderedGroups.clear();\r\n        return {\r\n            tokens: this.tokens,\r\n            elementStack: [...this.lastElementStack],\r\n            tokenIndex: this.nextTokenIndex\r\n        };\r\n    }\r\n\r\n    rule(rule: ParserRule, impl: RuleImpl): RuleResult {\r\n        const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(impl).bind(this));\r\n        this.allRules.set(rule.name, ruleMethod);\r\n        if (rule.entry) {\r\n            this.mainRule = ruleMethod;\r\n        }\r\n        return ruleMethod;\r\n    }\r\n\r\n    private resetState(): void {\r\n        this.elementStack = [];\r\n        this.lastElementStack = [];\r\n        this.nextTokenIndex = 0;\r\n        this.stackSize = 0;\r\n    }\r\n\r\n    private startImplementation(implementation: RuleImpl): RuleImpl {\r\n        return (args) => {\r\n            const size = this.keepStackSize();\r\n            try {\r\n                implementation(args);\r\n            } finally {\r\n                this.resetStackSize(size);\r\n            }\r\n        };\r\n    }\r\n\r\n    private removeUnexpectedElements(): void {\r\n        this.elementStack.splice(this.stackSize);\r\n    }\r\n\r\n    keepStackSize(): number {\r\n        const size = this.elementStack.length;\r\n        this.stackSize = size;\r\n        return size;\r\n    }\r\n\r\n    resetStackSize(size: number): void {\r\n        this.removeUnexpectedElements();\r\n        this.stackSize = size;\r\n    }\r\n\r\n    consume(idx: number, tokenType: TokenType, feature: AbstractElement): void {\r\n        this.wrapper.wrapConsume(idx, tokenType);\r\n        if (!this.isRecording()) {\r\n            this.lastElementStack = [...this.elementStack, feature];\r\n            this.nextTokenIndex = this.currIdx + 1;\r\n        }\r\n    }\r\n\r\n    subrule(idx: number, rule: RuleResult, feature: AbstractElement, args: Args): void {\r\n        this.before(feature);\r\n        this.wrapper.wrapSubrule(idx, rule, args);\r\n        this.after(feature);\r\n    }\r\n\r\n    before(element: AbstractElement): void {\r\n        if (!this.isRecording()) {\r\n            this.elementStack.push(element);\r\n        }\r\n    }\r\n\r\n    after(element: AbstractElement): void {\r\n        if (!this.isRecording()) {\r\n            const index = this.elementStack.lastIndexOf(element);\r\n            if (index >= 0) {\r\n                this.elementStack.splice(index);\r\n            }\r\n        }\r\n    }\r\n\r\n    get currIdx(): number {\r\n        return (this.wrapper as any).currIdx;\r\n    }\r\n}\r\n\r\nconst defaultConfig: IParserConfig = {\r\n    recoveryEnabled: true,\r\n    nodeLocationTracking: 'full',\r\n    skipValidations: true,\r\n    errorMessageProvider: new LangiumParserErrorMessageProvider()\r\n};\r\n\r\n/**\r\n * This class wraps the embedded actions parser of chevrotain and exposes protected methods.\r\n * This way, we can build the `LangiumParser` as a composition.\r\n */\r\nclass ChevrotainWrapper extends EmbeddedActionsParser {\r\n\r\n    // This array is set in the base implementation of Chevrotain.\r\n    definitionErrors: IParserDefinitionError[];\r\n\r\n    constructor(tokens: TokenVocabulary, config: IParserConfig) {\r\n        const useDefaultLookahead = config && 'maxLookahead' in config;\r\n        super(tokens, {\r\n            ...defaultConfig,\r\n            lookaheadStrategy: useDefaultLookahead\r\n                ? new LLkLookaheadStrategy({ maxLookahead: config.maxLookahead })\r\n                : new LLStarLookaheadStrategy({\r\n                    // If validations are skipped, don't log the lookahead warnings\r\n                    logging: config.skipValidations ? () => { } : undefined\r\n                }),\r\n            ...config,\r\n        });\r\n    }\r\n\r\n    get IS_RECORDING(): boolean {\r\n        return this.RECORDING_PHASE;\r\n    }\r\n\r\n    DEFINE_RULE(name: string, impl: RuleImpl): RuleResult {\r\n        return this.RULE(name, impl);\r\n    }\r\n\r\n    wrapSelfAnalysis(): void {\r\n        this.performSelfAnalysis();\r\n    }\r\n\r\n    wrapConsume(idx: number, tokenType: TokenType): IToken {\r\n        return this.consume(idx, tokenType);\r\n    }\r\n\r\n    wrapSubrule(idx: number, rule: RuleResult, args: Args): unknown {\r\n        return this.subrule(idx, rule, {\r\n            ARGS: [args]\r\n        });\r\n    }\r\n\r\n    wrapOr(idx: number, choices: Array<IOrAlt<any>>): void {\r\n        this.or(idx, choices);\r\n    }\r\n\r\n    wrapOption(idx: number, callback: DSLMethodOpts<unknown>): void {\r\n        this.option(idx, callback);\r\n    }\r\n\r\n    wrapMany(idx: number, callback: DSLMethodOpts<unknown>): void {\r\n        this.many(idx, callback);\r\n    }\r\n\r\n    wrapAtLeastOne(idx: number, callback: DSLMethodOpts<unknown>): void {\r\n        this.atLeastOne(idx, callback);\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { IOrAlt, TokenType, TokenTypeDictionary } from 'chevrotain';\r\nimport type { AbstractElement, Action, Alternatives, Condition, CrossReference, Grammar, Group, Keyword, NamedArgument, ParserRule, RuleCall, UnorderedGroup } from '../languages/generated/ast.js';\r\nimport type { BaseParser } from './langium-parser.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport type { Cardinality } from '../utils/grammar-utils.js';\r\nimport { EMPTY_ALT, EOF } from 'chevrotain';\r\nimport { isAction, isAlternatives, isEndOfFile, isAssignment, isConjunction, isCrossReference, isDisjunction, isGroup, isKeyword, isNegation, isParameterReference, isParserRule, isRuleCall, isTerminalRule, isUnorderedGroup, isBooleanLiteral } from '../languages/generated/ast.js';\r\nimport { assertUnreachable, ErrorWithLocation } from '../utils/errors.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { findNameAssignment, getAllReachableRules, getTypeName } from '../utils/grammar-utils.js';\r\n\r\ntype RuleContext = {\r\n    optional: number,\r\n    consume: number,\r\n    subrule: number,\r\n    many: number,\r\n    or: number\r\n} & ParserContext;\r\n\r\ntype ParserContext = {\r\n    parser: BaseParser\r\n    tokens: TokenTypeDictionary\r\n    ruleNames: Map<AstNode, string>\r\n}\r\n\r\ntype Rule = (args: Args) => unknown;\r\n\r\ntype Args = Record<string, boolean>;\r\n\r\ntype Predicate = (args: Args) => boolean;\r\n\r\ntype Method = (args: Args) => void;\r\n\r\nexport function createParser<T extends BaseParser>(grammar: Grammar, parser: T, tokens: TokenTypeDictionary): T {\r\n    const parserContext: ParserContext = {\r\n        parser,\r\n        tokens,\r\n        ruleNames: new Map()\r\n    };\r\n    buildRules(parserContext, grammar);\r\n    return parser;\r\n}\r\n\r\nfunction buildRules(parserContext: ParserContext, grammar: Grammar): void {\r\n    const reachable = getAllReachableRules(grammar, false);\r\n    const parserRules = stream(grammar.rules).filter(isParserRule).filter(rule => reachable.has(rule));\r\n    for (const rule of parserRules) {\r\n        const ctx: RuleContext = {\r\n            ...parserContext,\r\n            consume: 1,\r\n            optional: 1,\r\n            subrule: 1,\r\n            many: 1,\r\n            or: 1\r\n        };\r\n        parserContext.parser.rule(rule, buildElement(ctx, rule.definition));\r\n    }\r\n}\r\n\r\nfunction buildElement(ctx: RuleContext, element: AbstractElement, ignoreGuard = false): Method {\r\n    let method: Method;\r\n    if (isKeyword(element)) {\r\n        method = buildKeyword(ctx, element);\r\n    } else if (isAction(element)) {\r\n        method = buildAction(ctx, element);\r\n    } else if (isAssignment(element)) {\r\n        method = buildElement(ctx, element.terminal);\r\n    } else if (isCrossReference(element)) {\r\n        method = buildCrossReference(ctx, element);\r\n    } else if (isRuleCall(element)) {\r\n        method = buildRuleCall(ctx, element);\r\n    } else if (isAlternatives(element)) {\r\n        method = buildAlternatives(ctx, element);\r\n    } else if (isUnorderedGroup(element)) {\r\n        method = buildUnorderedGroup(ctx, element);\r\n    } else if (isGroup(element)) {\r\n        method = buildGroup(ctx, element);\r\n    } else if(isEndOfFile(element)) {\r\n        const idx = ctx.consume++;\r\n        method = () => ctx.parser.consume(idx, EOF, element);\r\n    } else {\r\n        throw new ErrorWithLocation(element.$cstNode, `Unexpected element type: ${element.$type}`);\r\n    }\r\n    return wrap(ctx, ignoreGuard ? undefined : getGuardCondition(element), method, element.cardinality);\r\n}\r\n\r\nfunction buildAction(ctx: RuleContext, action: Action): Method {\r\n    const actionType = getTypeName(action);\r\n    return () => ctx.parser.action(actionType, action);\r\n}\r\n\r\nfunction buildRuleCall(ctx: RuleContext, ruleCall: RuleCall): Method {\r\n    const rule = ruleCall.rule.ref;\r\n    if (isParserRule(rule)) {\r\n        const idx = ctx.subrule++;\r\n        const predicate = ruleCall.arguments.length > 0 ? buildRuleCallPredicate(rule, ruleCall.arguments) : () => ({});\r\n        return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), ruleCall, predicate(args));\r\n    } else if (isTerminalRule(rule)) {\r\n        const idx = ctx.consume++;\r\n        const method = getToken(ctx, rule.name);\r\n        return () => ctx.parser.consume(idx, method, ruleCall);\r\n    } else if (!rule) {\r\n        throw new ErrorWithLocation(ruleCall.$cstNode, `Undefined rule type: ${ruleCall.$type}`);\r\n    } else {\r\n        assertUnreachable(rule);\r\n    }\r\n}\r\n\r\nfunction buildRuleCallPredicate(rule: ParserRule, namedArgs: NamedArgument[]): (args: Args) => Args {\r\n    const predicates = namedArgs.map(e => buildPredicate(e.value));\r\n    return (args) => {\r\n        const ruleArgs: Args = {};\r\n        for (let i = 0; i < predicates.length; i++) {\r\n            const ruleTarget = rule.parameters[i];\r\n            const predicate = predicates[i];\r\n            ruleArgs[ruleTarget.name] = predicate(args);\r\n        }\r\n        return ruleArgs;\r\n    };\r\n}\r\n\r\ninterface PredicatedMethod {\r\n    ALT: Method,\r\n    GATE?: Predicate\r\n}\r\n\r\nfunction buildPredicate(condition: Condition): Predicate {\r\n    if (isDisjunction(condition)) {\r\n        const left = buildPredicate(condition.left);\r\n        const right = buildPredicate(condition.right);\r\n        return (args) => (left(args) || right(args));\r\n    } else if (isConjunction(condition)) {\r\n        const left = buildPredicate(condition.left);\r\n        const right = buildPredicate(condition.right);\r\n        return (args) => (left(args) && right(args));\r\n    } else if (isNegation(condition)) {\r\n        const value = buildPredicate(condition.value);\r\n        return (args) => !value(args);\r\n    } else if (isParameterReference(condition)) {\r\n        const name = condition.parameter.ref!.name;\r\n        return (args) => args !== undefined && args[name] === true;\r\n    } else if (isBooleanLiteral(condition)) {\r\n        const value = Boolean(condition.true);\r\n        return () => value;\r\n    }\r\n    assertUnreachable(condition);\r\n}\r\n\r\nfunction buildAlternatives(ctx: RuleContext, alternatives: Alternatives): Method {\r\n    if (alternatives.elements.length === 1) {\r\n        return buildElement(ctx, alternatives.elements[0]);\r\n    } else {\r\n        const methods: PredicatedMethod[] = [];\r\n\r\n        for (const element of alternatives.elements) {\r\n            const predicatedMethod: PredicatedMethod = {\r\n                // Since we handle the guard condition in the alternative already\r\n                // We can ignore the group guard condition inside\r\n                ALT: buildElement(ctx, element, true)\r\n            };\r\n            const guard = getGuardCondition(element);\r\n            if (guard) {\r\n                predicatedMethod.GATE = buildPredicate(guard);\r\n            }\r\n            methods.push(predicatedMethod);\r\n        }\r\n\r\n        const idx = ctx.or++;\r\n        return (args) => ctx.parser.alternatives(idx, methods.map(method => {\r\n            const alt: IOrAlt<unknown> = {\r\n                ALT: () => method.ALT(args)\r\n            };\r\n            const gate = method.GATE;\r\n            if (gate) {\r\n                alt.GATE = () => gate(args);\r\n            }\r\n            return alt;\r\n        }));\r\n    }\r\n}\r\n\r\nfunction buildUnorderedGroup(ctx: RuleContext, group: UnorderedGroup): Method {\r\n    if (group.elements.length === 1) {\r\n        return buildElement(ctx, group.elements[0]);\r\n    }\r\n    const methods: PredicatedMethod[] = [];\r\n\r\n    for (const element of group.elements) {\r\n        const predicatedMethod: PredicatedMethod = {\r\n            // Since we handle the guard condition in the alternative already\r\n            // We can ignore the group guard condition inside\r\n            ALT: buildElement(ctx, element, true)\r\n        };\r\n        const guard = getGuardCondition(element);\r\n        if (guard) {\r\n            predicatedMethod.GATE = buildPredicate(guard);\r\n        }\r\n        methods.push(predicatedMethod);\r\n    }\r\n\r\n    const orIdx = ctx.or++;\r\n\r\n    const idFunc = (groupIdx: number, lParser: BaseParser) => {\r\n        const stackId = lParser.getRuleStack().join('-');\r\n        return `uGroup_${groupIdx}_${stackId}`;\r\n    };\r\n    const alternatives: Method = (args) => ctx.parser.alternatives(orIdx, methods.map((method, idx) => {\r\n        const alt: IOrAlt<unknown> = { ALT: () => true };\r\n        const parser = ctx.parser;\r\n        alt.ALT = () => {\r\n            method.ALT(args);\r\n            if (!parser.isRecording()) {\r\n                const key = idFunc(orIdx, parser);\r\n                if (!parser.unorderedGroups.get(key)) {\r\n                    // init after clear state\r\n                    parser.unorderedGroups.set(key, []);\r\n                }\r\n                const groupState = parser.unorderedGroups.get(key)!;\r\n                if (typeof groupState?.[idx] === 'undefined') {\r\n                    // Not accessed yet\r\n                    groupState[idx] = true;\r\n                }\r\n            }\r\n        };\r\n        const gate = method.GATE;\r\n        if (gate) {\r\n            alt.GATE = () => gate(args);\r\n        } else {\r\n            alt.GATE = () => {\r\n                const trackedAlternatives = parser.unorderedGroups.get(idFunc(orIdx, parser));\r\n                const allow = !trackedAlternatives?.[idx];\r\n                return allow;\r\n            };\r\n        }\r\n        return alt;\r\n    }));\r\n    const wrapped = wrap(ctx, getGuardCondition(group), alternatives, '*');\r\n    return (args) => {\r\n        wrapped(args);\r\n        if (!ctx.parser.isRecording()) {\r\n            ctx.parser.unorderedGroups.delete(idFunc(orIdx, ctx.parser));\r\n        }\r\n    };\r\n}\r\n\r\nfunction buildGroup(ctx: RuleContext, group: Group): Method {\r\n    const methods = group.elements.map(e => buildElement(ctx, e));\r\n    return (args) => methods.forEach(method => method(args));\r\n}\r\n\r\nfunction getGuardCondition(element: AbstractElement): Condition | undefined {\r\n    if (isGroup(element)) {\r\n        return element.guardCondition;\r\n    }\r\n    return undefined;\r\n}\r\n\r\nfunction buildCrossReference(ctx: RuleContext, crossRef: CrossReference, terminal = crossRef.terminal): Method {\r\n    if (!terminal) {\r\n        if (!crossRef.type.ref) {\r\n            throw new Error('Could not resolve reference to type: ' + crossRef.type.$refText);\r\n        }\r\n        const assignment = findNameAssignment(crossRef.type.ref);\r\n        const assignTerminal = assignment?.terminal;\r\n        if (!assignTerminal) {\r\n            throw new Error('Could not find name assignment for type: ' + getTypeName(crossRef.type.ref));\r\n        }\r\n        return buildCrossReference(ctx, crossRef, assignTerminal);\r\n    } else if (isRuleCall(terminal) && isParserRule(terminal.rule.ref)) {\r\n        const idx = ctx.subrule++;\r\n        return (args) => ctx.parser.subrule(idx, getRule(ctx, terminal.rule.ref as ParserRule), crossRef, args);\r\n    } else if (isRuleCall(terminal) && isTerminalRule(terminal.rule.ref)) {\r\n        const idx = ctx.consume++;\r\n        const terminalRule = getToken(ctx, terminal.rule.ref.name);\r\n        return () => ctx.parser.consume(idx, terminalRule, crossRef);\r\n    } else if (isKeyword(terminal)) {\r\n        const idx = ctx.consume++;\r\n        const keyword = getToken(ctx, terminal.value);\r\n        return () => ctx.parser.consume(idx, keyword, crossRef);\r\n    }\r\n    else {\r\n        throw new Error('Could not build cross reference parser');\r\n    }\r\n}\r\n\r\nfunction buildKeyword(ctx: RuleContext, keyword: Keyword): Method {\r\n    const idx = ctx.consume++;\r\n    const token = ctx.tokens[keyword.value];\r\n    if (!token) {\r\n        throw new Error('Could not find token for keyword: ' + keyword.value);\r\n    }\r\n    return () => ctx.parser.consume(idx, token, keyword);\r\n}\r\n\r\nfunction wrap(ctx: RuleContext, guard: Condition | undefined, method: Method, cardinality: Cardinality): Method {\r\n    const gate = guard && buildPredicate(guard);\r\n\r\n    if (!cardinality) {\r\n        if (gate) {\r\n            const idx = ctx.or++;\r\n            return (args) => ctx.parser.alternatives(idx, [\r\n                {\r\n                    ALT: () => method(args),\r\n                    GATE: () => gate(args)\r\n                },\r\n                {\r\n                    ALT: EMPTY_ALT(),\r\n                    GATE: () => !gate(args)\r\n                }\r\n            ]);\r\n        } else {\r\n            return method;\r\n        }\r\n    }\r\n\r\n    if (cardinality === '*') {\r\n        const idx = ctx.many++;\r\n        return (args) => ctx.parser.many(idx, {\r\n            DEF: () => method(args),\r\n            GATE: gate ? () => gate(args) : undefined\r\n        });\r\n    } else if (cardinality === '+') {\r\n        const idx = ctx.many++;\r\n        if (gate) {\r\n            const orIdx = ctx.or++;\r\n            // In the case of a guard condition for the `+` group\r\n            // We combine it with an empty alternative\r\n            // If the condition returns true, it needs to parse at least a single iteration\r\n            // If its false, it is not allowed to parse anything\r\n            return (args) => ctx.parser.alternatives(orIdx, [\r\n                {\r\n                    ALT: () => ctx.parser.atLeastOne(idx, {\r\n                        DEF: () => method(args)\r\n                    }),\r\n                    GATE: () => gate(args)\r\n                },\r\n                {\r\n                    ALT: EMPTY_ALT(),\r\n                    GATE: () => !gate(args)\r\n                }\r\n            ]);\r\n        } else {\r\n            return (args) => ctx.parser.atLeastOne(idx, {\r\n                DEF: () => method(args),\r\n            });\r\n        }\r\n    } else if (cardinality === '?') {\r\n        const idx = ctx.optional++;\r\n        return (args) => ctx.parser.optional(idx, {\r\n            DEF: () => method(args),\r\n            GATE: gate ? () => gate(args) : undefined\r\n        });\r\n    } else {\r\n        assertUnreachable(cardinality);\r\n    }\r\n}\r\n\r\nfunction getRule(ctx: ParserContext, element: ParserRule | AbstractElement): Rule {\r\n    const name = getRuleName(ctx, element);\r\n    const rule = ctx.parser.getRule(name);\r\n    if (!rule) throw new Error(`Rule \"${name}\" not found.\"`);\r\n    return rule;\r\n}\r\n\r\nfunction getRuleName(ctx: ParserContext, element: ParserRule | AbstractElement): string {\r\n    if (isParserRule(element)) {\r\n        return element.name;\r\n    } else if (ctx.ruleNames.has(element)) {\r\n        return ctx.ruleNames.get(element)!;\r\n    } else {\r\n        let item: AstNode = element;\r\n        let parent: AstNode = item.$container!;\r\n        let ruleName: string = element.$type;\r\n        while (!isParserRule(parent)) {\r\n            if (isGroup(parent) || isAlternatives(parent) || isUnorderedGroup(parent)) {\r\n                const index = parent.elements.indexOf(item as AbstractElement);\r\n                ruleName = index.toString() + ':' + ruleName;\r\n            }\r\n            item = parent;\r\n            parent = parent.$container!;\r\n        }\r\n        const rule = parent as ParserRule;\r\n        ruleName = rule.name + ':' + ruleName;\r\n        ctx.ruleNames.set(element, ruleName);\r\n        return ruleName;\r\n    }\r\n}\r\n\r\nfunction getToken(ctx: ParserContext, name: string): TokenType {\r\n    const token = ctx.tokens[name];\r\n    if (!token) throw new Error(`Token \"${name}\" not found.\"`);\r\n    return token;\r\n}\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { LangiumCompletionParser } from './langium-parser.js';\r\nimport { createParser } from './parser-builder-base.js';\r\n\r\nexport function createCompletionParser(services: LangiumCoreServices): LangiumCompletionParser {\r\n    const grammar = services.Grammar;\r\n    const lexer = services.parser.Lexer;\r\n    const parser = new LangiumCompletionParser(services);\r\n    createParser(grammar, parser, lexer.definition);\r\n    parser.finalize();\r\n    return parser;\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { LangiumParser } from './langium-parser.js';\r\nimport { createParser } from './parser-builder-base.js';\r\n\r\n/**\r\n * Create and finalize a Langium parser. The parser rules are derived from the grammar, which is\r\n * available at `services.Grammar`.\r\n */\r\nexport function createLangiumParser(services: LangiumCoreServices): LangiumParser {\r\n    const parser = prepareLangiumParser(services);\r\n    parser.finalize();\r\n    return parser;\r\n}\r\n\r\n/**\r\n * Create a Langium parser without finalizing it. This is used to extract more detailed error\r\n * information when the parser is initially validated.\r\n */\r\nexport function prepareLangiumParser(services: LangiumCoreServices): LangiumParser {\r\n    const grammar = services.Grammar;\r\n    const lexer = services.parser.Lexer;\r\n    const parser = new LangiumParser(services);\r\n    return createParser(grammar, parser, lexer.definition);\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CustomPatternMatcherFunc, ILexingError, TokenPattern, TokenType, TokenVocabulary } from 'chevrotain';\r\nimport type { AbstractRule, Grammar, Keyword, TerminalRule } from '../languages/generated/ast.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { Lexer } from 'chevrotain';\r\nimport { isKeyword, isParserRule, isTerminalRule } from '../languages/generated/ast.js';\r\nimport { streamAllContents } from '../utils/ast-utils.js';\r\nimport { getAllReachableRules, terminalRegex } from '../utils/grammar-utils.js';\r\nimport { getCaseInsensitivePattern, isWhitespace, partialMatches } from '../utils/regexp-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\n\r\nexport interface TokenBuilderOptions {\r\n    caseInsensitive?: boolean\r\n}\r\n\r\nexport interface TokenBuilder {\r\n    buildTokens(grammar: Grammar, options?: TokenBuilderOptions): TokenVocabulary;\r\n    /**\r\n     * Produces a lexing report for the given text that was just tokenized using the tokens provided by this builder.\r\n     *\r\n     * @param text The text that was tokenized.\r\n     */\r\n    flushLexingReport?(text: string): LexingReport;\r\n}\r\n\r\n/**\r\n * A custom lexing report that can be produced by the token builder during the lexing process.\r\n * Adopters need to ensure that the any custom fields are serializable so they can be sent across worker threads.\r\n */\r\nexport interface LexingReport {\r\n    diagnostics: LexingDiagnostic[];\r\n}\r\n\r\nexport type LexingDiagnosticSeverity = 'error' | 'warning' | 'info' | 'hint';\r\n\r\nexport interface LexingDiagnostic extends ILexingError {\r\n    severity?: LexingDiagnosticSeverity;\r\n}\r\n\r\nexport class DefaultTokenBuilder implements TokenBuilder {\r\n    /**\r\n     * The list of diagnostics stored during the lexing process of a single text.\r\n     */\r\n    protected diagnostics: LexingDiagnostic[] = [];\r\n\r\n    buildTokens(grammar: Grammar, options?: TokenBuilderOptions): TokenVocabulary {\r\n        const reachableRules = stream(getAllReachableRules(grammar, false));\r\n        const terminalTokens: TokenType[] = this.buildTerminalTokens(reachableRules);\r\n        const tokens: TokenType[] = this.buildKeywordTokens(reachableRules, terminalTokens, options);\r\n\r\n        terminalTokens.forEach(terminalToken => {\r\n            const pattern = terminalToken.PATTERN;\r\n            if (typeof pattern === 'object' && pattern && 'test' in pattern && isWhitespace(pattern)) {\r\n                tokens.unshift(terminalToken);\r\n            } else {\r\n                tokens.push(terminalToken);\r\n            }\r\n        });\r\n        // We don't need to add the EOF token explicitly.\r\n        // It is automatically available at the end of the token stream.\r\n        return tokens;\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    flushLexingReport(text: string): LexingReport {\r\n        return { diagnostics: this.popDiagnostics() };\r\n    }\r\n\r\n    protected popDiagnostics(): LexingDiagnostic[] {\r\n        const diagnostics = [...this.diagnostics];\r\n        this.diagnostics = [];\r\n        return diagnostics;\r\n    }\r\n\r\n    protected buildTerminalTokens(rules: Stream<AbstractRule>): TokenType[] {\r\n        return rules.filter(isTerminalRule).filter(e => !e.fragment)\r\n            .map(terminal => this.buildTerminalToken(terminal)).toArray();\r\n    }\r\n\r\n    protected buildTerminalToken(terminal: TerminalRule): TokenType {\r\n        const regex = terminalRegex(terminal);\r\n        const pattern = this.requiresCustomPattern(regex) ? this.regexPatternFunction(regex) : regex;\r\n        const tokenType: TokenType = {\r\n            name: terminal.name,\r\n            PATTERN: pattern,\r\n        };\r\n        if (typeof pattern === 'function') {\r\n            tokenType.LINE_BREAKS = true;\r\n        }\r\n        if (terminal.hidden) {\r\n            // Only skip tokens that are able to accept whitespace\r\n            tokenType.GROUP = isWhitespace(regex) ? Lexer.SKIPPED : 'hidden';\r\n        }\r\n        return tokenType;\r\n    }\r\n\r\n    protected requiresCustomPattern(regex: RegExp): boolean {\r\n        if (regex.flags.includes('u') || regex.flags.includes('s')) {\r\n            // Unicode and dotall regexes are not supported by Chevrotain.\r\n            return true;\r\n        } else if (regex.source.includes('?<=') || regex.source.includes('?<!')) {\r\n            // Negative and positive lookbehind are not supported by Chevrotain yet.\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    protected regexPatternFunction(regex: RegExp): CustomPatternMatcherFunc {\r\n        const stickyRegex = new RegExp(regex, regex.flags + 'y');\r\n        return (text, offset) => {\r\n            stickyRegex.lastIndex = offset;\r\n            const execResult = stickyRegex.exec(text);\r\n            return execResult;\r\n        };\r\n    }\r\n\r\n    protected buildKeywordTokens(rules: Stream<AbstractRule>, terminalTokens: TokenType[], options?: TokenBuilderOptions): TokenType[] {\r\n        return rules\r\n            // We filter by parser rules, since keywords in terminal rules get transformed into regex and are not actual tokens\r\n            .filter(isParserRule)\r\n            .flatMap(rule => streamAllContents(rule).filter(isKeyword))\r\n            .distinct(e => e.value).toArray()\r\n            // Sort keywords by descending length\r\n            .sort((a, b) => b.value.length - a.value.length)\r\n            .map(keyword => this.buildKeywordToken(keyword, terminalTokens, Boolean(options?.caseInsensitive)));\r\n    }\r\n\r\n    protected buildKeywordToken(keyword: Keyword, terminalTokens: TokenType[], caseInsensitive: boolean): TokenType {\r\n        const keywordPattern = this.buildKeywordPattern(keyword, caseInsensitive);\r\n        const tokenType: TokenType = {\r\n            name: keyword.value,\r\n            PATTERN: keywordPattern,\r\n            LONGER_ALT: this.findLongerAlt(keyword, terminalTokens)\r\n        };\r\n\r\n        if (typeof keywordPattern === 'function') {\r\n            tokenType.LINE_BREAKS = true;\r\n        }\r\n\r\n        return tokenType;\r\n    }\r\n\r\n    protected buildKeywordPattern(keyword: Keyword, caseInsensitive: boolean): TokenPattern {\r\n        return caseInsensitive ?\r\n            new RegExp(getCaseInsensitivePattern(keyword.value)) :\r\n            keyword.value;\r\n    }\r\n\r\n    protected findLongerAlt(keyword: Keyword, terminalTokens: TokenType[]): TokenType[] {\r\n        return terminalTokens.reduce((longerAlts: TokenType[], token) => {\r\n            const pattern = token?.PATTERN as RegExp;\r\n            if (pattern?.source && partialMatches('^' + pattern.source + '$', keyword.value)) {\r\n                longerAlts.push(token);\r\n            }\r\n            return longerAlts;\r\n        }, []);\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AbstractElement, AbstractRule } from '../languages/generated/ast.js';\r\nimport type { CstNode } from '../syntax-tree.js';\r\nimport { isCrossReference, isRuleCall } from '../languages/generated/ast.js';\r\nimport { getCrossReferenceTerminal, getRuleType } from '../utils/grammar-utils.js';\r\n\r\n/**\r\n * Language-specific service for converting string values from the source text format into a value to be held in the AST.\r\n */\r\nexport interface ValueConverter {\r\n    /**\r\n     * Converts a string value from the source text format into a value to be held in the AST.\r\n     */\r\n    convert(input: string, cstNode: CstNode): ValueType;\r\n}\r\n\r\nexport type ValueType = string | number | boolean | bigint | Date;\r\n\r\nexport class DefaultValueConverter implements ValueConverter {\r\n\r\n    convert(input: string, cstNode: CstNode): ValueType {\r\n        let feature: AbstractElement | undefined = cstNode.grammarSource;\r\n        if (isCrossReference(feature)) {\r\n            feature = getCrossReferenceTerminal(feature);\r\n        }\r\n        if (isRuleCall(feature)) {\r\n            const rule = feature.rule.ref;\r\n            if (!rule) {\r\n                throw new Error('This cst node was not parsed by a rule.');\r\n            }\r\n            return this.runConverter(rule, input, cstNode);\r\n        }\r\n        return input;\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    protected runConverter(rule: AbstractRule, input: string, cstNode: CstNode): ValueType {\r\n        switch (rule.name.toUpperCase()) {\r\n            case 'INT': return ValueConverter.convertInt(input);\r\n            case 'STRING': return ValueConverter.convertString(input);\r\n            case 'ID': return ValueConverter.convertID(input);\r\n        }\r\n        switch (getRuleType(rule)?.toLowerCase()) {\r\n            case 'number': return ValueConverter.convertNumber(input);\r\n            case 'boolean': return ValueConverter.convertBoolean(input);\r\n            case 'bigint': return ValueConverter.convertBigint(input);\r\n            case 'date': return ValueConverter.convertDate(input);\r\n            default: return input;\r\n        }\r\n    }\r\n}\r\n\r\nexport namespace ValueConverter {\r\n\r\n    export function convertString(input: string): string {\r\n        let result = '';\r\n        for (let i = 1; i < input.length - 1; i++) {\r\n            const c = input.charAt(i);\r\n            if (c === '\\\\') {\r\n                const c1 = input.charAt(++i);\r\n                result += convertEscapeCharacter(c1);\r\n            } else {\r\n                result += c;\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    function convertEscapeCharacter(char: string): string {\r\n        switch (char) {\r\n            case 'b': return '\\b';\r\n            case 'f': return '\\f';\r\n            case 'n': return '\\n';\r\n            case 'r': return '\\r';\r\n            case 't': return '\\t';\r\n            case 'v': return '\\v';\r\n            case '0': return '\\0';\r\n            default: return char;\r\n        }\r\n    }\r\n\r\n    export function convertID(input: string): string {\r\n        if (input.charAt(0) === '^') {\r\n            return input.substring(1);\r\n        } else {\r\n            return input;\r\n        }\r\n    }\r\n\r\n    export function convertInt(input: string): number {\r\n        return parseInt(input);\r\n    }\r\n\r\n    export function convertBigint(input: string): bigint {\r\n        return BigInt(input);\r\n    }\r\n\r\n    export function convertDate(input: string): Date {\r\n        return new Date(input);\r\n    }\r\n\r\n    export function convertNumber(input: string): number {\r\n        return Number(input);\r\n    }\r\n\r\n    export function convertBoolean(input: string): boolean {\r\n        return input.toLowerCase() === 'true';\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n// eslint-disable-next-line no-restricted-imports\r\nexport * from 'vscode-jsonrpc/lib/common/cancellation.js';\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { CancellationToken, CancellationTokenSource, type AbstractCancellationTokenSource } from '../utils/cancellation.js';\r\n\r\nexport type MaybePromise<T> = T | Promise<T>\r\n\r\n/**\r\n * Delays the execution of the current code to the next tick of the event loop.\r\n * Don't call this method directly in a tight loop to prevent too many promises from being created.\r\n */\r\nexport function delayNextTick(): Promise<void> {\r\n    return new Promise(resolve => {\r\n        // In case we are running in a non-node environment, `setImmediate` isn't available.\r\n        // Using `setTimeout` of the browser API accomplishes the same result.\r\n        if (typeof setImmediate === 'undefined') {\r\n            setTimeout(resolve, 0);\r\n        } else {\r\n            setImmediate(resolve);\r\n        }\r\n    });\r\n}\r\n\r\nlet lastTick = 0;\r\nlet globalInterruptionPeriod = 10;\r\n\r\n/**\r\n * Reset the global interruption period and create a cancellation token source.\r\n */\r\nexport function startCancelableOperation(): AbstractCancellationTokenSource {\r\n    lastTick = performance.now();\r\n    return new CancellationTokenSource();\r\n}\r\n\r\n/**\r\n * Change the period duration for `interruptAndCheck` to the given number of milliseconds.\r\n * The default value is 10ms.\r\n */\r\nexport function setInterruptionPeriod(period: number): void {\r\n    globalInterruptionPeriod = period;\r\n}\r\n\r\n/**\r\n * This symbol may be thrown in an asynchronous context by any Langium service that receives\r\n * a `CancellationToken`. This means that the promise returned by such a service is rejected with\r\n * this symbol as rejection reason.\r\n */\r\nexport const OperationCancelled = Symbol('OperationCancelled');\r\n\r\n/**\r\n * Use this in a `catch` block to check whether the thrown object indicates that the operation\r\n * has been cancelled.\r\n */\r\nexport function isOperationCancelled(err: unknown): err is typeof OperationCancelled {\r\n    return err === OperationCancelled;\r\n}\r\n\r\n/**\r\n * This function does two things:\r\n *  1. Check the elapsed time since the last call to this function or to `startCancelableOperation`. If the predefined\r\n *     period (configured with `setInterruptionPeriod`) is exceeded, execution is delayed with `delayNextTick`.\r\n *  2. If the predefined period is not met yet or execution is resumed after an interruption, the given cancellation\r\n *     token is checked, and if cancellation is requested, `OperationCanceled` is thrown.\r\n *\r\n * All services in Langium that receive a `CancellationToken` may potentially call this function, so the\r\n * `CancellationToken` must be caught (with an `async` try-catch block or a `catch` callback attached to\r\n * the promise) to avoid that event being exposed as an error.\r\n */\r\nexport async function interruptAndCheck(token: CancellationToken): Promise<void> {\r\n    if (token === CancellationToken.None) {\r\n        // Early exit in case cancellation was disabled by the caller\r\n        return;\r\n    }\r\n    const current = performance.now();\r\n    if (current - lastTick >= globalInterruptionPeriod) {\r\n        lastTick = current;\r\n        await delayNextTick();\r\n    }\r\n    if (token.isCancellationRequested) {\r\n        throw OperationCancelled;\r\n    }\r\n}\r\n\r\n/**\r\n * Simple implementation of the deferred pattern.\r\n * An object that exposes a promise and functions to resolve and reject it.\r\n */\r\nexport class Deferred<T = void> {\r\n    resolve: (value: T) => this;\r\n    reject: (err?: unknown) => this;\r\n\r\n    promise = new Promise<T>((resolve, reject) => {\r\n        this.resolve = (arg) => {\r\n            resolve(arg);\r\n            return this;\r\n        };\r\n        this.reject = (err) => {\r\n            reject(err);\r\n            return this;\r\n        };\r\n    });\r\n}\r\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 * ------------------------------------------------------------------------------------------ */\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","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n  }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length)\n      code = path.charCodeAt(i);\n    else if (code === 47 /*/*/)\n      break;\n    else\n      code = 47 /*/*/;\n    if (code === 47 /*/*/) {\n      if (lastSlash === i - 1 || dots === 1) {\n        // NOOP\n      } else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0)\n            res += '/..';\n          else\n            res = '..';\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0)\n          res += '/' + path.slice(lastSlash + 1, i);\n        else\n          res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === 46 /*.*/ && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\n\nfunction _format(sep, pathObject) {\n  var dir = pathObject.dir || pathObject.root;\n  var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n  if (!dir) {\n    return base;\n  }\n  if (dir === pathObject.root) {\n    return dir + base;\n  }\n  return dir + sep + base;\n}\n\nvar posix = {\n  // path.resolve([from ...], to)\n  resolve: function resolve() {\n    var resolvedPath = '';\n    var resolvedAbsolute = false;\n    var cwd;\n\n    for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      var path;\n      if (i >= 0)\n        path = arguments[i];\n      else {\n        if (cwd === undefined)\n          cwd = process.cwd();\n        path = cwd;\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + '/' + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0)\n        return '/' + resolvedPath;\n      else\n        return '/';\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return '.';\n    }\n  },\n\n  normalize: function normalize(path) {\n    assertPath(path);\n\n    if (path.length === 0) return '.';\n\n    var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) path = '.';\n    if (path.length > 0 && trailingSeparator) path += '/';\n\n    if (isAbsolute) return '/' + path;\n    return path;\n  },\n\n  isAbsolute: function isAbsolute(path) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  },\n\n  join: function join() {\n    if (arguments.length === 0)\n      return '.';\n    var joined;\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined)\n          joined = arg;\n        else\n          joined += '/' + arg;\n      }\n    }\n    if (joined === undefined)\n      return '.';\n    return posix.normalize(joined);\n  },\n\n  relative: function relative(from, to) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) return '';\n\n    from = posix.resolve(from);\n    to = posix.resolve(to);\n\n    if (from === to) return '';\n\n    // Trim any leading backslashes\n    var fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/)\n        break;\n    }\n    var fromEnd = from.length;\n    var fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    var toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/)\n        break;\n    }\n    var toEnd = to.length;\n    var toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    var length = fromLen < toLen ? fromLen : toLen;\n    var lastCommonSep = -1;\n    var i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      var fromCode = from.charCodeAt(fromStart + i);\n      var toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode)\n        break;\n      else if (fromCode === 47 /*/*/)\n        lastCommonSep = i;\n    }\n\n    var out = '';\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0)\n          out += '..';\n        else\n          out += '/..';\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0)\n      return out + to.slice(toStart + lastCommonSep);\n    else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/)\n        ++toStart;\n      return to.slice(toStart);\n    }\n  },\n\n  _makeLong: function _makeLong(path) {\n    return path;\n  },\n\n  dirname: function dirname(path) {\n    assertPath(path);\n    if (path.length === 0) return '.';\n    var code = path.charCodeAt(0);\n    var hasRoot = code === 47 /*/*/;\n    var end = -1;\n    var matchedSlash = true;\n    for (var i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          if (!matchedSlash) {\n            end = i;\n            break;\n          }\n        } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) return hasRoot ? '/' : '.';\n    if (hasRoot && end === 1) return '//';\n    return path.slice(0, end);\n  },\n\n  basename: function basename(path, ext) {\n    if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n    assertPath(path);\n\n    var start = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) return '';\n      var extIdx = ext.length - 1;\n      var firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        var code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) return '';\n      return path.slice(start, end);\n    }\n  },\n\n  extname: function extname(path) {\n    assertPath(path);\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n    for (var i = path.length - 1; i >= 0; --i) {\n      var code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1)\n            startDot = i;\n          else if (preDotState !== 1)\n            preDotState = 1;\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n        // We saw a non-dot character immediately before the dot\n        preDotState === 0 ||\n        // The (right-most) trimmed path component is exactly '..'\n        preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      return '';\n    }\n    return path.slice(startDot, end);\n  },\n\n  format: function format(pathObject) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n      throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n    }\n    return _format('/', pathObject);\n  },\n\n  parse: function parse(path) {\n    assertPath(path);\n\n    var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n    if (path.length === 0) return ret;\n    var code = path.charCodeAt(0);\n    var isAbsolute = code === 47 /*/*/;\n    var start;\n    if (isAbsolute) {\n      ret.root = '/';\n      start = 1;\n    } else {\n      start = 0;\n    }\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i = path.length - 1;\n\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n\n    // Get non-dir info\n    for (; i >= start; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n        } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n    // We saw a non-dot character immediately before the dot\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly '..'\n    preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      if (end !== -1) {\n        if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n      }\n    } else {\n      if (startPart === 0 && isAbsolute) {\n        ret.name = path.slice(1, startDot);\n        ret.base = path.slice(1, end);\n      } else {\n        ret.name = path.slice(startPart, startDot);\n        ret.base = path.slice(startPart, end);\n      }\n      ret.ext = path.slice(startDot, end);\n    }\n\n    if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n    return ret;\n  },\n\n  sep: '/',\n  delimiter: ':',\n  win32: null,\n  posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n// !!!!!\n// SEE https://github.com/microsoft/vscode/blob/master/src/vs/base/common/platform.ts\n// !!!!!\n\ndeclare const process: { platform: 'win32' };\ndeclare const navigator: { userAgent: string };\n\nexport let isWindows: boolean;\n\nif (typeof process === 'object') {\n\tisWindows = process.platform === 'win32';\n} else if (typeof navigator === 'object') {\n\tlet userAgent = navigator.userAgent;\n\tisWindows = userAgent.indexOf('Windows') >= 0;\n}\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 *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { CharCode } from './charCode'\nimport { isWindows } from './platform';\n\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\n\nfunction _validateUri(ret: URI, _strict?: boolean): void {\n\n\t// scheme, must be set\n\tif (!ret.scheme && _strict) {\n\t\tthrow new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n\t}\n\n\t// scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n\t// ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n\tif (ret.scheme && !_schemePattern.test(ret.scheme)) {\n\t\tthrow new Error('[UriError]: Scheme contains illegal characters.');\n\t}\n\n\t// path, http://tools.ietf.org/html/rfc3986#section-3.3\n\t// If a URI contains an authority component, then the path component\n\t// must either be empty or begin with a slash (\"/\") character.  If a URI\n\t// does not contain an authority component, then the path cannot begin\n\t// with two slash characters (\"//\").\n\tif (ret.path) {\n\t\tif (ret.authority) {\n\t\t\tif (!_singleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n\t\t\t}\n\t\t} else {\n\t\t\tif (_doubleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n\t\t\t}\n\t\t}\n\t}\n}\n\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme: string, _strict: boolean): string {\n\tif (!scheme && !_strict) {\n\t\treturn 'file';\n\t}\n\treturn scheme;\n}\n\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme: string, path: string): string {\n\n\t// the slash-character is our 'default base' as we don't\n\t// support constructing URIs relative to other URIs. This\n\t// also means that we alter and potentially break paths.\n\t// see https://tools.ietf.org/html/rfc3986#section-5.1.4\n\tswitch (scheme) {\n\t\tcase 'https':\n\t\tcase 'http':\n\t\tcase 'file':\n\t\t\tif (!path) {\n\t\t\t\tpath = _slash;\n\t\t\t} else if (path[0] !== _slash) {\n\t\t\t\tpath = _slash + path;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn path;\n}\n\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n *       foo://example.com:8042/over/there?name=ferret#nose\n *       \\_/   \\______________/\\_________/ \\_________/ \\__/\n *        |           |            |            |        |\n *     scheme     authority       path        query   fragment\n *        |   _____________________|__\n *       / \\ /                        \\\n *       urn:example:animal:ferret:nose\n * ```\n */\nexport class URI implements UriComponents {\n\n\tstatic isUri(thing: any): thing is URI {\n\t\tif (thing instanceof URI) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!thing) {\n\t\t\treturn false;\n\t\t}\n\t\treturn typeof (<URI>thing).authority === 'string'\n\t\t\t&& typeof (<URI>thing).fragment === 'string'\n\t\t\t&& typeof (<URI>thing).path === 'string'\n\t\t\t&& typeof (<URI>thing).query === 'string'\n\t\t\t&& typeof (<URI>thing).scheme === 'string'\n\t\t\t&& typeof (<URI>thing).fsPath === 'string'\n\t\t\t&& typeof (<URI>thing).with === 'function'\n\t\t\t&& typeof (<URI>thing).toString === 'function';\n\t}\n\n\t/**\n\t * scheme is the 'http' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part before the first colon.\n\t */\n\treadonly scheme: string;\n\n\t/**\n\t * authority is the 'www.example.com' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part between the first double slashes and the next slash.\n\t */\n\treadonly authority: string;\n\n\t/**\n\t * path is the '/some/path' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly path: string;\n\n\t/**\n\t * query is the 'query' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly query: string;\n\n\t/**\n\t * fragment is the 'fragment' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly fragment: string;\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(scheme: string, authority?: string, path?: string, query?: string, fragment?: string, _strict?: boolean);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(components: UriComponents);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(schemeOrData: string | UriComponents, authority?: string, path?: string, query?: string, fragment?: string, _strict: boolean = false) {\n\n\t\tif (typeof schemeOrData === 'object') {\n\t\t\tthis.scheme = schemeOrData.scheme || _empty;\n\t\t\tthis.authority = schemeOrData.authority || _empty;\n\t\t\tthis.path = schemeOrData.path || _empty;\n\t\t\tthis.query = schemeOrData.query || _empty;\n\t\t\tthis.fragment = schemeOrData.fragment || _empty;\n\t\t\t// no validation because it's this URI\n\t\t\t// that creates uri components.\n\t\t\t// _validateUri(this);\n\t\t} else {\n\t\t\tthis.scheme = _schemeFix(schemeOrData, _strict);\n\t\t\tthis.authority = authority || _empty;\n\t\t\tthis.path = _referenceResolution(this.scheme, path || _empty);\n\t\t\tthis.query = query || _empty;\n\t\t\tthis.fragment = fragment || _empty;\n\n\t\t\t_validateUri(this, _strict);\n\t\t}\n\t}\n\n\t// ---- filesystem path -----------------------\n\n\t/**\n\t * Returns a string representing the corresponding file system path of this URI.\n\t * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n\t * platform specific path separator.\n\t *\n\t * * Will *not* validate the path for invalid characters and semantics.\n\t * * Will *not* look at the scheme of this URI.\n\t * * The result shall *not* be used for display purposes but for accessing a file on disk.\n\t *\n\t *\n\t * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n\t * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n\t *\n\t * ```ts\n\t\tconst u = URI.parse('file://server/c$/folder/file.txt')\n\t\tu.authority === 'server'\n\t\tu.path === '/shares/c$/file.txt'\n\t\tu.fsPath === '\\\\server\\c$\\folder\\file.txt'\n\t```\n\t *\n\t * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n\t * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n\t * with URIs that represent files on disk (`file` scheme).\n\t */\n\tget fsPath(): string {\n\t\t// if (this.scheme !== 'file') {\n\t\t// \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n\t\t// }\n\t\treturn uriToFsPath(this, false);\n\t}\n\n\t// ---- modify to new -------------------------\n\n\twith(change: { scheme?: string; authority?: string | null; path?: string | null; query?: string | null; fragment?: string | null }): URI {\n\n\t\tif (!change) {\n\t\t\treturn this;\n\t\t}\n\n\t\tlet { scheme, authority, path, query, fragment } = change;\n\t\tif (scheme === undefined) {\n\t\t\tscheme = this.scheme;\n\t\t} else if (scheme === null) {\n\t\t\tscheme = _empty;\n\t\t}\n\t\tif (authority === undefined) {\n\t\t\tauthority = this.authority;\n\t\t} else if (authority === null) {\n\t\t\tauthority = _empty;\n\t\t}\n\t\tif (path === undefined) {\n\t\t\tpath = this.path;\n\t\t} else if (path === null) {\n\t\t\tpath = _empty;\n\t\t}\n\t\tif (query === undefined) {\n\t\t\tquery = this.query;\n\t\t} else if (query === null) {\n\t\t\tquery = _empty;\n\t\t}\n\t\tif (fragment === undefined) {\n\t\t\tfragment = this.fragment;\n\t\t} else if (fragment === null) {\n\t\t\tfragment = _empty;\n\t\t}\n\n\t\tif (scheme === this.scheme\n\t\t\t&& authority === this.authority\n\t\t\t&& path === this.path\n\t\t\t&& query === this.query\n\t\t\t&& fragment === this.fragment) {\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new Uri(scheme, authority, path, query, fragment);\n\t}\n\n\t// ---- parse & validate ------------------------\n\n\t/**\n\t * Creates a new URI from a string, e.g. `http://www.example.com/some/path`,\n\t * `file:///usr/home`, or `scheme:with/path`.\n\t *\n\t * @param value A string which represents an URI (see `URI#toString`).\n\t */\n\tstatic parse(value: string, _strict: boolean = false): URI {\n\t\tconst match = _regexp.exec(value);\n\t\tif (!match) {\n\t\t\treturn new Uri(_empty, _empty, _empty, _empty, _empty);\n\t\t}\n\t\treturn new Uri(\n\t\t\tmatch[2] || _empty,\n\t\t\tpercentDecode(match[4] || _empty),\n\t\t\tpercentDecode(match[5] || _empty),\n\t\t\tpercentDecode(match[7] || _empty),\n\t\t\tpercentDecode(match[9] || _empty),\n\t\t\t_strict\n\t\t);\n\t}\n\n\t/**\n\t * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n\t * `/usr/home`, or `\\\\server\\share\\some\\path`.\n\t *\n\t * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n\t * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n\t * `URI.parse('file://' + path)` because the path might contain characters that are\n\t * interpreted (# and ?). See the following sample:\n\t * ```ts\n\tconst good = URI.file('/coding/c#/project1');\n\tgood.scheme === 'file';\n\tgood.path === '/coding/c#/project1';\n\tgood.fragment === '';\n\tconst bad = URI.parse('file://' + '/coding/c#/project1');\n\tbad.scheme === 'file';\n\tbad.path === '/coding/c'; // path is now broken\n\tbad.fragment === '/project1';\n\t```\n\t *\n\t * @param path A file system path (see `URI#fsPath`)\n\t */\n\tstatic file(path: string): URI {\n\n\t\tlet authority = _empty;\n\n\t\t// normalize to fwd-slashes on windows,\n\t\t// on other systems bwd-slashes are valid\n\t\t// filename character, eg /f\\oo/ba\\r.txt\n\t\tif (isWindows) {\n\t\t\tpath = path.replace(/\\\\/g, _slash);\n\t\t}\n\n\t\t// check for authority as used in UNC shares\n\t\t// or use the path as given\n\t\tif (path[0] === _slash && path[1] === _slash) {\n\t\t\tconst idx = path.indexOf(_slash, 2);\n\t\t\tif (idx === -1) {\n\t\t\t\tauthority = path.substring(2);\n\t\t\t\tpath = _slash;\n\t\t\t} else {\n\t\t\t\tauthority = path.substring(2, idx);\n\t\t\t\tpath = path.substring(idx) || _slash;\n\t\t\t}\n\t\t}\n\n\t\treturn new Uri('file', authority, path, _empty, _empty);\n\t}\n\n\tstatic from(components: { scheme: string; authority?: string; path?: string; query?: string; fragment?: string }): URI {\n\t\tconst result = new Uri(\n\t\t\tcomponents.scheme,\n\t\t\tcomponents.authority,\n\t\t\tcomponents.path,\n\t\t\tcomponents.query,\n\t\t\tcomponents.fragment,\n\t\t);\n\t\t_validateUri(result, true);\n\t\treturn result;\n\t}\n\n\t// ---- printing/externalize ---------------------------\n\n\t/**\n\t * Creates a string representation for this URI. It's guaranteed that calling\n\t * `URI.parse` with the result of this function creates an URI which is equal\n\t * to this URI.\n\t *\n\t * * The result shall *not* be used for display purposes but for externalization or transport.\n\t * * The result will be encoded using the percentage encoding and encoding happens mostly\n\t * ignore the scheme-specific encoding rules.\n\t *\n\t * @param skipEncoding Do not encode the result, default is `false`\n\t */\n\ttoString(skipEncoding: boolean = false): string {\n\t\treturn _asFormatted(this, skipEncoding);\n\t}\n\n\ttoJSON(): UriComponents {\n\t\treturn this;\n\t}\n\n\tstatic revive(data: UriComponents | URI): URI;\n\tstatic revive(data: UriComponents | URI | undefined): URI | undefined;\n\tstatic revive(data: UriComponents | URI | null): URI | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null {\n\t\tif (!data) {\n\t\t\treturn <any>data;\n\t\t} else if (data instanceof URI) {\n\t\t\treturn data;\n\t\t} else {\n\t\t\tconst result = new Uri(data);\n\t\t\tresult._formatted = (<UriState>data).external;\n\t\t\tresult._fsPath = (<UriState>data)._sep === _pathSepMarker ? (<UriState>data).fsPath : null;\n\t\t\treturn result;\n\t\t}\n\t}\n}\n\nexport interface UriComponents {\n\tscheme: string;\n\tauthority: string;\n\tpath: string;\n\tquery: string;\n\tfragment: string;\n}\n\ninterface UriState extends UriComponents {\n\t$mid: number;\n\texternal: string;\n\tfsPath: string;\n\t_sep: 1 | undefined;\n}\n\nconst _pathSepMarker = isWindows ? 1 : undefined;\n\n// This class exists so that URI is compatible with vscode.Uri (API).\nclass Uri extends URI {\n\n\t_formatted: string | null = null;\n\t_fsPath: string | null = null;\n\n\toverride get fsPath(): string {\n\t\tif (!this._fsPath) {\n\t\t\tthis._fsPath = uriToFsPath(this, false);\n\t\t}\n\t\treturn this._fsPath;\n\t}\n\n\toverride toString(skipEncoding: boolean = false): string {\n\t\tif (!skipEncoding) {\n\t\t\tif (!this._formatted) {\n\t\t\t\tthis._formatted = _asFormatted(this, false);\n\t\t\t}\n\t\t\treturn this._formatted;\n\t\t} else {\n\t\t\t// we don't cache that\n\t\t\treturn _asFormatted(this, true);\n\t\t}\n\t}\n\n\toverride toJSON(): UriComponents {\n\t\tconst res = <UriState>{\n\t\t\t$mid: 1\n\t\t};\n\t\t// cached state\n\t\tif (this._fsPath) {\n\t\t\tres.fsPath = this._fsPath;\n\t\t\tres._sep = _pathSepMarker;\n\t\t}\n\t\tif (this._formatted) {\n\t\t\tres.external = this._formatted;\n\t\t}\n\t\t// uri components\n\t\tif (this.path) {\n\t\t\tres.path = this.path;\n\t\t}\n\t\tif (this.scheme) {\n\t\t\tres.scheme = this.scheme;\n\t\t}\n\t\tif (this.authority) {\n\t\t\tres.authority = this.authority;\n\t\t}\n\t\tif (this.query) {\n\t\t\tres.query = this.query;\n\t\t}\n\t\tif (this.fragment) {\n\t\t\tres.fragment = this.fragment;\n\t\t}\n\t\treturn res;\n\t}\n}\n\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable: { [ch: number]: string } = {\n\t[CharCode.Colon]: '%3A', // gen-delims\n\t[CharCode.Slash]: '%2F',\n\t[CharCode.QuestionMark]: '%3F',\n\t[CharCode.Hash]: '%23',\n\t[CharCode.OpenSquareBracket]: '%5B',\n\t[CharCode.CloseSquareBracket]: '%5D',\n\t[CharCode.AtSign]: '%40',\n\n\t[CharCode.ExclamationMark]: '%21', // sub-delims\n\t[CharCode.DollarSign]: '%24',\n\t[CharCode.Ampersand]: '%26',\n\t[CharCode.SingleQuote]: '%27',\n\t[CharCode.OpenParen]: '%28',\n\t[CharCode.CloseParen]: '%29',\n\t[CharCode.Asterisk]: '%2A',\n\t[CharCode.Plus]: '%2B',\n\t[CharCode.Comma]: '%2C',\n\t[CharCode.Semicolon]: '%3B',\n\t[CharCode.Equals]: '%3D',\n\n\t[CharCode.Space]: '%20',\n};\n\nfunction encodeURIComponentFast(uriComponent: string, isPath: boolean, isAuthority: boolean): string {\n\tlet res: string | undefined = undefined;\n\tlet nativeEncodePos = -1;\n\n\tfor (let pos = 0; pos < uriComponent.length; pos++) {\n\t\tconst code = uriComponent.charCodeAt(pos);\n\n\t\t// unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n\t\tif (\n\t\t\t(code >= CharCode.a && code <= CharCode.z)\n\t\t\t|| (code >= CharCode.A && code <= CharCode.Z)\n\t\t\t|| (code >= CharCode.Digit0 && code <= CharCode.Digit9)\n\t\t\t|| code === CharCode.Dash\n\t\t\t|| code === CharCode.Period\n\t\t\t|| code === CharCode.Underline\n\t\t\t|| code === CharCode.Tilde\n\t\t\t|| (isPath && code === CharCode.Slash)\n\t\t\t|| (isAuthority && code === CharCode.OpenSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.CloseSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.Colon)\n\t\t) {\n\t\t\t// check if we are delaying native encode\n\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\tnativeEncodePos = -1;\n\t\t\t}\n\t\t\t// check if we write into a new string (by default we try to return the param)\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += uriComponent.charAt(pos);\n\t\t\t}\n\n\t\t} else {\n\t\t\t// encoding needed, we need to allocate a new string\n\t\t\tif (res === undefined) {\n\t\t\t\tres = uriComponent.substr(0, pos);\n\t\t\t}\n\n\t\t\t// check with default table first\n\t\t\tconst escaped = encodeTable[code];\n\t\t\tif (escaped !== undefined) {\n\n\t\t\t\t// check if we are delaying native encode\n\t\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\t\tnativeEncodePos = -1;\n\t\t\t\t}\n\n\t\t\t\t// append escaped variant to result\n\t\t\t\tres += escaped;\n\n\t\t\t} else if (nativeEncodePos === -1) {\n\t\t\t\t// use native encode only when needed\n\t\t\t\tnativeEncodePos = pos;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (nativeEncodePos !== -1) {\n\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n\t}\n\n\treturn res !== undefined ? res : uriComponent;\n}\n\nfunction encodeURIComponentMinimal(path: string): string {\n\tlet res: string | undefined = undefined;\n\tfor (let pos = 0; pos < path.length; pos++) {\n\t\tconst code = path.charCodeAt(pos);\n\t\tif (code === CharCode.Hash || code === CharCode.QuestionMark) {\n\t\t\tif (res === undefined) {\n\t\t\t\tres = path.substr(0, pos);\n\t\t\t}\n\t\t\tres += encodeTable[code];\n\t\t} else {\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += path[pos];\n\t\t\t}\n\t\t}\n\t}\n\treturn res !== undefined ? res : path;\n}\n\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri: URI, keepDriveLetterCasing: boolean): string {\n\n\tlet value: string;\n\tif (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n\t\t// unc path: file://shares/c$/far/boo\n\t\tvalue = `//${uri.authority}${uri.path}`;\n\t} else if (\n\t\turi.path.charCodeAt(0) === CharCode.Slash\n\t\t&& (uri.path.charCodeAt(1) >= CharCode.A && uri.path.charCodeAt(1) <= CharCode.Z || uri.path.charCodeAt(1) >= CharCode.a && uri.path.charCodeAt(1) <= CharCode.z)\n\t\t&& uri.path.charCodeAt(2) === CharCode.Colon\n\t) {\n\t\tif (!keepDriveLetterCasing) {\n\t\t\t// windows drive letter: file:///c:/far/boo\n\t\t\tvalue = uri.path[1].toLowerCase() + uri.path.substr(2);\n\t\t} else {\n\t\t\tvalue = uri.path.substr(1);\n\t\t}\n\t} else {\n\t\t// other path\n\t\tvalue = uri.path;\n\t}\n\tif (isWindows) {\n\t\tvalue = value.replace(/\\//g, '\\\\');\n\t}\n\treturn value;\n}\n\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri: URI, skipEncoding: boolean): string {\n\n\tconst encoder = !skipEncoding\n\t\t? encodeURIComponentFast\n\t\t: encodeURIComponentMinimal;\n\n\tlet res = '';\n\tlet { scheme, authority, path, query, fragment } = uri;\n\tif (scheme) {\n\t\tres += scheme;\n\t\tres += ':';\n\t}\n\tif (authority || scheme === 'file') {\n\t\tres += _slash;\n\t\tres += _slash;\n\t}\n\tif (authority) {\n\t\tlet idx = authority.indexOf('@');\n\t\tif (idx !== -1) {\n\t\t\t// <user>@<auth>\n\t\t\tconst userinfo = authority.substr(0, idx);\n\t\t\tauthority = authority.substr(idx + 1);\n\t\t\tidx = userinfo.lastIndexOf(':');\n\t\t\tif (idx === -1) {\n\t\t\t\tres += encoder(userinfo, false, false);\n\t\t\t} else {\n\t\t\t\t// <user>:<pass>@<auth>\n\t\t\t\tres += encoder(userinfo.substr(0, idx), false, false);\n\t\t\t\tres += ':';\n\t\t\t\tres += encoder(userinfo.substr(idx + 1), false, true);\n\t\t\t}\n\t\t\tres += '@';\n\t\t}\n\t\tauthority = authority.toLowerCase();\n\t\tidx = authority.lastIndexOf(':');\n\t\tif (idx === -1) {\n\t\t\tres += encoder(authority, false, true);\n\t\t} else {\n\t\t\t// <auth>:<port>\n\t\t\tres += encoder(authority.substr(0, idx), false, true);\n\t\t\tres += authority.substr(idx);\n\t\t}\n\t}\n\tif (path) {\n\t\t// lower-case windows drive letters in /C:/fff or C:/fff\n\t\tif (path.length >= 3 && path.charCodeAt(0) === CharCode.Slash && path.charCodeAt(2) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(1);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t} else if (path.length >= 2 && path.charCodeAt(1) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(0);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t}\n\t\t// encode the rest of the path\n\t\tres += encoder(path, true, false);\n\t}\n\tif (query) {\n\t\tres += '?';\n\t\tres += encoder(query, false, false);\n\t}\n\tif (fragment) {\n\t\tres += '#';\n\t\tres += !skipEncoding ? encodeURIComponentFast(fragment, false, false) : fragment;\n\t}\n\treturn res;\n}\n\n// --- decode\n\nfunction decodeURIComponentGraceful(str: string): string {\n\ttry {\n\t\treturn decodeURIComponent(str);\n\t} catch {\n\t\tif (str.length > 3) {\n\t\t\treturn str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n\t\t} else {\n\t\t\treturn str;\n\t\t}\n\t}\n}\n\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n\nfunction percentDecode(str: string): string {\n\tif (!str.match(_rEncodedAsHex)) {\n\t\treturn str;\n\t}\n\treturn str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n}\n\n/**\n * Mapped-type that replaces all occurrences of URI with UriComponents\n */\nexport type UriDto<T> = { [K in keyof T]: T[K] extends URI\n\t? UriComponents\n\t: UriDto<T[K]> };\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 *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { CharCode } from './charCode';\nimport { URI } from './uri';\nimport * as nodePath from 'path';\n\nconst posixPath = nodePath.posix || nodePath;\nconst slash = '/';\n\nexport namespace Utils {\n\n    /**\n     * Joins one or more input paths to the path of URI. \n     * '/' is used as the directory separation character. \n     * \n     * The resolved path will be normalized. That means:\n     *  - all '..' and '.' segments are resolved.\n     *  - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n     *  - trailing separators are preserved.\n     * \n     * @param uri The input URI.\n     * @param paths The paths to be joined with the path of URI.\n     * @returns A URI with the joined path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n     */\n    export function joinPath(uri: URI, ...paths: string[]): URI {\n        return uri.with({ path: posixPath.join(uri.path, ...paths) });\n    }\n\n\n    /**\n     * Resolves one or more paths against the path of a URI. \n     * '/' is used as the directory separation character. \n     * \n     * The resolved path will be normalized. That means:\n     *  - all '..' and '.' segments are resolved. \n     *  - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n     *  - trailing separators are removed.\n     * \n     * @param uri The input URI.\n     * @param paths The paths to resolve against the path of URI.\n     * @returns A URI with the resolved path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n     */\n    export function resolvePath(uri: URI, ...paths: string[]): URI {\n        let path = uri.path; \n        let slashAdded = false;\n        if (path[0] !== slash) {\n            path = slash + path; // make the path abstract: for posixPath.resolve the first segments has to be absolute or cwd is used.\n            slashAdded = true;\n        }\n        let resolvedPath = posixPath.resolve(path, ...paths);\n        if (slashAdded && resolvedPath[0] === slash && !uri.authority) {\n            resolvedPath = resolvedPath.substring(1);\n        }\n        return uri.with({ path: resolvedPath });\n    }\n\n    /**\n     * Returns a URI where the path is the directory name of the input uri, similar to the Unix dirname command. \n     * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n     * The orignal URI is returned if the URIs path is empty or does not contain any path segments.\n     * \n     * @param uri The input URI.\n     * @return The last segment of the URIs path.\n     */\n    export function dirname(uri: URI): URI {\n        if (uri.path.length === 0 || uri.path === slash) {\n            return uri;\n        }\n        let path = posixPath.dirname(uri.path);\n        if (path.length === 1 && path.charCodeAt(0) === CharCode.Period) {\n            path = '';\n        }\n        return uri.with({ path });\n    }\n\n    /**\n     * Returns the last segment of the path of a URI, similar to the Unix basename command. \n     * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n     * The empty string is returned if the URIs path is empty or does not contain any path segments.\n     * \n     * @param uri The input URI.\n     * @return The base name of the URIs path.\n     */\n    export function basename(uri: URI): string {\n        return posixPath.basename(uri.path);\n    }\n\n    /**\n     * Returns the extension name of the path of a URI, similar to the Unix extname command. \n     * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n     * The empty string is returned if the URIs path is empty or does not contain any path segments.\n     * \n     * @param uri The input URI.\n     * @return The extension name of the URIs path.\n     */\n    export function extname(uri: URI): string {\n        return posixPath.extname(uri.path);\n    }\n}","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { URI, Utils } from 'vscode-uri';\r\n\r\nexport { URI };\r\n\r\nexport namespace UriUtils {\r\n\r\n    export const basename = Utils.basename;\r\n    export const dirname = Utils.dirname;\r\n    export const extname = Utils.extname;\r\n    export const joinPath = Utils.joinPath;\r\n    export const resolvePath = Utils.resolvePath;\r\n\r\n    export function equals(a?: URI | string, b?: URI | string): boolean {\r\n        return a?.toString() === b?.toString();\r\n    }\r\n\r\n    export function relative(from: URI | string, to: URI | string): string {\r\n        const fromPath = typeof from === 'string' ? from : from.path;\r\n        const toPath = typeof to === 'string' ? to : to.path;\r\n        const fromParts = fromPath.split('/').filter(e => e.length > 0);\r\n        const toParts = toPath.split('/').filter(e => e.length > 0);\r\n        let i = 0;\r\n        for (; i < fromParts.length; i++) {\r\n            if (fromParts[i] !== toParts[i]) {\r\n                break;\r\n            }\r\n        }\r\n        const backPart = '../'.repeat(fromParts.length - i);\r\n        const toPart = toParts.slice(i).join('/');\r\n        return backPart + toPart;\r\n    }\r\n\r\n    export function normalize(uri: URI | string): string {\r\n        return URI.parse(uri.toString()).toString();\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/**\r\n * Re-export 'TextDocument' from 'vscode-languageserver-textdocument' for convenience,\r\n *  including both type _and_ symbol (namespace), as we here and there also refer to the symbol,\r\n *  the overhead is very small, just a few kilobytes.\r\n * Everything else of that package (at the time contributing) is also defined\r\n *  in 'vscode-languageserver-protocol' or 'vscode-languageserver-types'.\r\n */\r\nexport { TextDocument } from 'vscode-languageserver-textdocument';\r\n\r\nimport type { Diagnostic, Range } from 'vscode-languageserver-types';\r\nimport type { FileSystemProvider } from './file-system-provider.js';\r\nimport type { ParseResult, ParserOptions } from '../parser/langium-parser.js';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, Mutable, Reference } from '../syntax-tree.js';\r\nimport type { MultiMap } from '../utils/collections.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { TextDocument } from './documents.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { URI } from '../utils/uri-utils.js';\r\n\r\n/**\r\n * A Langium document holds the parse result (AST and CST) and any additional state that is derived\r\n * from the AST, e.g. the result of scope precomputation.\r\n */\r\nexport interface LangiumDocument<T extends AstNode = AstNode> {\r\n    /** The Uniform Resource Identifier (URI) of the document */\r\n    readonly uri: URI;\r\n    /** The text document used to convert between offsets and positions */\r\n    readonly textDocument: TextDocument;\r\n    /** The current state of the document */\r\n    state: DocumentState;\r\n    /** The parse result holds the Abstract Syntax Tree (AST) and potentially also parser / lexer errors */\r\n    parseResult: ParseResult<T>;\r\n    /** Result of the scope precomputation phase */\r\n    precomputedScopes?: PrecomputedScopes;\r\n    /** An array of all cross-references found in the AST while linking */\r\n    references: Reference[];\r\n    /** Result of the validation phase */\r\n    diagnostics?: Diagnostic[]\r\n}\r\n\r\n/**\r\n * A document is subject to several phases that are run in predefined order. Any state value implies that\r\n * smaller state values are finished as well.\r\n */\r\nexport enum DocumentState {\r\n    /**\r\n     * The text content has changed and needs to be parsed again. The AST held by this outdated\r\n     * document instance is no longer valid.\r\n     */\r\n    Changed = 0,\r\n    /**\r\n     * An AST has been created from the text content. The document structure can be traversed,\r\n     * but cross-references cannot be resolved yet. If necessary, the structure can be manipulated\r\n     * at this stage as a preprocessing step.\r\n     */\r\n    Parsed = 1,\r\n    /**\r\n     * The `IndexManager` service has processed AST nodes of this document. This means the\r\n     * exported symbols are available in the global scope and can be resolved from other documents.\r\n     */\r\n    IndexedContent = 2,\r\n    /**\r\n     * The `ScopeComputation` service has processed this document. This means the local symbols\r\n     * are stored in a MultiMap so they can be looked up by the `ScopeProvider` service.\r\n     * Once a document has reached this state, you may follow every reference - it will lazily\r\n     * resolve its `ref` property and yield either the target AST node or `undefined` in case\r\n     * the target is not in scope.\r\n     */\r\n    ComputedScopes = 3,\r\n    /**\r\n     * The `Linker` service has processed this document. All outgoing references have been\r\n     * resolved or marked as erroneous.\r\n     */\r\n    Linked = 4,\r\n    /**\r\n     * The `IndexManager` service has processed AST node references of this document. This is\r\n     * necessary to determine which documents are affected by a change in one of the workspace\r\n     * documents.\r\n     */\r\n    IndexedReferences = 5,\r\n    /**\r\n     * The `DocumentValidator` service has processed this document. The language server listens\r\n     * to the results of this phase and sends diagnostics to the client.\r\n     */\r\n    Validated = 6\r\n}\r\n\r\n/**\r\n * Result of the scope precomputation phase (`ScopeComputation` service).\r\n * It maps every AST node to the set of symbols that are visible in the subtree of that node.\r\n */\r\nexport type PrecomputedScopes = MultiMap<AstNode, AstNodeDescription>\r\n\r\nexport interface DocumentSegment {\r\n    readonly range: Range\r\n    readonly offset: number\r\n    readonly length: number\r\n    readonly end: number\r\n}\r\n\r\n/**\r\n * Surrogate definition of the `TextDocuments` interface from the `vscode-languageserver` package.\r\n * No implementation object is expected to be offered by `LangiumCoreServices`, but only by `LangiumLSPServices`.\r\n */\r\nexport type TextDocumentProvider = {\r\n    get(uri: string | URI): TextDocument | undefined\r\n}\r\n\r\n/**\r\n * Shared service for creating `LangiumDocument` instances.\r\n *\r\n * Register a custom implementation if special (additional) behavior is required for your language(s).\r\n * Note: If you specialize {@link fromString} or {@link fromTextDocument} you probably might want to\r\n * specialize {@link update}, too!\r\n */\r\nexport interface LangiumDocumentFactory {\r\n    /**\r\n     * Create a Langium document from a `TextDocument` (usually associated with a file).\r\n     */\r\n    fromTextDocument<T extends AstNode = AstNode>(textDocument: TextDocument, uri?: URI, options?: ParserOptions): LangiumDocument<T>;\r\n    /**\r\n     * Create a Langium document from a `TextDocument` asynchronously. This action can be cancelled if a cancellable parser implementation has been provided.\r\n     */\r\n    fromTextDocument<T extends AstNode = AstNode>(textDocument: TextDocument, uri: URI | undefined, cancellationToken: CancellationToken): Promise<LangiumDocument<T>>;\r\n\r\n    /**\r\n     * Create an Langium document from an in-memory string.\r\n     */\r\n    fromString<T extends AstNode = AstNode>(text: string, uri: URI, options?: ParserOptions): LangiumDocument<T>;\r\n    /**\r\n     * Create a Langium document from an in-memory string asynchronously. This action can be cancelled if a cancellable parser implementation has been provided.\r\n     */\r\n    fromString<T extends AstNode = AstNode>(text: string, uri: URI, cancellationToken: CancellationToken): Promise<LangiumDocument<T>>;\r\n\r\n    /**\r\n     * Create an Langium document from a model that has been constructed in memory.\r\n     */\r\n    fromModel<T extends AstNode = AstNode>(model: T, uri: URI): LangiumDocument<T>;\r\n\r\n    /**\r\n     * Create an Langium document from a specified `URI`. The factory will use the `FileSystemAccess` service to read the file.\r\n     */\r\n    fromUri<T extends AstNode = AstNode>(uri: URI, cancellationToken?: CancellationToken): Promise<LangiumDocument<T>>;\r\n\r\n    /**\r\n     * Update the given document after changes in the corresponding textual representation.\r\n     * Method is called by the document builder after it has been requested to build an existing\r\n     * document and the document's state is {@link DocumentState.Changed}.\r\n     * The text parsing is expected to be done the same way as in {@link fromTextDocument}\r\n     * and {@link fromString}.\r\n     */\r\n    update<T extends AstNode = AstNode>(document: LangiumDocument<T>, cancellationToken: CancellationToken): Promise<LangiumDocument<T>>\r\n}\r\n\r\nexport class DefaultLangiumDocumentFactory implements LangiumDocumentFactory {\r\n\r\n    protected readonly serviceRegistry: ServiceRegistry;\r\n    protected readonly textDocuments?: TextDocumentProvider;\r\n    protected readonly fileSystemProvider: FileSystemProvider;\r\n\r\n    constructor(services: LangiumSharedCoreServices) {\r\n        this.serviceRegistry = services.ServiceRegistry;\r\n        this.textDocuments = services.workspace.TextDocuments;\r\n        this.fileSystemProvider = services.workspace.FileSystemProvider;\r\n    }\r\n\r\n    async fromUri<T extends AstNode = AstNode>(uri: URI, cancellationToken = CancellationToken.None): Promise<LangiumDocument<T>> {\r\n        const content = await this.fileSystemProvider.readFile(uri);\r\n        return this.createAsync<T>(uri, content, cancellationToken);\r\n    }\r\n\r\n    fromTextDocument<T extends AstNode = AstNode>(textDocument: TextDocument, uri?: URI, options?: ParserOptions): LangiumDocument<T>;\r\n    fromTextDocument<T extends AstNode = AstNode>(textDocument: TextDocument, uri: URI | undefined, cancellationToken: CancellationToken): Promise<LangiumDocument<T>>;\r\n    fromTextDocument<T extends AstNode = AstNode>(textDocument: TextDocument, uri?: URI, token?: CancellationToken | ParserOptions): LangiumDocument<T> | Promise<LangiumDocument<T>> {\r\n        uri = uri ?? URI.parse(textDocument.uri);\r\n        if (CancellationToken.is(token)) {\r\n            return this.createAsync<T>(uri, textDocument, token);\r\n        } else {\r\n            return this.create<T>(uri, textDocument, token);\r\n        }\r\n    }\r\n\r\n    fromString<T extends AstNode = AstNode>(text: string, uri: URI, options?: ParserOptions): LangiumDocument<T>;\r\n    fromString<T extends AstNode = AstNode>(text: string, uri: URI, cancellationToken: CancellationToken): Promise<LangiumDocument<T>>;\r\n    fromString<T extends AstNode = AstNode>(text: string, uri: URI, token?: CancellationToken | ParserOptions): LangiumDocument<T> | Promise<LangiumDocument<T>> {\r\n        if (CancellationToken.is(token)) {\r\n            return this.createAsync<T>(uri, text, token);\r\n        } else {\r\n            return this.create<T>(uri, text, token);\r\n        }\r\n    }\r\n\r\n    fromModel<T extends AstNode = AstNode>(model: T, uri: URI): LangiumDocument<T> {\r\n        return this.create<T>(uri, { $model: model });\r\n    }\r\n\r\n    protected create<T extends AstNode = AstNode>(uri: URI, content: string | TextDocument | { $model: T }, options?: ParserOptions): LangiumDocument<T> {\r\n        if (typeof content === 'string') {\r\n            const parseResult = this.parse<T>(uri, content, options);\r\n            return this.createLangiumDocument<T>(parseResult, uri, undefined, content);\r\n\r\n        } else if ('$model' in content) {\r\n            const parseResult = { value: content.$model, parserErrors: [], lexerErrors: [] };\r\n            return this.createLangiumDocument<T>(parseResult, uri);\r\n\r\n        } else {\r\n            const parseResult = this.parse<T>(uri, content.getText(), options);\r\n            return this.createLangiumDocument(parseResult, uri, content);\r\n        }\r\n    }\r\n\r\n    protected async createAsync<T extends AstNode = AstNode>(uri: URI, content: string | TextDocument, cancelToken: CancellationToken): Promise<LangiumDocument<T>> {\r\n        if (typeof content === 'string') {\r\n            const parseResult = await this.parseAsync<T>(uri, content, cancelToken);\r\n            return this.createLangiumDocument<T>(parseResult, uri, undefined, content);\r\n        } else {\r\n            const parseResult = await this.parseAsync<T>(uri, content.getText(), cancelToken);\r\n            return this.createLangiumDocument(parseResult, uri, content);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Create a LangiumDocument from a given parse result.\r\n     *\r\n     * A TextDocument is created on demand if it is not provided as argument here. Usually this\r\n     * should not be necessary because the main purpose of the TextDocument is to convert between\r\n     * text ranges and offsets, which is done solely in LSP request handling.\r\n     *\r\n     * With the introduction of {@link update} below this method is supposed to be mainly called\r\n     * during workspace initialization and on addition/recognition of new files, while changes in\r\n     * existing documents are processed via {@link update}.\r\n     */\r\n    protected createLangiumDocument<T extends AstNode = AstNode>(parseResult: ParseResult<T>, uri: URI, textDocument?: TextDocument, text?: string): LangiumDocument<T> {\r\n        let document: LangiumDocument<T>;\r\n        if (textDocument) {\r\n            document = {\r\n                parseResult,\r\n                uri,\r\n                state: DocumentState.Parsed,\r\n                references: [],\r\n                textDocument\r\n            };\r\n        } else {\r\n            const textDocumentGetter = this.createTextDocumentGetter(uri, text);\r\n            document = {\r\n                parseResult,\r\n                uri,\r\n                state: DocumentState.Parsed,\r\n                references: [],\r\n                get textDocument() {\r\n                    return textDocumentGetter();\r\n                }\r\n            };\r\n        }\r\n        (parseResult.value as Mutable<AstNode>).$document = document;\r\n        return document;\r\n    }\r\n\r\n    async update<T extends AstNode = AstNode>(document: Mutable<LangiumDocument<T>>, cancellationToken: CancellationToken): Promise<LangiumDocument<T>> {\r\n        // The CST full text property contains the original text that was used to create the AST.\r\n        const oldText = document.parseResult.value.$cstNode?.root.fullText;\r\n        const textDocument = this.textDocuments?.get(document.uri.toString());\r\n        const text = textDocument ? textDocument.getText() : await this.fileSystemProvider.readFile(document.uri);\r\n\r\n        if (textDocument) {\r\n            Object.defineProperty(\r\n                document,\r\n                'textDocument',\r\n                {\r\n                    value: textDocument\r\n                }\r\n            );\r\n        } else {\r\n            const textDocumentGetter = this.createTextDocumentGetter(document.uri, text);\r\n            Object.defineProperty(\r\n                document,\r\n                'textDocument',\r\n                {\r\n                    get: textDocumentGetter\r\n                }\r\n            );\r\n        }\r\n\r\n        // Some of these documents can be pretty large, so parsing them again can be quite expensive.\r\n        // Therefore, we only parse if the text has actually changed.\r\n        if (oldText !== text) {\r\n            document.parseResult = await this.parseAsync(document.uri, text, cancellationToken);\r\n            (document.parseResult.value as Mutable<AstNode>).$document = document;\r\n        }\r\n        document.state = DocumentState.Parsed;\r\n        return document;\r\n    }\r\n\r\n    protected parse<T extends AstNode>(uri: URI, text: string, options?: ParserOptions): ParseResult<T> {\r\n        const services = this.serviceRegistry.getServices(uri);\r\n        return services.parser.LangiumParser.parse<T>(text, options);\r\n    }\r\n\r\n    protected parseAsync<T extends AstNode>(uri: URI, text: string, cancellationToken: CancellationToken): Promise<ParseResult<T>> {\r\n        const services = this.serviceRegistry.getServices(uri);\r\n        return services.parser.AsyncParser.parse<T>(text, cancellationToken);\r\n    }\r\n\r\n    protected createTextDocumentGetter(uri: URI, text?: string): () => TextDocument {\r\n        const serviceRegistry = this.serviceRegistry;\r\n        let textDoc: TextDocument | undefined = undefined;\r\n        return () => {\r\n            return textDoc ??= TextDocument.create(\r\n                uri.toString(), serviceRegistry.getServices(uri).LanguageMetaData.languageId, 0, text ?? ''\r\n            );\r\n        };\r\n    }\r\n}\r\n\r\n/**\r\n * Shared service for managing Langium documents.\r\n */\r\nexport interface LangiumDocuments {\r\n\r\n    /**\r\n     * A stream of all documents managed under this service.\r\n     */\r\n    readonly all: Stream<LangiumDocument>\r\n\r\n    /**\r\n     * Manage a new document under this service.\r\n     * @throws an error if a document with the same URI is already present.\r\n     */\r\n    addDocument(document: LangiumDocument): void;\r\n\r\n    /**\r\n     * Retrieve the document with the given URI, if present. Otherwise returns `undefined`.\r\n     */\r\n    getDocument(uri: URI): LangiumDocument | undefined;\r\n\r\n    /**\r\n     * Retrieve the document with the given URI. If not present, a new one will be created using the file system access.\r\n     * The new document will be added to the list of documents managed under this service.\r\n     */\r\n    getOrCreateDocument(uri: URI, cancellationToken?: CancellationToken): Promise<LangiumDocument>;\r\n\r\n    /**\r\n     * Creates a new document with the given URI and text content.\r\n     * The new document is automatically added to this service and can be retrieved using {@link getDocument}.\r\n     *\r\n     * @throws an error if a document with the same URI is already present.\r\n     */\r\n    createDocument(uri: URI, text: string): LangiumDocument;\r\n\r\n    /**\r\n     * Creates a new document with the given URI and text content asynchronously.\r\n     * The process can be interrupted with a cancellation token.\r\n     * The new document is automatically added to this service and can be retrieved using {@link getDocument}.\r\n     *\r\n     * @throws an error if a document with the same URI is already present.\r\n     */\r\n    createDocument(uri: URI, text: string, cancellationToken: CancellationToken): Promise<LangiumDocument>;\r\n\r\n    /**\r\n     * Returns `true` if a document with the given URI is managed under this service.\r\n     */\r\n    hasDocument(uri: URI): boolean;\r\n\r\n    /**\r\n     * Flag the document with the given URI as `Changed`, if present, meaning that its content\r\n     * is no longer valid. The content (parseResult) stays untouched, while internal data may\r\n     * be dropped to reduce memory footprint.\r\n     *\r\n     * @returns the affected {@link LangiumDocument} if existing for convenience\r\n     */\r\n    invalidateDocument(uri: URI): LangiumDocument | undefined;\r\n\r\n    /**\r\n     * Remove the document with the given URI, if present, and mark it as `Changed`, meaning\r\n     * that its content is no longer valid. The next call to `getOrCreateDocument` with the same\r\n     * URI will create a new document instance.\r\n     *\r\n     * @returns the affected {@link LangiumDocument} if existing for convenience\r\n     */\r\n    deleteDocument(uri: URI): LangiumDocument | undefined;\r\n}\r\n\r\nexport class DefaultLangiumDocuments implements LangiumDocuments {\r\n\r\n    protected readonly langiumDocumentFactory: LangiumDocumentFactory;\r\n    protected readonly serviceRegistry: ServiceRegistry;\r\n\r\n    protected readonly documentMap: Map<string, LangiumDocument> = new Map();\r\n\r\n    constructor(services: LangiumSharedCoreServices) {\r\n        this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;\r\n        this.serviceRegistry = services.ServiceRegistry;\r\n    }\r\n\r\n    get all(): Stream<LangiumDocument> {\r\n        return stream(this.documentMap.values());\r\n    }\r\n\r\n    addDocument(document: LangiumDocument): void {\r\n        const uriString = document.uri.toString();\r\n        if (this.documentMap.has(uriString)) {\r\n            throw new Error(`A document with the URI '${uriString}' is already present.`);\r\n        }\r\n        this.documentMap.set(uriString, document);\r\n    }\r\n\r\n    getDocument(uri: URI): LangiumDocument | undefined {\r\n        const uriString = uri.toString();\r\n        return this.documentMap.get(uriString);\r\n    }\r\n\r\n    async getOrCreateDocument(uri: URI, cancellationToken?: CancellationToken): Promise<LangiumDocument> {\r\n        let document = this.getDocument(uri);\r\n        if (document) {\r\n            return document;\r\n        }\r\n        document = await this.langiumDocumentFactory.fromUri(uri, cancellationToken);\r\n        this.addDocument(document);\r\n        return document;\r\n    }\r\n\r\n    createDocument(uri: URI, text: string): LangiumDocument;\r\n    createDocument(uri: URI, text: string, cancellationToken: CancellationToken): Promise<LangiumDocument>;\r\n    createDocument(uri: URI, text: string, cancellationToken?: CancellationToken): LangiumDocument | Promise<LangiumDocument> {\r\n        if (cancellationToken) {\r\n            return this.langiumDocumentFactory.fromString(text, uri, cancellationToken).then(document => {\r\n                this.addDocument(document);\r\n                return document;\r\n            });\r\n        } else {\r\n            const document = this.langiumDocumentFactory.fromString(text, uri);\r\n            this.addDocument(document);\r\n            return document;\r\n        }\r\n    }\r\n\r\n    hasDocument(uri: URI): boolean {\r\n        return this.documentMap.has(uri.toString());\r\n    }\r\n\r\n    invalidateDocument(uri: URI): LangiumDocument | undefined {\r\n        const uriString = uri.toString();\r\n        const langiumDoc = this.documentMap.get(uriString);\r\n        if (langiumDoc) {\r\n            const linker = this.serviceRegistry.getServices(uri).references.Linker;\r\n            linker.unlink(langiumDoc);\r\n            langiumDoc.state = DocumentState.Changed;\r\n            langiumDoc.precomputedScopes = undefined;\r\n            langiumDoc.diagnostics = undefined;\r\n        }\r\n        return langiumDoc;\r\n    }\r\n\r\n    deleteDocument(uri: URI): LangiumDocument | undefined {\r\n        const uriString = uri.toString();\r\n        const langiumDoc = this.documentMap.get(uriString);\r\n        if (langiumDoc) {\r\n            langiumDoc.state = DocumentState.Changed;\r\n            this.documentMap.delete(uriString);\r\n        }\r\n        return langiumDoc;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, AstReflection, CstNode, LinkingError, Reference, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { AstNodeLocator } from '../workspace/ast-node-locator.js';\r\nimport type { LangiumDocument, LangiumDocuments } from '../workspace/documents.js';\r\nimport type { ScopeProvider } from './scope-provider.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { isAstNode, isAstNodeDescription, isLinkingError } from '../syntax-tree.js';\r\nimport { findRootNode, streamAst, streamReferences } from '../utils/ast-utils.js';\r\nimport { interruptAndCheck } from '../utils/promise-utils.js';\r\nimport { DocumentState } from '../workspace/documents.js';\r\n\r\n/**\r\n * Language-specific service for resolving cross-references in the AST.\r\n */\r\nexport interface Linker {\r\n\r\n    /**\r\n     * Links all cross-references within the specified document. The default implementation loads only target\r\n     * elements from documents that are present in the `LangiumDocuments` service. The linked references are\r\n     * stored in the document's `references` property.\r\n     *\r\n     * @param document A LangiumDocument that shall be linked.\r\n     * @param cancelToken A token for cancelling the operation.\r\n     *\r\n     * @throws `OperationCancelled` if a cancellation event is detected\r\n     */\r\n    link(document: LangiumDocument, cancelToken?: CancellationToken): Promise<void>;\r\n\r\n    /**\r\n     * Unlinks all references within the specified document and removes them from the list of `references`.\r\n     *\r\n     * @param document A LangiumDocument that shall be unlinked.\r\n     */\r\n    unlink(document: LangiumDocument): void;\r\n\r\n    /**\r\n     * Determines a candidate AST node description for linking the given reference.\r\n     *\r\n     * @param refInfo Information about the reference.\r\n     */\r\n    getCandidate(refInfo: ReferenceInfo): AstNodeDescription | LinkingError;\r\n\r\n    /**\r\n     * Creates a cross reference node being aware of its containing AstNode, the corresponding CstNode,\r\n     * the cross reference text denoting the target AstNode being already extracted of the document text,\r\n     * as well as the unique cross reference identifier.\r\n     *\r\n     * Default behavior:\r\n     *  - The returned Reference's 'ref' property pointing to the target AstNode is populated lazily on its\r\n     *    first visit.\r\n     *  - If the target AstNode cannot be resolved on the first visit, an error indicator will be installed\r\n     *    and further resolution attempts will *not* be performed.\r\n     *\r\n     * @param node The containing AST node\r\n     * @param property The AST node property being referenced\r\n     * @param refNode The corresponding CST node\r\n     * @param refText The cross reference text denoting the target AstNode\r\n     * @returns the desired Reference node, whose behavior wrt. resolving the cross reference is implementation specific.\r\n     */\r\n    buildReference(node: AstNode, property: string, refNode: CstNode | undefined, refText: string): Reference;\r\n\r\n}\r\n\r\nconst ref_resolving = Symbol('ref_resolving');\r\n\r\ninterface DefaultReference extends Reference {\r\n    _ref?: AstNode | LinkingError | typeof ref_resolving;\r\n    _nodeDescription?: AstNodeDescription;\r\n}\r\n\r\nexport class DefaultLinker implements Linker {\r\n    protected readonly reflection: AstReflection;\r\n    protected readonly scopeProvider: ScopeProvider;\r\n    protected readonly astNodeLocator: AstNodeLocator;\r\n    protected readonly langiumDocuments: () => LangiumDocuments;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.reflection = services.shared.AstReflection;\r\n        this.langiumDocuments = () => services.shared.workspace.LangiumDocuments;\r\n        this.scopeProvider = services.references.ScopeProvider;\r\n        this.astNodeLocator = services.workspace.AstNodeLocator;\r\n    }\r\n\r\n    async link(document: LangiumDocument, cancelToken = CancellationToken.None): Promise<void> {\r\n        for (const node of streamAst(document.parseResult.value)) {\r\n            await interruptAndCheck(cancelToken);\r\n            streamReferences(node).forEach(ref => this.doLink(ref, document));\r\n        }\r\n    }\r\n\r\n    protected doLink(refInfo: ReferenceInfo, document: LangiumDocument): void {\r\n        const ref = refInfo.reference as DefaultReference;\r\n        // The reference may already have been resolved lazily by accessing its `ref` property.\r\n        if (ref._ref === undefined) {\r\n            ref._ref = ref_resolving;\r\n            try {\r\n                const description = this.getCandidate(refInfo);\r\n                if (isLinkingError(description)) {\r\n                    ref._ref = description;\r\n                } else {\r\n                    ref._nodeDescription = description;\r\n                    if (this.langiumDocuments().hasDocument(description.documentUri)) {\r\n                        // The target document is already loaded\r\n                        const linkedNode = this.loadAstNode(description);\r\n                        ref._ref = linkedNode ?? this.createLinkingError(refInfo, description);\r\n                    } else {\r\n                        // Try to load the target AST node later using the already provided description\r\n                        ref._ref = undefined;\r\n                    }\r\n                }\r\n            } catch (err) {\r\n                console.error(`An error occurred while resolving reference to '${ref.$refText}':`, err);\r\n                const errorMessage = (err as Error).message ?? String(err);\r\n                ref._ref = {\r\n                    ...refInfo,\r\n                    message: `An error occurred while resolving reference to '${ref.$refText}': ${errorMessage}`\r\n                };\r\n            }\r\n            // Add the reference to the document's array of references\r\n            // Only add if the reference has been not been resolved earlier\r\n            // Otherwise we end up with duplicates\r\n            // See also implementation of `buildReference`\r\n            document.references.push(ref);\r\n        }\r\n    }\r\n\r\n    unlink(document: LangiumDocument): void {\r\n        for (const ref of document.references) {\r\n            delete (ref as DefaultReference)._ref;\r\n            delete (ref as DefaultReference)._nodeDescription;\r\n        }\r\n        document.references = [];\r\n    }\r\n\r\n    getCandidate(refInfo: ReferenceInfo): AstNodeDescription | LinkingError {\r\n        const scope = this.scopeProvider.getScope(refInfo);\r\n        const description = scope.getElement(refInfo.reference.$refText);\r\n        return description ?? this.createLinkingError(refInfo);\r\n    }\r\n\r\n    buildReference(node: AstNode, property: string, refNode: CstNode | undefined, refText: string): Reference {\r\n        // See behavior description in doc of Linker, update that on changes in here.\r\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n        const linker = this;\r\n        const reference: DefaultReference = {\r\n            $refNode: refNode,\r\n            $refText: refText,\r\n\r\n            get ref() {\r\n                if (isAstNode(this._ref)) {\r\n                    // Most frequent case: the target is already resolved.\r\n                    return this._ref;\r\n                } else if (isAstNodeDescription(this._nodeDescription)) {\r\n                    // A candidate has been found before, but it is not loaded yet.\r\n                    const linkedNode = linker.loadAstNode(this._nodeDescription);\r\n                    this._ref = linkedNode ??\r\n                        linker.createLinkingError({ reference, container: node, property }, this._nodeDescription);\r\n                } else if (this._ref === undefined) {\r\n                    // The reference has not been linked yet, so do that now.\r\n                    this._ref = ref_resolving;\r\n                    const document = findRootNode(node).$document;\r\n                    const refData = linker.getLinkedNode({ reference, container: node, property });\r\n                    if (refData.error && document && document.state < DocumentState.ComputedScopes) {\r\n                        // Document scope is not ready, don't set `this._ref` so linker can retry later.\r\n                        return this._ref = undefined;\r\n                    }\r\n                    this._ref = refData.node ?? refData.error;\r\n                    this._nodeDescription = refData.descr;\r\n                    document?.references.push(this);\r\n                } else if (this._ref === ref_resolving) {\r\n                    throw new Error(`Cyclic reference resolution detected: ${linker.astNodeLocator.getAstNodePath(node)}/${property} (symbol '${refText}')`);\r\n                }\r\n                return isAstNode(this._ref) ? this._ref : undefined;\r\n            },\r\n            get $nodeDescription() {\r\n                return this._nodeDescription;\r\n            },\r\n            get error() {\r\n                return isLinkingError(this._ref) ? this._ref : undefined;\r\n            }\r\n        };\r\n        return reference;\r\n    }\r\n\r\n    protected getLinkedNode(refInfo: ReferenceInfo): { node?: AstNode, descr?: AstNodeDescription, error?: LinkingError } {\r\n        try {\r\n            const description = this.getCandidate(refInfo);\r\n            if (isLinkingError(description)) {\r\n                return { error: description };\r\n            }\r\n            const linkedNode = this.loadAstNode(description);\r\n            if (linkedNode) {\r\n                return { node: linkedNode, descr: description };\r\n            }\r\n            else {\r\n                return {\r\n                    descr: description,\r\n                    error:\r\n                        this.createLinkingError(refInfo, description)\r\n                };\r\n            }\r\n        } catch (err) {\r\n            console.error(`An error occurred while resolving reference to '${refInfo.reference.$refText}':`, err);\r\n            const errorMessage = (err as Error).message ?? String(err);\r\n            return {\r\n                error: {\r\n                    ...refInfo,\r\n                    message: `An error occurred while resolving reference to '${refInfo.reference.$refText}': ${errorMessage}`\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    protected loadAstNode(nodeDescription: AstNodeDescription): AstNode | undefined {\r\n        if (nodeDescription.node) {\r\n            return nodeDescription.node;\r\n        }\r\n        const doc = this.langiumDocuments().getDocument(nodeDescription.documentUri);\r\n        if (!doc) {\r\n            return undefined;\r\n        }\r\n        return this.astNodeLocator.getAstNode(doc.parseResult.value, nodeDescription.path);\r\n    }\r\n\r\n    protected createLinkingError(refInfo: ReferenceInfo, targetDescription?: AstNodeDescription): LinkingError {\r\n        // Check whether the document is sufficiently processed by the DocumentBuilder. If not, this is a hint for a bug\r\n        // in the language implementation.\r\n        const document = findRootNode(refInfo.container).$document;\r\n        if (document && document.state < DocumentState.ComputedScopes) {\r\n            console.warn(`Attempted reference resolution before document reached ComputedScopes state (${document.uri}).`);\r\n        }\r\n        const referenceType = this.reflection.getReferenceType(refInfo);\r\n        return {\r\n            ...refInfo,\r\n            message: `Could not resolve reference to ${referenceType} named '${refInfo.reference.$refText}'.`,\r\n            targetDescription\r\n        };\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AstNode, CstNode } from '../syntax-tree.js';\r\nimport { findNodeForProperty } from '../utils/grammar-utils.js';\r\n\r\nexport interface NamedAstNode extends AstNode {\r\n    name: string;\r\n}\r\n\r\nexport function isNamed(node: AstNode): node is NamedAstNode {\r\n    return typeof (node as NamedAstNode).name === 'string';\r\n}\r\n\r\n/**\r\n * Utility service for retrieving the `name` of an `AstNode` or the `CstNode` containing a `name`.\r\n */\r\nexport interface NameProvider {\r\n    /**\r\n     * Returns the `name` of a given AstNode.\r\n     * @param node Specified `AstNode` whose name node shall be retrieved.\r\n     */\r\n    getName(node: AstNode): string | undefined;\r\n    /**\r\n     * Returns the `CstNode` which contains the parsed value of the `name` assignment.\r\n     * @param node Specified `AstNode` whose name node shall be retrieved.\r\n     */\r\n    getNameNode(node: AstNode): CstNode | undefined;\r\n}\r\n\r\nexport class DefaultNameProvider implements NameProvider {\r\n    getName(node: AstNode): string | undefined {\r\n        if (isNamed(node)) {\r\n            return node.name;\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    getNameNode(node: AstNode): CstNode | undefined {\r\n        return findNodeForProperty(node.$cstNode, 'name');\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, CstNode, GenericAstNode } from '../syntax-tree.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport type { ReferenceDescription } from '../workspace/ast-descriptions.js';\r\nimport type { AstNodeLocator } from '../workspace/ast-node-locator.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { NameProvider } from './name-provider.js';\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport { findAssignment } from '../utils/grammar-utils.js';\r\nimport { isReference } from '../syntax-tree.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { isChildNode, toDocumentSegment } from '../utils/cst-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { UriUtils } from '../utils/uri-utils.js';\r\n\r\n/**\r\n * Language-specific service for finding references and declaration of a given `CstNode`.\r\n */\r\nexport interface References {\r\n\r\n    /**\r\n     * If the CstNode is a reference node the target CstNode will be returned.\r\n     * If the CstNode is a significant node of the CstNode this CstNode will be returned.\r\n     *\r\n     * @param sourceCstNode CstNode that points to a AstNode\r\n     */\r\n    findDeclaration(sourceCstNode: CstNode): AstNode | undefined;\r\n\r\n    /**\r\n     * If the CstNode is a reference node the target CstNode will be returned.\r\n     * If the CstNode is a significant node of the CstNode this CstNode will be returned.\r\n     *\r\n     * @param sourceCstNode CstNode that points to a AstNode\r\n     */\r\n    findDeclarationNode(sourceCstNode: CstNode): CstNode | undefined;\r\n\r\n    /**\r\n     * Finds all references to the target node as references (local references) or reference descriptions.\r\n     *\r\n     * @param targetNode Specified target node whose references should be returned\r\n     */\r\n    findReferences(targetNode: AstNode, options: FindReferencesOptions): Stream<ReferenceDescription>;\r\n}\r\n\r\nexport interface FindReferencesOptions {\r\n    /**\r\n     * @deprecated Since v1.2.0. Please use `documentUri` instead.\r\n     */\r\n    onlyLocal?: boolean;\r\n    /**\r\n     * When set, the `findReferences` method will only return references/declarations from the specified document.\r\n     */\r\n    documentUri?: URI;\r\n    /**\r\n     * Whether the returned list of references should include the declaration.\r\n     */\r\n    includeDeclaration?: boolean;\r\n}\r\n\r\nexport class DefaultReferences implements References {\r\n    protected readonly nameProvider: NameProvider;\r\n    protected readonly index: IndexManager;\r\n    protected readonly nodeLocator: AstNodeLocator;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.nameProvider = services.references.NameProvider;\r\n        this.index = services.shared.workspace.IndexManager;\r\n        this.nodeLocator = services.workspace.AstNodeLocator;\r\n    }\r\n\r\n    findDeclaration(sourceCstNode: CstNode): AstNode | undefined {\r\n        if (sourceCstNode) {\r\n            const assignment = findAssignment(sourceCstNode);\r\n            const nodeElem = sourceCstNode.astNode;\r\n            if (assignment && nodeElem) {\r\n                const reference = (nodeElem as GenericAstNode)[assignment.feature];\r\n\r\n                if (isReference(reference)) {\r\n                    return reference.ref;\r\n                } else if (Array.isArray(reference)) {\r\n                    for (const ref of reference) {\r\n                        if (isReference(ref) && ref.$refNode\r\n                            && ref.$refNode.offset <= sourceCstNode.offset\r\n                            && ref.$refNode.end >= sourceCstNode.end) {\r\n                            return ref.ref;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (nodeElem) {\r\n                const nameNode = this.nameProvider.getNameNode(nodeElem);\r\n                // Only return the targeted node in case the targeted cst node is the name node or part of it\r\n                if (nameNode && (nameNode === sourceCstNode || isChildNode(sourceCstNode, nameNode))) {\r\n                    return nodeElem;\r\n                }\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    findDeclarationNode(sourceCstNode: CstNode): CstNode | undefined {\r\n        const astNode = this.findDeclaration(sourceCstNode);\r\n        if (astNode?.$cstNode) {\r\n            const targetNode = this.nameProvider.getNameNode(astNode);\r\n            return targetNode ?? astNode.$cstNode;\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    findReferences(targetNode: AstNode, options: FindReferencesOptions): Stream<ReferenceDescription> {\r\n        const refs: ReferenceDescription[] = [];\r\n        if (options.includeDeclaration) {\r\n            const ref = this.getReferenceToSelf(targetNode);\r\n            if (ref) {\r\n                refs.push(ref);\r\n            }\r\n        }\r\n        let indexReferences = this.index.findAllReferences(targetNode, this.nodeLocator.getAstNodePath(targetNode));\r\n        if (options.documentUri) {\r\n            indexReferences = indexReferences.filter(ref => UriUtils.equals(ref.sourceUri, options.documentUri));\r\n        }\r\n        refs.push(...indexReferences);\r\n        return stream(refs);\r\n    }\r\n\r\n    protected getReferenceToSelf(targetNode: AstNode): ReferenceDescription | undefined {\r\n        const nameNode = this.nameProvider.getNameNode(targetNode);\r\n        if (nameNode) {\r\n            const doc = getDocument(targetNode);\r\n            const path = this.nodeLocator.getAstNodePath(targetNode);\r\n            return {\r\n                sourceUri: doc.uri,\r\n                sourcePath: path,\r\n                targetUri: doc.uri,\r\n                targetPath: path,\r\n                segment: toDocumentSegment(nameNode),\r\n                local: true\r\n            };\r\n        }\r\n        return undefined;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { Stream } from './stream.js';\r\nimport { Reduction, stream } from './stream.js';\r\n\r\n/**\r\n * A multimap is a variation of a Map that has potentially multiple values for every key.\r\n */\r\nexport class MultiMap<K, V> {\r\n\r\n    private map = new Map<K, V[]>();\r\n\r\n    constructor()\r\n    constructor(elements: Array<[K, V]>)\r\n    constructor(elements?: Array<[K, V]>) {\r\n        if (elements) {\r\n            for (const [key, value] of elements) {\r\n                this.add(key, value);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * The total number of values in the multimap.\r\n     */\r\n    get size(): number {\r\n        return Reduction.sum(stream(this.map.values()).map(a => a.length));\r\n    }\r\n\r\n    /**\r\n     * Clear all entries in the multimap.\r\n     */\r\n    clear(): void {\r\n        this.map.clear();\r\n    }\r\n\r\n    /**\r\n     * Operates differently depending on whether a `value` is given:\r\n     *  * With a value, this method deletes the specific key / value pair from the multimap.\r\n     *  * Without a value, all values associated with the given key are deleted.\r\n     *\r\n     * @returns `true` if a value existed and has been removed, or `false` if the specified\r\n     *     key / value does not exist.\r\n     */\r\n    delete(key: K, value?: V): boolean {\r\n        if (value === undefined) {\r\n            return this.map.delete(key);\r\n        } else {\r\n            const values = this.map.get(key);\r\n            if (values) {\r\n                const index = values.indexOf(value);\r\n                if (index >= 0) {\r\n                    if (values.length === 1) {\r\n                        this.map.delete(key);\r\n                    } else {\r\n                        values.splice(index, 1);\r\n                    }\r\n                    return true;\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Returns an array of all values associated with the given key. If no value exists,\r\n     * an empty array is returned.\r\n     *\r\n     * _Note:_ The returned array is assumed not to be modified. Use the `set` method to add a\r\n     * value and `delete` to remove a value from the multimap.\r\n     */\r\n    get(key: K): readonly V[] {\r\n        return this.map.get(key) ?? [];\r\n    }\r\n\r\n    /**\r\n     * Operates differently depending on whether a `value` is given:\r\n     *  * With a value, this method returns `true` if the specific key / value pair is present in the multimap.\r\n     *  * Without a value, this method returns `true` if the given key is present in the multimap.\r\n     */\r\n    has(key: K, value?: V): boolean {\r\n        if (value === undefined) {\r\n            return this.map.has(key);\r\n        } else {\r\n            const values = this.map.get(key);\r\n            if (values) {\r\n                return values.indexOf(value) >= 0;\r\n            }\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Add the given key / value pair to the multimap.\r\n     */\r\n    add(key: K, value: V): this {\r\n        if (this.map.has(key)) {\r\n            this.map.get(key)!.push(value);\r\n        } else {\r\n            this.map.set(key, [value]);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Add the given set of key / value pairs to the multimap.\r\n     */\r\n    addAll(key: K, values: Iterable<V>): this {\r\n        if (this.map.has(key)) {\r\n            this.map.get(key)!.push(...values);\r\n        } else {\r\n            this.map.set(key, Array.from(values));\r\n        }\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Invokes the given callback function for every key / value pair in the multimap.\r\n     */\r\n    forEach(callbackfn: (value: V, key: K, map: this) => void): void {\r\n        this.map.forEach((array, key) =>\r\n            array.forEach(value => callbackfn(value, key, this))\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Returns an iterator of key, value pairs for every entry in the map.\r\n     */\r\n    [Symbol.iterator](): Iterator<[K, V]> {\r\n        return this.entries().iterator();\r\n    }\r\n\r\n    /**\r\n     * Returns a stream of key, value pairs for every entry in the map.\r\n     */\r\n    entries(): Stream<[K, V]> {\r\n        return stream(this.map.entries())\r\n            .flatMap(([key, array]) => array.map(value => [key, value] as [K, V]));\r\n    }\r\n\r\n    /**\r\n     * Returns a stream of keys in the map.\r\n     */\r\n    keys(): Stream<K> {\r\n        return stream(this.map.keys());\r\n    }\r\n\r\n    /**\r\n     * Returns a stream of values in the map.\r\n     */\r\n    values(): Stream<V> {\r\n        return stream(this.map.values()).flat();\r\n    }\r\n\r\n    /**\r\n     * Returns a stream of key, value set pairs for every key in the map.\r\n     */\r\n    entriesGroupedByKey(): Stream<[K, V[]]> {\r\n        return stream(this.map.entries());\r\n    }\r\n\r\n}\r\n\r\nexport class BiMap<K, V> {\r\n\r\n    private map = new Map<K, V>();\r\n    private inverse = new Map<V, K>();\r\n\r\n    get size(): number {\r\n        return this.map.size;\r\n    }\r\n\r\n    constructor()\r\n    constructor(elements: Array<[K, V]>)\r\n    constructor(elements?: Array<[K, V]>) {\r\n        if (elements) {\r\n            for (const [key, value] of elements) {\r\n                this.set(key, value);\r\n            }\r\n        }\r\n    }\r\n\r\n    clear(): void {\r\n        this.map.clear();\r\n        this.inverse.clear();\r\n    }\r\n\r\n    set(key: K, value: V): this {\r\n        this.map.set(key, value);\r\n        this.inverse.set(value, key);\r\n        return this;\r\n    }\r\n\r\n    get(key: K): V | undefined {\r\n        return this.map.get(key);\r\n    }\r\n\r\n    getKey(value: V): K | undefined {\r\n        return this.inverse.get(value);\r\n    }\r\n\r\n    delete(key: K): boolean {\r\n        const value = this.map.get(key);\r\n        if (value !== undefined) {\r\n            this.map.delete(key);\r\n            this.inverse.delete(value);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021-2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription } from '../syntax-tree.js';\r\nimport type { AstNodeDescriptionProvider } from '../workspace/ast-descriptions.js';\r\nimport type { LangiumDocument, PrecomputedScopes } from '../workspace/documents.js';\r\nimport type { NameProvider } from './name-provider.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { streamAllContents, streamContents } from '../utils/ast-utils.js';\r\nimport { MultiMap } from '../utils/collections.js';\r\nimport { interruptAndCheck } from '../utils/promise-utils.js';\r\n\r\n/**\r\n * Language-specific service for precomputing global and local scopes. The service methods are executed\r\n * as the first and second phase in the `DocumentBuilder`.\r\n */\r\nexport interface ScopeComputation {\r\n\r\n    /**\r\n     * Creates descriptions of all AST nodes that shall be exported into the _global_ scope from the given\r\n     * document. These descriptions are gathered by the `IndexManager` and stored in the global index so\r\n     * they can be referenced from other documents.\r\n     *\r\n     * _Note:_ You should not resolve any cross-references in this service method. Cross-reference resolution\r\n     * depends on the scope computation phase to be completed (`computeScope` method), which runs after the\r\n     * initial indexing where this method is used.\r\n     *\r\n     * @param document The document from which to gather exported AST nodes.\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    computeExports(document: LangiumDocument, cancelToken?: CancellationToken): Promise<AstNodeDescription[]>;\r\n\r\n    /**\r\n     * Precomputes the _local_ scopes for a document, which are necessary for the default way of\r\n     * resolving references to symbols in the same document. The result is a multimap assigning a\r\n     * set of AST node descriptions to every level of the AST. These data are used by the `ScopeProvider`\r\n     * service to determine which target nodes are visible in the context of a specific cross-reference.\r\n     *\r\n     * _Note:_ You should not resolve any cross-references in this service method. Cross-reference\r\n     * resolution depends on the scope computation phase to be completed.\r\n     *\r\n     * @param document The document in which to compute scopes.\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    computeLocalScopes(document: LangiumDocument, cancelToken?: CancellationToken): Promise<PrecomputedScopes>;\r\n\r\n}\r\n\r\n/**\r\n * The default scope computation creates and collectes descriptions of the AST nodes to be exported into the\r\n * _global_ scope from the given document. By default those are the document's root AST node and its directly\r\n * contained child nodes.\r\n *\r\n * Besides, it gathers all AST nodes that have a name (according to the `NameProvider` service) and includes them\r\n * in the local scope of their particular container nodes. As a result, for every cross-reference in the AST,\r\n * target elements from the same level (siblings) and further up towards the root (parents and siblings of parents)\r\n * are visible. Elements being nested inside lower levels (children, children of siblings and parents' siblings)\r\n * are _invisible_ by default, but that can be changed by customizing this service.\r\n */\r\nexport class DefaultScopeComputation implements ScopeComputation {\r\n\r\n    protected readonly nameProvider: NameProvider;\r\n    protected readonly descriptions: AstNodeDescriptionProvider;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.nameProvider = services.references.NameProvider;\r\n        this.descriptions = services.workspace.AstNodeDescriptionProvider;\r\n    }\r\n\r\n    async computeExports(document: LangiumDocument, cancelToken = CancellationToken.None): Promise<AstNodeDescription[]> {\r\n        return this.computeExportsForNode(document.parseResult.value, document, undefined, cancelToken);\r\n    }\r\n\r\n    /**\r\n     * Creates {@link AstNodeDescription AstNodeDescriptions} for the given {@link AstNode parentNode} and its children.\r\n     * The list of children to be considered is determined by the function parameter {@link children}.\r\n     * By default only the direct children of {@link parentNode} are visited, nested nodes are not exported.\r\n     *\r\n     * @param parentNode AST node to be exported, i.e., of which an {@link AstNodeDescription} shall be added to the returned list.\r\n     * @param document The document containing the AST node to be exported.\r\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}.\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCancelled` if a user action occurs during execution.\r\n     * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index.\r\n     */\r\n    async computeExportsForNode(parentNode: AstNode, document: LangiumDocument<AstNode>, children: (root: AstNode) => Iterable<AstNode> = streamContents, cancelToken: CancellationToken = CancellationToken.None): Promise<AstNodeDescription[]> {\r\n        const exports: AstNodeDescription[] = [];\r\n\r\n        this.exportNode(parentNode, exports, document);\r\n        for (const node of children(parentNode)) {\r\n            await interruptAndCheck(cancelToken);\r\n            this.exportNode(node, exports, document);\r\n        }\r\n        return exports;\r\n    }\r\n\r\n    /**\r\n     * Add a single node to the list of exports if it has a name. Override this method to change how\r\n     * symbols are exported, e.g. by modifying their exported name.\r\n     */\r\n    protected exportNode(node: AstNode, exports: AstNodeDescription[], document: LangiumDocument): void {\r\n        const name = this.nameProvider.getName(node);\r\n        if (name) {\r\n            exports.push(this.descriptions.createDescription(node, name, document));\r\n        }\r\n    }\r\n\r\n    async computeLocalScopes(document: LangiumDocument, cancelToken = CancellationToken.None): Promise<PrecomputedScopes> {\r\n        const rootNode = document.parseResult.value;\r\n        const scopes = new MultiMap<AstNode, AstNodeDescription>();\r\n        // Here we navigate the full AST - local scopes shall be available in the whole document\r\n        for (const node of streamAllContents(rootNode)) {\r\n            await interruptAndCheck(cancelToken);\r\n            this.processNode(node, document, scopes);\r\n        }\r\n        return scopes;\r\n    }\r\n\r\n    /**\r\n     * Process a single node during scopes computation. The default implementation makes the node visible\r\n     * in the subtree of its container (if the node has a name). Override this method to change this,\r\n     * e.g. by increasing the visibility to a higher level in the AST.\r\n     */\r\n    protected processNode(node: AstNode, document: LangiumDocument, scopes: PrecomputedScopes): void {\r\n        const container = node.$container;\r\n        if (container) {\r\n            const name = this.nameProvider.getName(node);\r\n            if (name) {\r\n                scopes.add(container, this.descriptions.createDescription(node, name, document));\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AstNodeDescription } from '../syntax-tree.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { EMPTY_STREAM, stream } from '../utils/stream.js';\r\n\r\n/**\r\n * A scope describes what target elements are visible from a specific cross-reference context.\r\n */\r\nexport interface Scope {\r\n\r\n    /**\r\n     * Find a target element matching the given name. If no element is found, `undefined` is returned.\r\n     * If multiple matching elements are present, the selection of the returned element should be done\r\n     * according to the semantics of your language. Usually it is the element that is most closely defined.\r\n     *\r\n     * @param name Name of the cross-reference target as it appears in the source text.\r\n     */\r\n    getElement(name: string): AstNodeDescription | undefined;\r\n\r\n    /**\r\n     * Create a stream of all elements in the scope. This is used to compute completion proposals to be\r\n     * shown in the editor.\r\n     */\r\n    getAllElements(): Stream<AstNodeDescription>;\r\n\r\n}\r\n\r\nexport interface ScopeOptions {\r\n    caseInsensitive?: boolean;\r\n}\r\n\r\n/**\r\n * The default scope implementation is based on a `Stream`. It has an optional _outer scope_ describing\r\n * the next level of elements, which are queried when a target element is not found in the stream provided\r\n * to this scope.\r\n */\r\nexport class StreamScope implements Scope {\r\n    readonly elements: Stream<AstNodeDescription>;\r\n    readonly outerScope?: Scope;\r\n    readonly caseInsensitive: boolean;\r\n\r\n    constructor(elements: Stream<AstNodeDescription>, outerScope?: Scope, options?: ScopeOptions) {\r\n        this.elements = elements;\r\n        this.outerScope = outerScope;\r\n        this.caseInsensitive = options?.caseInsensitive ?? false;\r\n    }\r\n\r\n    getAllElements(): Stream<AstNodeDescription> {\r\n        if (this.outerScope) {\r\n            return this.elements.concat(this.outerScope.getAllElements());\r\n        } else {\r\n            return this.elements;\r\n        }\r\n    }\r\n\r\n    getElement(name: string): AstNodeDescription | undefined {\r\n        const local = this.caseInsensitive\r\n            ? this.elements.find(e => e.name.toLowerCase() === name.toLowerCase())\r\n            : this.elements.find(e => e.name === name);\r\n        if (local) {\r\n            return local;\r\n        }\r\n        if (this.outerScope) {\r\n            return this.outerScope.getElement(name);\r\n        }\r\n        return undefined;\r\n    }\r\n}\r\n\r\nexport class MapScope implements Scope {\r\n    readonly elements: Map<string, AstNodeDescription>;\r\n    readonly outerScope?: Scope;\r\n    readonly caseInsensitive: boolean;\r\n\r\n    constructor(elements: Iterable<AstNodeDescription>, outerScope?: Scope, options?: ScopeOptions) {\r\n        this.elements = new Map();\r\n        this.caseInsensitive = options?.caseInsensitive ?? false;\r\n        for (const element of elements) {\r\n            const name = this.caseInsensitive\r\n                ? element.name.toLowerCase()\r\n                : element.name;\r\n            this.elements.set(name, element);\r\n        }\r\n        this.outerScope = outerScope;\r\n    }\r\n\r\n    getElement(name: string): AstNodeDescription | undefined {\r\n        const localName = this.caseInsensitive ? name.toLowerCase() : name;\r\n        const local = this.elements.get(localName);\r\n        if (local) {\r\n            return local;\r\n        }\r\n        if (this.outerScope) {\r\n            return this.outerScope.getElement(name);\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    getAllElements(): Stream<AstNodeDescription> {\r\n        let elementStream = stream(this.elements.values());\r\n        if (this.outerScope) {\r\n            elementStream = elementStream.concat(this.outerScope.getAllElements());\r\n        }\r\n        return elementStream;\r\n    }\r\n\r\n}\r\n\r\nexport const EMPTY_SCOPE: Scope = {\r\n    getElement(): undefined {\r\n        return undefined;\r\n    },\r\n    getAllElements(): Stream<AstNodeDescription> {\r\n        return EMPTY_STREAM;\r\n    }\r\n};\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { Disposable } from './disposable.js';\r\nimport type { URI } from './uri-utils.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { DocumentState } from '../workspace/documents.js';\r\n\r\nexport abstract class DisposableCache implements Disposable {\r\n\r\n    protected toDispose: Disposable[] = [];\r\n    protected isDisposed = false;\r\n\r\n    onDispose(disposable: Disposable): void {\r\n        this.toDispose.push(disposable);\r\n    }\r\n\r\n    dispose(): void {\r\n        this.throwIfDisposed();\r\n        this.clear();\r\n        this.isDisposed = true;\r\n        this.toDispose.forEach(disposable => disposable.dispose());\r\n    }\r\n\r\n    protected throwIfDisposed(): void {\r\n        if (this.isDisposed) {\r\n            throw new Error('This cache has already been disposed');\r\n        }\r\n    }\r\n\r\n    abstract clear(): void;\r\n}\r\n\r\nexport class SimpleCache<K, V> extends DisposableCache {\r\n    protected readonly cache = new Map<K, V>();\r\n\r\n    has(key: K): boolean {\r\n        this.throwIfDisposed();\r\n        return this.cache.has(key);\r\n    }\r\n\r\n    set(key: K, value: V): void {\r\n        this.throwIfDisposed();\r\n        this.cache.set(key, value);\r\n    }\r\n\r\n    get(key: K): V | undefined;\r\n    get(key: K, provider: () => V): V;\r\n    get(key: K, provider?: () => V): V | undefined {\r\n        this.throwIfDisposed();\r\n        if (this.cache.has(key)) {\r\n            return this.cache.get(key);\r\n        } else if (provider) {\r\n            const value = provider();\r\n            this.cache.set(key, value);\r\n            return value;\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    delete(key: K): boolean {\r\n        this.throwIfDisposed();\r\n        return this.cache.delete(key);\r\n    }\r\n\r\n    clear(): void {\r\n        this.throwIfDisposed();\r\n        this.cache.clear();\r\n    }\r\n}\r\n\r\nexport class ContextCache<Context, Key, Value, ContextKey = Context> extends DisposableCache {\r\n\r\n    private readonly cache = new Map<ContextKey | Context, Map<Key, Value>>();\r\n    private readonly converter: (input: Context) => ContextKey | Context;\r\n\r\n    constructor(converter?: (input: Context) => ContextKey) {\r\n        super();\r\n        this.converter = converter ?? (value => value);\r\n    }\r\n\r\n    has(contextKey: Context, key: Key): boolean {\r\n        this.throwIfDisposed();\r\n        return this.cacheForContext(contextKey).has(key);\r\n    }\r\n\r\n    set(contextKey: Context, key: Key, value: Value): void {\r\n        this.throwIfDisposed();\r\n        this.cacheForContext(contextKey).set(key, value);\r\n    }\r\n\r\n    get(contextKey: Context, key: Key): Value | undefined;\r\n    get(contextKey: Context, key: Key, provider: () => Value): Value;\r\n    get(contextKey: Context, key: Key, provider?: () => Value): Value | undefined {\r\n        this.throwIfDisposed();\r\n        const contextCache = this.cacheForContext(contextKey);\r\n        if (contextCache.has(key)) {\r\n            return contextCache.get(key);\r\n        } else if (provider) {\r\n            const value = provider();\r\n            contextCache.set(key, value);\r\n            return value;\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    delete(contextKey: Context, key: Key): boolean {\r\n        this.throwIfDisposed();\r\n        return this.cacheForContext(contextKey).delete(key);\r\n    }\r\n\r\n    clear(): void;\r\n    clear(contextKey: Context): void;\r\n    clear(contextKey?: Context): void {\r\n        this.throwIfDisposed();\r\n        if (contextKey) {\r\n            const mapKey = this.converter(contextKey);\r\n            this.cache.delete(mapKey);\r\n        } else {\r\n            this.cache.clear();\r\n        }\r\n    }\r\n\r\n    protected cacheForContext(contextKey: Context): Map<Key, Value> {\r\n        const mapKey = this.converter(contextKey);\r\n        let documentCache = this.cache.get(mapKey);\r\n        if (!documentCache) {\r\n            documentCache = new Map();\r\n            this.cache.set(mapKey, documentCache);\r\n        }\r\n        return documentCache;\r\n    }\r\n}\r\n\r\n/**\r\n * Every key/value pair in this cache is scoped to a document.\r\n * If this document is changed or deleted, all associated key/value pairs are deleted.\r\n */\r\nexport class DocumentCache<K, V> extends ContextCache<URI | string, K, V, string> {\r\n\r\n    /**\r\n     * Creates a new document cache.\r\n     *\r\n     * @param sharedServices Service container instance to hook into document lifecycle events.\r\n     * @param state Optional document state on which the cache should evict.\r\n     * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.\r\n     * *Deleted* documents are considered in both cases.\r\n     *\r\n     * Providing a state here will use `DocumentBuilder#onDocumentPhase` instead,\r\n     * which triggers on all documents that have been affected by this change, assuming that the\r\n     * state is `DocumentState.Linked` or a later state.\r\n     */\r\n    constructor(sharedServices: LangiumSharedCoreServices, state?: DocumentState) {\r\n        super(uri => uri.toString());\r\n        if (state) {\r\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onDocumentPhase(state, document => {\r\n                this.clear(document.uri.toString());\r\n            }));\r\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {\r\n                for (const uri of deleted) { // react only on deleted documents\r\n                    this.clear(uri);\r\n                }\r\n            }));\r\n        } else {\r\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((changed, deleted) => {\r\n                const allUris = changed.concat(deleted); // react on both changed and deleted documents\r\n                for (const uri of allUris) {\r\n                    this.clear(uri);\r\n                }\r\n            }));\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Every key/value pair in this cache is scoped to the whole workspace.\r\n * If any document in the workspace is added, changed or deleted, the whole cache is evicted.\r\n */\r\nexport class WorkspaceCache<K, V> extends SimpleCache<K, V> {\r\n\r\n    /**\r\n     * Creates a new workspace cache.\r\n     *\r\n     * @param sharedServices Service container instance to hook into document lifecycle events.\r\n     * @param state Optional document state on which the cache should evict.\r\n     * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.\r\n     * *Deleted* documents are considered in both cases.\r\n     */\r\n    constructor(sharedServices: LangiumSharedCoreServices, state?: DocumentState) {\r\n        super();\r\n        if (state) {\r\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onBuildPhase(state, () => {\r\n                this.clear();\r\n            }));\r\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {\r\n                if (deleted.length > 0) { // react only on deleted documents\r\n                    this.clear();\r\n                }\r\n            }));\r\n        } else {\r\n            this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate(() => { // react on both changed and deleted documents\r\n                this.clear();\r\n            }));\r\n        }\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021-2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, AstReflection, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport type { AstNodeDescriptionProvider } from '../workspace/ast-descriptions.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { NameProvider } from './name-provider.js';\r\nimport type { Scope, ScopeOptions} from './scope.js';\r\nimport { MapScope, StreamScope } from './scope.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { WorkspaceCache } from '../utils/caching.js';\r\n\r\n/**\r\n * Language-specific service for determining the scope of target elements visible in a specific cross-reference context.\r\n */\r\nexport interface ScopeProvider {\r\n\r\n    /**\r\n     * Return a scope describing what elements are visible for the given AST node and cross-reference\r\n     * identifier.\r\n     *\r\n     * @param context Information about the reference for which a scope is requested.\r\n     */\r\n    getScope(context: ReferenceInfo): Scope;\r\n\r\n}\r\n\r\nexport class DefaultScopeProvider implements ScopeProvider {\r\n\r\n    protected readonly reflection: AstReflection;\r\n    protected readonly nameProvider: NameProvider;\r\n    protected readonly descriptions: AstNodeDescriptionProvider;\r\n    protected readonly indexManager: IndexManager;\r\n\r\n    protected readonly globalScopeCache: WorkspaceCache<string, Scope>;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.reflection = services.shared.AstReflection;\r\n        this.nameProvider = services.references.NameProvider;\r\n        this.descriptions = services.workspace.AstNodeDescriptionProvider;\r\n        this.indexManager = services.shared.workspace.IndexManager;\r\n        this.globalScopeCache = new WorkspaceCache<string, Scope>(services.shared);\r\n    }\r\n\r\n    getScope(context: ReferenceInfo): Scope {\r\n        const scopes: Array<Stream<AstNodeDescription>> = [];\r\n        const referenceType = this.reflection.getReferenceType(context);\r\n\r\n        const precomputed = getDocument(context.container).precomputedScopes;\r\n        if (precomputed) {\r\n            let currentNode: AstNode | undefined = context.container;\r\n            do {\r\n                const allDescriptions = precomputed.get(currentNode);\r\n                if (allDescriptions.length > 0) {\r\n                    scopes.push(stream(allDescriptions).filter(\r\n                        desc => this.reflection.isSubtype(desc.type, referenceType)));\r\n                }\r\n                currentNode = currentNode.$container;\r\n            } while (currentNode);\r\n        }\r\n\r\n        let result: Scope = this.getGlobalScope(referenceType, context);\r\n        for (let i = scopes.length - 1; i >= 0; i--) {\r\n            result = this.createScope(scopes[i], result);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * Create a scope for the given collection of AST node descriptions.\r\n     */\r\n    protected createScope(elements: Iterable<AstNodeDescription>, outerScope?: Scope, options?: ScopeOptions): Scope {\r\n        return new StreamScope(stream(elements), outerScope, options);\r\n    }\r\n\r\n    /**\r\n     * Create a scope for the given collection of AST nodes, which need to be transformed into respective\r\n     * descriptions first. This is done using the `NameProvider` and `AstNodeDescriptionProvider` services.\r\n     */\r\n    protected createScopeForNodes(elements: Iterable<AstNode>, outerScope?: Scope, options?: ScopeOptions): Scope {\r\n        const s = stream(elements).map(e => {\r\n            const name = this.nameProvider.getName(e);\r\n            if (name) {\r\n                return this.descriptions.createDescription(e, name);\r\n            }\r\n            return undefined;\r\n        }).nonNullable();\r\n        return new StreamScope(s, outerScope, options);\r\n    }\r\n\r\n    /**\r\n     * Create a global scope filtered for the given reference type.\r\n     */\r\n    protected getGlobalScope(referenceType: string, _context: ReferenceInfo): Scope {\r\n        return this.globalScopeCache.get(referenceType, () => new MapScope(this.indexManager.allElements(referenceType)));\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { URI } from 'vscode-uri';\r\nimport type { CommentProvider } from '../documentation/comment-provider.js';\r\nimport type { NameProvider } from '../references/name-provider.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, CstNode, GenericAstNode, Mutable, Reference } from '../syntax-tree.js';\r\nimport { isAstNode, isReference } from '../syntax-tree.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { findNodesForProperty } from '../utils/grammar-utils.js';\r\nimport type { AstNodeLocator } from '../workspace/ast-node-locator.js';\r\nimport type { DocumentSegment, LangiumDocument, LangiumDocuments } from '../workspace/documents.js';\r\n\r\nexport interface JsonSerializeOptions {\r\n    /** The space parameter for `JSON.stringify`, controlling whether and how to pretty-print the output. */\r\n    space?: string | number;\r\n    /** Whether to include the `$refText` property for references (the name used to identify the target node). */\r\n    refText?: boolean;\r\n    /** Whether to include the `$sourceText` property, which holds the full source text from which an AST node was parsed. */\r\n    sourceText?: boolean;\r\n    /** Whether to include the `$textRegion` property, which holds information to trace AST node properties to their respective source text regions. */\r\n    textRegions?: boolean;\r\n    /** Whether to include the `$comment` property, which holds comments according to the CommentProvider service. */\r\n    comments?: boolean;\r\n    /** The replacer parameter for `JSON.stringify`; the default replacer given as parameter should be used to apply basic replacements. */\r\n    replacer?: (key: string, value: unknown, defaultReplacer: (key: string, value: unknown) => unknown) => unknown\r\n    /** Used to convert and serialize URIs when the target of a cross-reference is in a different document. */\r\n    uriConverter?: (uri: URI, reference: Reference) => string\r\n}\r\n\r\nexport interface JsonDeserializeOptions {\r\n    /** Used to parse and convert URIs when the target of a cross-reference is in a different document. */\r\n    uriConverter?: (uri: string) => URI\r\n}\r\n\r\n/**\r\n * {@link AstNode}s that may carry information on their definition area within the DSL text.\r\n */\r\nexport interface AstNodeWithTextRegion extends AstNode {\r\n    $sourceText?: string;\r\n    $textRegion?: AstNodeRegionWithAssignments;\r\n}\r\n\r\n/**\r\n * {@link AstNode}s that may carry a semantically relevant comment.\r\n */\r\nexport interface AstNodeWithComment extends AstNode {\r\n    $comment?: string;\r\n}\r\n\r\nexport function isAstNodeWithComment(node: AstNode): node is AstNodeWithComment {\r\n    return typeof (node as AstNodeWithComment).$comment === 'string';\r\n}\r\n\r\n/**\r\n * A {@link DocumentSegment} representing the definition area of an AstNode within the DSL text.\r\n * Usually contains text region information on all assigned property values of the AstNode,\r\n * and may contain the defining file's URI as string.\r\n */\r\nexport interface AstNodeRegionWithAssignments extends DocumentSegment {\r\n    /**\r\n     * A record containing an entry for each assigned property of the AstNode.\r\n     * The key is equal to the property name and the value is an array of the property values'\r\n     * text regions, regardless of whether the property is a single value or list property.\r\n     */\r\n    assignments?: Record<string, DocumentSegment[]>;\r\n    /**\r\n     * The AstNode defining file's URI as string\r\n     */\r\n    documentURI?: string;\r\n}\r\n\r\n/**\r\n * Utility service for transforming an `AstNode` into a JSON string and vice versa.\r\n */\r\nexport interface JsonSerializer {\r\n    /**\r\n     * Serialize an `AstNode` into a JSON `string`.\r\n     * @param node The `AstNode` to be serialized.\r\n     * @param options Serialization options\r\n     */\r\n    serialize(node: AstNode, options?: JsonSerializeOptions): string;\r\n    /**\r\n     * Deserialize (parse) a JSON `string` into an `AstNode`.\r\n     */\r\n    deserialize<T extends AstNode = AstNode>(content: string, options?: JsonDeserializeOptions): T;\r\n}\r\n\r\n/**\r\n * A cross-reference in the serialized JSON representation of an AstNode.\r\n */\r\ninterface IntermediateReference {\r\n    /** URI pointing to the target element. This is either `#${path}` if the target is in the same document, or `${documentURI}#${path}` otherwise. */\r\n    $ref?: string\r\n    /** The actual text used to look up the reference target in the surrounding scope. */\r\n    $refText?: string\r\n    /** If any problem occurred while resolving the reference, it is described by this property. */\r\n    $error?: string\r\n}\r\n\r\nfunction isIntermediateReference(obj: unknown): obj is IntermediateReference {\r\n    return typeof obj === 'object' && !!obj && ('$ref' in obj || '$error' in obj);\r\n}\r\n\r\nexport class DefaultJsonSerializer implements JsonSerializer {\r\n\r\n    /** The set of AstNode properties to be ignored by the serializer. */\r\n    ignoreProperties = new Set(['$container', '$containerProperty', '$containerIndex', '$document', '$cstNode']);\r\n\r\n    /** The document that is currently processed by the serializer; this is used by the replacer function.  */\r\n    protected currentDocument: LangiumDocument | undefined;\r\n\r\n    protected readonly langiumDocuments: LangiumDocuments;\r\n    protected readonly astNodeLocator: AstNodeLocator;\r\n    protected readonly nameProvider: NameProvider;\r\n    protected readonly commentProvider: CommentProvider;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.langiumDocuments = services.shared.workspace.LangiumDocuments;\r\n        this.astNodeLocator = services.workspace.AstNodeLocator;\r\n        this.nameProvider = services.references.NameProvider;\r\n        this.commentProvider = services.documentation.CommentProvider;\r\n    }\r\n\r\n    serialize(node: AstNode, options?: JsonSerializeOptions): string {\r\n        const serializeOptions = options ?? {};\r\n        const specificReplacer = options?.replacer;\r\n        const defaultReplacer = (key: string, value: unknown) => this.replacer(key, value, serializeOptions);\r\n        const replacer = specificReplacer ? (key: string, value: unknown) => specificReplacer(key, value, defaultReplacer) : defaultReplacer;\r\n\r\n        try {\r\n            this.currentDocument = getDocument(node);\r\n            return JSON.stringify(node, replacer, options?.space);\r\n        } finally {\r\n            this.currentDocument = undefined;\r\n        }\r\n    }\r\n\r\n    deserialize<T extends AstNode = AstNode>(content: string, options?: JsonDeserializeOptions): T {\r\n        const deserializeOptions = options ?? {};\r\n        const root = JSON.parse(content);\r\n        this.linkNode(root, root, deserializeOptions);\r\n        return root;\r\n    }\r\n\r\n    protected replacer(key: string, value: unknown, { refText, sourceText, textRegions, comments, uriConverter }: JsonSerializeOptions): unknown {\r\n        if (this.ignoreProperties.has(key)) {\r\n            return undefined;\r\n        } else if (isReference(value)) {\r\n            const refValue = value.ref;\r\n            const $refText = refText ? value.$refText : undefined;\r\n            if (refValue) {\r\n                const targetDocument = getDocument(refValue);\r\n                let targetUri = '';\r\n                if (this.currentDocument && this.currentDocument !== targetDocument) {\r\n                    if (uriConverter) {\r\n                        targetUri = uriConverter(targetDocument.uri, value);\r\n                    } else {\r\n                        targetUri = targetDocument.uri.toString();\r\n                    }\r\n                }\r\n                const targetPath = this.astNodeLocator.getAstNodePath(refValue);\r\n                return {\r\n                    $ref: `${targetUri}#${targetPath}`,\r\n                    $refText\r\n                } satisfies IntermediateReference;\r\n            } else {\r\n                return {\r\n                    $error: value.error?.message ?? 'Could not resolve reference',\r\n                    $refText\r\n                } satisfies IntermediateReference;\r\n            }\r\n        } else if (isAstNode(value)) {\r\n            let astNode: AstNodeWithTextRegion | undefined = undefined;\r\n            if (textRegions) {\r\n                astNode = this.addAstNodeRegionWithAssignmentsTo({ ...value });\r\n                if ((!key || value.$document) && astNode?.$textRegion) {\r\n                    // The document URI is added to the root node of the resulting JSON tree\r\n                    astNode.$textRegion.documentURI = this.currentDocument?.uri.toString();\r\n                }\r\n            }\r\n            if (sourceText && !key) {\r\n                astNode ??= { ...value };\r\n                astNode.$sourceText = value.$cstNode?.text;\r\n            }\r\n            if (comments) {\r\n                astNode ??= { ...value };\r\n                const comment = this.commentProvider.getComment(value);\r\n                if (comment) {\r\n                    (astNode as AstNodeWithComment).$comment = comment.replace(/\\r/g, '');\r\n                }\r\n            }\r\n            return astNode ?? value;\r\n        } else {\r\n            return value;\r\n        }\r\n    }\r\n\r\n    protected addAstNodeRegionWithAssignmentsTo(node: AstNodeWithTextRegion) {\r\n        const createDocumentSegment: (cstNode: CstNode) => AstNodeRegionWithAssignments = cstNode => <DocumentSegment>{\r\n            offset: cstNode.offset,\r\n            end: cstNode.end,\r\n            length: cstNode.length,\r\n            range: cstNode.range,\r\n        };\r\n\r\n        if (node.$cstNode) {\r\n            const textRegion = node.$textRegion = createDocumentSegment(node.$cstNode);\r\n            const assignments: Record<string, DocumentSegment[]> = textRegion.assignments = {};\r\n\r\n            Object.keys(node).filter(key => !key.startsWith('$')).forEach(key => {\r\n                const propertyAssignments = findNodesForProperty(node.$cstNode, key).map(createDocumentSegment);\r\n                if (propertyAssignments.length !== 0) {\r\n                    assignments[key] = propertyAssignments;\r\n                }\r\n            });\r\n\r\n            return node;\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    protected linkNode(node: GenericAstNode, root: AstNode, options: JsonDeserializeOptions, container?: AstNode, containerProperty?: string, containerIndex?: number) {\r\n        for (const [propertyName, item] of Object.entries(node)) {\r\n            if (Array.isArray(item)) {\r\n                for (let index = 0; index < item.length; index++) {\r\n                    const element = item[index];\r\n                    if (isIntermediateReference(element)) {\r\n                        item[index] = this.reviveReference(node, propertyName, root, element, options);\r\n                    } else if (isAstNode(element)) {\r\n                        this.linkNode(element as GenericAstNode, root, options, node, propertyName, index);\r\n                    }\r\n                }\r\n            } else if (isIntermediateReference(item)) {\r\n                node[propertyName] = this.reviveReference(node, propertyName, root, item, options);\r\n            } else if (isAstNode(item)) {\r\n                this.linkNode(item as GenericAstNode, root, options, node, propertyName);\r\n            }\r\n        }\r\n        const mutable = node as Mutable<AstNode>;\r\n        mutable.$container = container;\r\n        mutable.$containerProperty = containerProperty;\r\n        mutable.$containerIndex = containerIndex;\r\n    }\r\n\r\n    protected reviveReference(container: AstNode, property: string, root: AstNode, reference: IntermediateReference, options: JsonDeserializeOptions): Reference | undefined {\r\n        let refText = reference.$refText;\r\n        let error = reference.$error;\r\n        if (reference.$ref) {\r\n            const ref = this.getRefNode(root, reference.$ref, options.uriConverter);\r\n            if (isAstNode(ref)) {\r\n                if (!refText) {\r\n                    refText = this.nameProvider.getName(ref);\r\n                }\r\n                return {\r\n                    $refText: refText ?? '',\r\n                    ref\r\n                };\r\n            } else {\r\n                error = ref;\r\n            }\r\n        }\r\n        if (error) {\r\n            const ref: Mutable<Reference> = {\r\n                $refText: refText ?? ''\r\n            };\r\n            ref.error = {\r\n                container,\r\n                property,\r\n                message: error,\r\n                reference: ref\r\n            };\r\n            return ref;\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    protected getRefNode(root: AstNode, uri: string, uriConverter?: (uri: string) => URI): AstNode | string {\r\n        try {\r\n            const fragmentIndex = uri.indexOf('#');\r\n            if (fragmentIndex === 0) {\r\n                const node = this.astNodeLocator.getAstNode(root, uri.substring(1));\r\n                if (!node) {\r\n                    return 'Could not resolve path: ' + uri;\r\n                }\r\n                return node;\r\n            }\r\n            if (fragmentIndex < 0) {\r\n                const documentUri = uriConverter ? uriConverter(uri) : URI.parse(uri);\r\n                const document = this.langiumDocuments.getDocument(documentUri);\r\n                if (!document) {\r\n                    return 'Could not find document for URI: ' + uri;\r\n                }\r\n                return document.parseResult.value;\r\n            }\r\n            const documentUri = uriConverter ? uriConverter(uri.substring(0, fragmentIndex)) : URI.parse(uri.substring(0, fragmentIndex));\r\n            const document = this.langiumDocuments.getDocument(documentUri);\r\n            if (!document) {\r\n                return 'Could not find document for URI: ' + uri;\r\n            }\r\n            if (fragmentIndex === uri.length - 1) {\r\n                return document.parseResult.value;\r\n            }\r\n            const node = this.astNodeLocator.getAstNode(document.parseResult.value, uri.substring(fragmentIndex + 1));\r\n            if (!node) {\r\n                return 'Could not resolve URI: ' + uri;\r\n            }\r\n            return node;\r\n        } catch (err) {\r\n            return String(err);\r\n        }\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices, LangiumSharedCoreServices } from './services.js';\r\nimport type { TextDocumentProvider } from './workspace/documents.js';\r\nimport { UriUtils, type URI } from './utils/uri-utils.js';\r\n\r\n/**\r\n * The service registry provides access to the language-specific {@link LangiumCoreServices} optionally including LSP-related services.\r\n * These are resolved via the URI of a text document.\r\n */\r\nexport interface ServiceRegistry {\r\n\r\n    /**\r\n     * Register a language via its injected services.\r\n     */\r\n    register(language: LangiumCoreServices): void;\r\n\r\n    /**\r\n     * Retrieve the language-specific services for the given URI. In case only one language is\r\n     * registered, it may be used regardless of the URI format.\r\n     */\r\n    getServices(uri: URI): LangiumCoreServices;\r\n\r\n    /**\r\n     * Check whether services are available for the given URI.\r\n     */\r\n    hasServices(uri: URI): boolean;\r\n\r\n    /**\r\n     * The full set of registered language services.\r\n     */\r\n    readonly all: readonly LangiumCoreServices[];\r\n}\r\n\r\n/**\r\n * Generic registry for Langium services, but capable of being used with extending service sets as well (such as the lsp-complete LangiumCoreServices set)\r\n */\r\nexport class DefaultServiceRegistry implements ServiceRegistry {\r\n\r\n    protected singleton?: LangiumCoreServices;\r\n    protected readonly languageIdMap = new Map<string, LangiumCoreServices>();\r\n    protected readonly fileExtensionMap = new Map<string, LangiumCoreServices>();\r\n\r\n    /**\r\n     * @deprecated Use the new `fileExtensionMap` (or `languageIdMap`) property instead.\r\n     */\r\n    protected get map(): Map<string, LangiumCoreServices> | undefined {\r\n        return this.fileExtensionMap;\r\n    }\r\n\r\n    protected readonly textDocuments?: TextDocumentProvider;\r\n\r\n    constructor(services?: LangiumSharedCoreServices) {\r\n        this.textDocuments = services?.workspace.TextDocuments;\r\n    }\r\n\r\n    register(language: LangiumCoreServices): void {\r\n        const data = language.LanguageMetaData;\r\n        for (const ext of data.fileExtensions) {\r\n            if (this.fileExtensionMap.has(ext)) {\r\n                console.warn(`The file extension ${ext} is used by multiple languages. It is now assigned to '${data.languageId}'.`);\r\n            }\r\n            this.fileExtensionMap.set(ext, language);\r\n        }\r\n        this.languageIdMap.set(data.languageId, language);\r\n        if (this.languageIdMap.size === 1) {\r\n            this.singleton = language;\r\n        } else {\r\n            this.singleton = undefined;\r\n        }\r\n    }\r\n\r\n    getServices(uri: URI): LangiumCoreServices {\r\n        if (this.singleton !== undefined) {\r\n            return this.singleton;\r\n        }\r\n        if (this.languageIdMap.size === 0) {\r\n            throw new Error('The service registry is empty. Use `register` to register the services of a language.');\r\n        }\r\n        const languageId = this.textDocuments?.get(uri)?.languageId;\r\n        if (languageId !== undefined) {\r\n            const services = this.languageIdMap.get(languageId);\r\n            if (services) {\r\n                return services;\r\n            }\r\n        }\r\n        const ext = UriUtils.extname(uri);\r\n        const services = this.fileExtensionMap.get(ext);\r\n        if (!services) {\r\n            if (languageId) {\r\n                throw new Error(`The service registry contains no services for the extension '${ext}' for language '${languageId}'.`);\r\n            } else {\r\n                throw new Error(`The service registry contains no services for the extension '${ext}'.`);\r\n            }\r\n        }\r\n        return services;\r\n    }\r\n\r\n    hasServices(uri: URI): boolean {\r\n        try {\r\n            this.getServices(uri);\r\n            return true;\r\n        } catch {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    get all(): readonly LangiumCoreServices[] {\r\n        return Array.from(this.languageIdMap.values());\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CodeDescription, DiagnosticRelatedInformation, DiagnosticTag, integer, Range } from 'vscode-languageserver-types';\r\nimport { assertUnreachable } from '../index.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstReflection, Properties } from '../syntax-tree.js';\r\nimport type { CancellationToken } from '../utils/cancellation.js';\r\nimport { MultiMap } from '../utils/collections.js';\r\nimport type { MaybePromise } from '../utils/promise-utils.js';\r\nimport { isOperationCancelled } from '../utils/promise-utils.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport type { DocumentSegment } from '../workspace/documents.js';\r\n\r\nexport type DiagnosticInfo<N extends AstNode, P extends string = Properties<N>> = {\r\n    /** The AST node to which the diagnostic is attached. */\r\n    node: N;\r\n    /** If a property name is given, the diagnostic is restricted to the corresponding text region. */\r\n    property?: P;\r\n    /** If the value of a keyword is given, the diagnostic will appear at its corresponding text region */\r\n    keyword?: string;\r\n    /** In case of a multi-value property (array), an index can be given to select a specific element. */\r\n    index?: number;\r\n    /** If you want to create a diagnostic independent to any property, use the range property. */\r\n    range?: Range;\r\n    /** The diagnostic's code, which usually appear in the user interface. */\r\n    code?: integer | string;\r\n    /** An optional property to describe the error code. */\r\n    codeDescription?: CodeDescription;\r\n    /** Additional metadata about the diagnostic. */\r\n    tags?: DiagnosticTag[];\r\n    /** An array of related diagnostic information, e.g. when symbol-names within a scope collide all definitions can be marked via this property. */\r\n    relatedInformation?: DiagnosticRelatedInformation[];\r\n    /** A data entry field that is preserved between a `textDocument/publishDiagnostics` notification and `textDocument/codeAction` request. */\r\n    data?: unknown;\r\n}\r\n\r\n/**\r\n * Shape of information commonly used in the `data` field of diagnostics.\r\n */\r\nexport interface DiagnosticData {\r\n    /** Diagnostic code for identifying which code action to apply. This code is _not_ shown in the user interface. */\r\n    code: string\r\n    /** Specifies where to apply the code action in the form of a `DocumentSegment`. */\r\n    actionSegment?: DocumentSegment\r\n    /** Specifies where to apply the code action in the form of a `Range`. */\r\n    actionRange?: Range\r\n}\r\n\r\n/**\r\n * Create DiagnosticData for a given diagnostic code. The result can be put into the `data` field of a DiagnosticInfo.\r\n */\r\nexport function diagnosticData(code: string): DiagnosticData {\r\n    return { code };\r\n}\r\n\r\nexport type ValidationSeverity = 'error' | 'warning' | 'info' | 'hint';\r\n\r\nexport type ValidationAcceptor = <N extends AstNode>(severity: ValidationSeverity, message: string, info: DiagnosticInfo<N>) => void\r\n\r\nexport type ValidationCheck<T extends AstNode = AstNode> = (node: T, accept: ValidationAcceptor, cancelToken: CancellationToken) => MaybePromise<void>;\r\n\r\n/**\r\n * A utility type for describing functions which will be called once before or after all the AstNodes of an AST/Langium document are validated.\r\n *\r\n * The AST is represented by its root AstNode.\r\n *\r\n * The given validation acceptor helps to report some early or lately detected issues.\r\n *\r\n * The 'categories' indicate, which validation categories are executed for all the AstNodes.\r\n * This helps to tailor the preparations/tear-down logic to the actually executed checks on the nodes.\r\n *\r\n * It is recommended to support interrupts during long-running logic with 'interruptAndCheck(cancelToken)'.\r\n */\r\nexport type ValidationPreparation = (rootNode: AstNode, accept: ValidationAcceptor, categories: ValidationCategory[], cancelToken: CancellationToken) => MaybePromise<void>;\r\n\r\n/**\r\n * A utility type for associating non-primitive AST types to corresponding validation checks. For example:\r\n *\r\n * ```ts\r\n *   const checks: ValidationChecks<StatemachineAstType> = {\r\n *       State: validator.checkStateNameStartsWithCapital\r\n *    };\r\n * ```\r\n *\r\n * If an AST type does not extend AstNode, e.g. if it describes a union of string literals, that type's name must not occur as a key in objects of type `ValidationCheck<...>`.\r\n *\r\n * @param T a type definition mapping language specific type names (keys) to the corresponding types (values)\r\n */\r\nexport type ValidationChecks<T> = {\r\n    [K in keyof T]?: T[K] extends AstNode ? ValidationCheck<T[K]> | Array<ValidationCheck<T[K]>> : never\r\n} & {\r\n    AstNode?: ValidationCheck<AstNode> | Array<ValidationCheck<AstNode>>;\r\n}\r\n\r\n/**\r\n * `fast` checks can be executed after every document change (i.e. as the user is typing). If a check\r\n * is too slow it can delay the response to document changes, yielding bad user experience. By marking\r\n * it as `slow`, it will be skipped for normal as-you-type validation. Then it's up to you when to\r\n * schedule these long-running checks: after the fast checks are done, or after saving a document,\r\n * or with an explicit command, etc.\r\n *\r\n * `built-in` checks are errors produced by the lexer, the parser, or the linker. They cannot be used\r\n * for custom validation checks.\r\n */\r\nexport type ValidationCategory = 'fast' | 'slow' | 'built-in'\r\n\r\nexport namespace ValidationCategory {\r\n    export const all: readonly ValidationCategory[] = ['fast', 'slow', 'built-in'];\r\n}\r\n\r\ntype ValidationCheckEntry = {\r\n    check: ValidationCheck\r\n    category: ValidationCategory\r\n}\r\n\r\n/**\r\n * Manages a set of `ValidationCheck`s to be applied when documents are validated.\r\n */\r\nexport class ValidationRegistry {\r\n    private readonly entries = new MultiMap<string, ValidationCheckEntry>();\r\n    private readonly reflection: AstReflection;\r\n\r\n    private entriesBefore: ValidationPreparation[] = [];\r\n    private entriesAfter: ValidationPreparation[] = [];\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.reflection = services.shared.AstReflection;\r\n    }\r\n\r\n    /**\r\n     * Register a set of validation checks. Each value in the record can be either a single validation check (i.e. a function)\r\n     * or an array of validation checks.\r\n     *\r\n     * @param checksRecord Set of validation checks to register.\r\n     * @param category Optional category for the validation checks (defaults to `'fast'`).\r\n     * @param thisObj Optional object to be used as `this` when calling the validation check functions.\r\n     */\r\n    register<T>(checksRecord: ValidationChecks<T>, thisObj: ThisParameterType<unknown> = this, category: ValidationCategory = 'fast'): void {\r\n        if (category === 'built-in') {\r\n            throw new Error(\"The 'built-in' category is reserved for lexer, parser, and linker errors.\");\r\n        }\r\n        for (const [type, ch] of Object.entries(checksRecord)) {\r\n            const callbacks = ch as ValidationCheck | ValidationCheck[];\r\n            if (Array.isArray(callbacks)) {\r\n                for (const check of callbacks) {\r\n                    const entry: ValidationCheckEntry = {\r\n                        check: this.wrapValidationException(check, thisObj),\r\n                        category\r\n                    };\r\n                    this.addEntry(type, entry);\r\n                }\r\n            } else if (typeof callbacks === 'function') {\r\n                const entry: ValidationCheckEntry = {\r\n                    check: this.wrapValidationException(callbacks, thisObj),\r\n                    category\r\n                };\r\n                this.addEntry(type, entry);\r\n            } else {\r\n                assertUnreachable(callbacks);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected wrapValidationException(check: ValidationCheck, thisObj: unknown): ValidationCheck {\r\n        return async (node, accept, cancelToken) => {\r\n            await this.handleException(() => check.call(thisObj, node, accept, cancelToken), 'An error occurred during validation', accept, node);\r\n        };\r\n    }\r\n\r\n    protected async handleException(functionality: () => MaybePromise<void>, messageContext: string, accept: ValidationAcceptor, node: AstNode): Promise<void> {\r\n        try {\r\n            await functionality();\r\n        } catch (err) {\r\n            if (isOperationCancelled(err)) {\r\n                throw err;\r\n            }\r\n            console.error(`${messageContext}:`, err);\r\n            if (err instanceof Error && err.stack) {\r\n                console.error(err.stack);\r\n            }\r\n            const messageDetails = err instanceof Error ? err.message : String(err);\r\n            accept('error', `${messageContext}: ${messageDetails}`, { node });\r\n        }\r\n    }\r\n\r\n    protected addEntry(type: string, entry: ValidationCheckEntry): void {\r\n        if (type === 'AstNode') {\r\n            this.entries.add('AstNode', entry);\r\n            return;\r\n        }\r\n        for (const subtype of this.reflection.getAllSubTypes(type)) {\r\n            this.entries.add(subtype, entry);\r\n        }\r\n    }\r\n\r\n    getChecks(type: string, categories?: ValidationCategory[]): Stream<ValidationCheck> {\r\n        let checks = stream(this.entries.get(type))\r\n            .concat(this.entries.get('AstNode'));\r\n        if (categories) {\r\n            checks = checks.filter(entry => categories.includes(entry.category));\r\n        }\r\n        return checks.map(entry => entry.check);\r\n    }\r\n\r\n    /**\r\n     * Register logic which will be executed once before validating all the nodes of an AST/Langium document.\r\n     * This helps to prepare or initialize some information which are required or reusable for the following checks on the AstNodes.\r\n     *\r\n     * As an example, for validating unique fully-qualified names of nodes in the AST,\r\n     * here the map for mapping names to nodes could be established.\r\n     * During the usual checks on the nodes, they are put into this map with their name.\r\n     *\r\n     * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.\r\n     * Therefore it is recommended to clear stored information\r\n     * _before_ validating an AST to validate each AST unaffected from other ASTs\r\n     * AND _after_ validating the AST to free memory by information which are no longer used.\r\n     *\r\n     * @param checkBefore a set-up function which will be called once before actually validating an AST\r\n     * @param thisObj Optional object to be used as `this` when calling the validation check functions.\r\n     */\r\n    registerBeforeDocument(checkBefore: ValidationPreparation, thisObj: ThisParameterType<unknown> = this): void {\r\n        this.entriesBefore.push(this.wrapPreparationException(checkBefore, 'An error occurred during set-up of the validation', thisObj));\r\n    }\r\n\r\n    /**\r\n     * Register logic which will be executed once after validating all the nodes of an AST/Langium document.\r\n     * This helps to finally evaluate information which are collected during the checks on the AstNodes.\r\n     *\r\n     * As an example, for validating unique fully-qualified names of nodes in the AST,\r\n     * here the map with all the collected nodes and their names is checked\r\n     * and validation hints are created for all nodes with the same name.\r\n     *\r\n     * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.\r\n     * Therefore it is recommended to clear stored information\r\n     * _before_ validating an AST to validate each AST unaffected from other ASTs\r\n     * AND _after_ validating the AST to free memory by information which are no longer used.\r\n     *\r\n     * @param checkBefore a set-up function which will be called once before actually validating an AST\r\n     * @param thisObj Optional object to be used as `this` when calling the validation check functions.\r\n     */\r\n    registerAfterDocument(checkAfter: ValidationPreparation, thisObj: ThisParameterType<unknown> = this): void {\r\n        this.entriesAfter.push(this.wrapPreparationException(checkAfter, 'An error occurred during tear-down of the validation', thisObj));\r\n    }\r\n\r\n    protected wrapPreparationException(check: ValidationPreparation, messageContext: string, thisObj: unknown): ValidationPreparation {\r\n        return async (rootNode, accept, categories, cancelToken) => {\r\n            await this.handleException(() => check.call(thisObj, rootNode, accept, categories, cancelToken), messageContext, accept, rootNode);\r\n        };\r\n    }\r\n\r\n    get checksBefore(): ValidationPreparation[] {\r\n        return this.entriesBefore;\r\n    }\r\n\r\n    get checksAfter(): ValidationPreparation[] {\r\n        return this.entriesAfter;\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { MismatchedTokenException } from 'chevrotain';\r\nimport type { DiagnosticSeverity, Position, Range, Diagnostic } from 'vscode-languageserver-types';\r\nimport type { LanguageMetaData } from '../languages/language-meta-data.js';\r\nimport type { ParseResult } from '../parser/langium-parser.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, CstNode } from '../syntax-tree.js';\r\nimport type { LangiumDocument } from '../workspace/documents.js';\r\nimport type { DiagnosticData, DiagnosticInfo, ValidationAcceptor, ValidationCategory, ValidationRegistry, ValidationSeverity } from './validation-registry.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { findNodeForKeyword, findNodeForProperty } from '../utils/grammar-utils.js';\r\nimport { streamAst } from '../utils/ast-utils.js';\r\nimport { tokenToRange } from '../utils/cst-utils.js';\r\nimport { interruptAndCheck, isOperationCancelled } from '../utils/promise-utils.js';\r\nimport { diagnosticData } from './validation-registry.js';\r\nimport type { LexingDiagnostic, LexingDiagnosticSeverity } from '../parser/token-builder.js';\r\n\r\nexport interface ValidationOptions {\r\n    /**\r\n     * If this is set, only the checks associated with these categories are executed; otherwise\r\n     * all checks are executed. The default category if not specified to the registry is `'fast'`.\r\n     */\r\n    categories?: ValidationCategory[];\r\n    /** If true, no further diagnostics are reported if there are lexing errors. */\r\n    stopAfterLexingErrors?: boolean\r\n    /** If true, no further diagnostics are reported if there are parsing errors. */\r\n    stopAfterParsingErrors?: boolean\r\n    /** If true, no further diagnostics are reported if there are linking errors. */\r\n    stopAfterLinkingErrors?: boolean\r\n}\r\n\r\n/**\r\n * Language-specific service for validating `LangiumDocument`s.\r\n */\r\nexport interface DocumentValidator {\r\n    /**\r\n     * Validates the whole specified document.\r\n     *\r\n     * @param document specified document to validate\r\n     * @param options options to control the validation process\r\n     * @param cancelToken allows to cancel the current operation\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    validateDocument(document: LangiumDocument, options?: ValidationOptions, cancelToken?: CancellationToken): Promise<Diagnostic[]>;\r\n}\r\n\r\nexport class DefaultDocumentValidator implements DocumentValidator {\r\n\r\n    protected readonly validationRegistry: ValidationRegistry;\r\n    protected readonly metadata: LanguageMetaData;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.validationRegistry = services.validation.ValidationRegistry;\r\n        this.metadata = services.LanguageMetaData;\r\n    }\r\n\r\n    async validateDocument(document: LangiumDocument, options: ValidationOptions = {}, cancelToken = CancellationToken.None): Promise<Diagnostic[]> {\r\n        const parseResult = document.parseResult;\r\n        const diagnostics: Diagnostic[] = [];\r\n\r\n        await interruptAndCheck(cancelToken);\r\n\r\n        if (!options.categories || options.categories.includes('built-in')) {\r\n            this.processLexingErrors(parseResult, diagnostics, options);\r\n            if (options.stopAfterLexingErrors && diagnostics.some(d => d.data?.code === DocumentValidator.LexingError)) {\r\n                return diagnostics;\r\n            }\r\n\r\n            this.processParsingErrors(parseResult, diagnostics, options);\r\n            if (options.stopAfterParsingErrors && diagnostics.some(d => d.data?.code === DocumentValidator.ParsingError)) {\r\n                return diagnostics;\r\n            }\r\n\r\n            this.processLinkingErrors(document, diagnostics, options);\r\n            if (options.stopAfterLinkingErrors && diagnostics.some(d => d.data?.code === DocumentValidator.LinkingError)) {\r\n                return diagnostics;\r\n            }\r\n        }\r\n\r\n        // Process custom validations\r\n        try {\r\n            diagnostics.push(...await this.validateAst(parseResult.value, options, cancelToken));\r\n        } catch (err) {\r\n            if (isOperationCancelled(err)) {\r\n                throw err;\r\n            }\r\n            console.error('An error occurred during validation:', err);\r\n        }\r\n\r\n        await interruptAndCheck(cancelToken);\r\n\r\n        return diagnostics;\r\n    }\r\n\r\n    protected processLexingErrors(parseResult: ParseResult, diagnostics: Diagnostic[], _options: ValidationOptions): void {\r\n        const lexerDiagnostics = [...parseResult.lexerErrors, ...parseResult.lexerReport?.diagnostics ?? []] as LexingDiagnostic[];\r\n        for (const lexerDiagnostic of lexerDiagnostics) {\r\n            const severity = lexerDiagnostic.severity ?? 'error';\r\n            const diagnostic: Diagnostic = {\r\n                severity: toDiagnosticSeverity(severity),\r\n                range: {\r\n                    start: {\r\n                        line: lexerDiagnostic.line! - 1,\r\n                        character: lexerDiagnostic.column! - 1\r\n                    },\r\n                    end: {\r\n                        line: lexerDiagnostic.line! - 1,\r\n                        character: lexerDiagnostic.column! + lexerDiagnostic.length - 1\r\n                    }\r\n                },\r\n                message: lexerDiagnostic.message,\r\n                data: toDiagnosticData(severity),\r\n                source: this.getSource()\r\n            };\r\n            diagnostics.push(diagnostic);\r\n        }\r\n    }\r\n\r\n    protected processParsingErrors(parseResult: ParseResult, diagnostics: Diagnostic[], _options: ValidationOptions): void {\r\n        for (const parserError of parseResult.parserErrors) {\r\n            let range: Range | undefined = undefined;\r\n            // We can run into the chevrotain error recovery here\r\n            // The token contained in the parser error might be automatically inserted\r\n            // In this case every position value will be `NaN`\r\n            if (isNaN(parserError.token.startOffset)) {\r\n                // Some special parser error types contain a `previousToken`\r\n                // We can simply append our diagnostic to that token\r\n                if ('previousToken' in parserError) {\r\n                    const token = (parserError as MismatchedTokenException).previousToken;\r\n                    if (!isNaN(token.startOffset)) {\r\n                        const position: Position = { line: token.endLine! - 1, character: token.endColumn! };\r\n                        range = { start: position, end: position};\r\n                    } else {\r\n                        // No valid prev token. Might be empty document or containing only hidden tokens.\r\n                        // Point to document start\r\n                        const position: Position = { line: 0, character: 0 };\r\n                        range = { start: position, end: position};\r\n                    }\r\n                }\r\n            } else {\r\n                range = tokenToRange(parserError.token);\r\n            }\r\n            if (range) {\r\n                const diagnostic: Diagnostic = {\r\n                    severity: toDiagnosticSeverity('error'),\r\n                    range,\r\n                    message: parserError.message,\r\n                    data: diagnosticData(DocumentValidator.ParsingError),\r\n                    source: this.getSource()\r\n                };\r\n                diagnostics.push(diagnostic);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected processLinkingErrors(document: LangiumDocument, diagnostics: Diagnostic[], _options: ValidationOptions): void {\r\n        for (const reference of document.references) {\r\n            const linkingError = reference.error;\r\n            if (linkingError) {\r\n                const info: DiagnosticInfo<AstNode, string> = {\r\n                    node: linkingError.container,\r\n                    property: linkingError.property,\r\n                    index: linkingError.index,\r\n                    data: {\r\n                        code: DocumentValidator.LinkingError,\r\n                        containerType: linkingError.container.$type,\r\n                        property: linkingError.property,\r\n                        refText: linkingError.reference.$refText\r\n                    } satisfies LinkingErrorData\r\n                };\r\n                diagnostics.push(this.toDiagnostic('error', linkingError.message, info));\r\n            }\r\n        }\r\n    }\r\n\r\n    protected async validateAst(rootNode: AstNode, options: ValidationOptions, cancelToken = CancellationToken.None): Promise<Diagnostic[]> {\r\n        const validationItems: Diagnostic[] = [];\r\n        const acceptor: ValidationAcceptor = <N extends AstNode>(severity: ValidationSeverity, message: string, info: DiagnosticInfo<N>) => {\r\n            validationItems.push(this.toDiagnostic(severity, message, info));\r\n        };\r\n\r\n        await this.validateAstBefore(rootNode, options, acceptor, cancelToken);\r\n        await this.validateAstNodes(rootNode, options, acceptor, cancelToken);\r\n        await this.validateAstAfter(rootNode, options, acceptor, cancelToken);\r\n\r\n        return validationItems;\r\n    }\r\n\r\n    protected async validateAstBefore(rootNode: AstNode, options: ValidationOptions, acceptor: ValidationAcceptor, cancelToken = CancellationToken.None): Promise<void> {\r\n        const checksBefore = this.validationRegistry.checksBefore;\r\n        for (const checkBefore of checksBefore) {\r\n            await interruptAndCheck(cancelToken);\r\n            await checkBefore(rootNode, acceptor, options.categories ?? [], cancelToken);\r\n        }\r\n    }\r\n\r\n    protected async validateAstNodes(rootNode: AstNode, options: ValidationOptions, acceptor: ValidationAcceptor, cancelToken = CancellationToken.None): Promise<void> {\r\n        await Promise.all(streamAst(rootNode).map(async node => {\r\n            await interruptAndCheck(cancelToken);\r\n            const checks = this.validationRegistry.getChecks(node.$type, options.categories);\r\n            for (const check of checks) {\r\n                await check(node, acceptor, cancelToken);\r\n            }\r\n        }));\r\n    }\r\n\r\n    protected async validateAstAfter(rootNode: AstNode, options: ValidationOptions, acceptor: ValidationAcceptor, cancelToken = CancellationToken.None): Promise<void> {\r\n        const checksAfter = this.validationRegistry.checksAfter;\r\n        for (const checkAfter of checksAfter) {\r\n            await interruptAndCheck(cancelToken);\r\n            await checkAfter(rootNode, acceptor, options.categories ?? [], cancelToken);\r\n        }\r\n    }\r\n\r\n    protected toDiagnostic<N extends AstNode>(severity: ValidationSeverity, message: string, info: DiagnosticInfo<N, string>): Diagnostic {\r\n        return {\r\n            message,\r\n            range: getDiagnosticRange(info),\r\n            severity: toDiagnosticSeverity(severity),\r\n            code: info.code,\r\n            codeDescription: info.codeDescription,\r\n            tags: info.tags,\r\n            relatedInformation: info.relatedInformation,\r\n            data: info.data,\r\n            source: this.getSource()\r\n        };\r\n    }\r\n\r\n    protected getSource(): string | undefined {\r\n        return this.metadata.languageId;\r\n    }\r\n}\r\n\r\nexport function getDiagnosticRange<N extends AstNode>(info: DiagnosticInfo<N, string>): Range {\r\n    if (info.range) {\r\n        return info.range;\r\n    }\r\n    let cstNode: CstNode | undefined;\r\n    if (typeof info.property === 'string') {\r\n        cstNode = findNodeForProperty(info.node.$cstNode, info.property, info.index);\r\n    } else if (typeof info.keyword === 'string') {\r\n        cstNode = findNodeForKeyword(info.node.$cstNode, info.keyword, info.index);\r\n    }\r\n    cstNode ??= info.node.$cstNode;\r\n    if (!cstNode) {\r\n        return {\r\n            start: { line: 0, character: 0 },\r\n            end: { line: 0, character: 0 }\r\n        };\r\n    }\r\n    return cstNode.range;\r\n}\r\n\r\n/**\r\n * Transforms the diagnostic severity from the {@link LexingDiagnosticSeverity} format to LSP's `DiagnosticSeverity` format.\r\n *\r\n * @param severity The lexing diagnostic severity\r\n * @returns Diagnostic severity according to `vscode-languageserver-types/lib/esm/main.js#DiagnosticSeverity`\r\n */\r\nexport function toDiagnosticSeverity(severity: LexingDiagnosticSeverity): DiagnosticSeverity {\r\n    switch (severity) {\r\n        case 'error':\r\n            return 1 satisfies typeof DiagnosticSeverity.Error;\r\n        case 'warning':\r\n            return 2 satisfies typeof DiagnosticSeverity.Warning;\r\n        case 'info':\r\n            return 3 satisfies typeof DiagnosticSeverity.Information;\r\n        case 'hint':\r\n            return 4 satisfies typeof DiagnosticSeverity.Hint;\r\n        default:\r\n            throw new Error('Invalid diagnostic severity: ' + severity);\r\n    }\r\n}\r\n\r\nexport function toDiagnosticData(severity: LexingDiagnosticSeverity): DiagnosticData {\r\n    switch (severity) {\r\n        case 'error':\r\n            return diagnosticData(DocumentValidator.LexingError);\r\n        case 'warning':\r\n            return diagnosticData(DocumentValidator.LexingWarning);\r\n        case 'info':\r\n            return diagnosticData(DocumentValidator.LexingInfo);\r\n        case 'hint':\r\n            return diagnosticData(DocumentValidator.LexingHint);\r\n        default:\r\n            throw new Error('Invalid diagnostic severity: ' + severity);\r\n    }\r\n}\r\n\r\nexport namespace DocumentValidator {\r\n    export const LexingError = 'lexing-error';\r\n    export const LexingWarning = 'lexing-warning';\r\n    export const LexingInfo = 'lexing-info';\r\n    export const LexingHint = 'lexing-hint';\r\n    export const ParsingError = 'parsing-error';\r\n    export const LinkingError = 'linking-error';\r\n}\r\n\r\nexport interface LinkingErrorData extends DiagnosticData {\r\n    containerType: string\r\n    property: string\r\n    refText: string\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport type { NameProvider } from '../references/name-provider.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { AstNodeLocator } from './ast-node-locator.js';\r\nimport type { DocumentSegment, LangiumDocument } from './documents.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { isLinkingError } from '../syntax-tree.js';\r\nimport { getDocument, streamAst, streamReferences } from '../utils/ast-utils.js';\r\nimport { toDocumentSegment } from '../utils/cst-utils.js';\r\nimport { interruptAndCheck } from '../utils/promise-utils.js';\r\nimport { UriUtils } from '../utils/uri-utils.js';\r\n\r\n/**\r\n * Language-specific service for creating descriptions of AST nodes to be used for cross-reference resolutions.\r\n */\r\nexport interface AstNodeDescriptionProvider {\r\n\r\n    /**\r\n     * Create a description for the given AST node. This service method is typically used while indexing\r\n     * the contents of a document and during scope computation.\r\n     *\r\n     * @param node An AST node.\r\n     * @param name The name to be used to refer to the AST node. By default, this is determined by the\r\n     *     `NameProvider` service, but alternative names may be provided according to the semantics\r\n     *     of your language.\r\n     * @param document The document containing the AST node. If omitted, it is taken from the root AST node.\r\n     */\r\n    createDescription(node: AstNode, name: string | undefined, document?: LangiumDocument): AstNodeDescription;\r\n\r\n}\r\n\r\nexport class DefaultAstNodeDescriptionProvider implements AstNodeDescriptionProvider {\r\n\r\n    protected readonly astNodeLocator: AstNodeLocator;\r\n    protected readonly nameProvider: NameProvider;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.astNodeLocator = services.workspace.AstNodeLocator;\r\n        this.nameProvider = services.references.NameProvider;\r\n    }\r\n\r\n    createDescription(node: AstNode, name: string | undefined, document?: LangiumDocument): AstNodeDescription {\r\n        const doc = document ?? getDocument(node);\r\n        name ??= this.nameProvider.getName(node);\r\n        const path = this.astNodeLocator.getAstNodePath(node);\r\n        if (!name) {\r\n            throw new Error(`Node at path ${path} has no name.`);\r\n        }\r\n        let nameNodeSegment: DocumentSegment | undefined;\r\n        const nameSegmentGetter = () => nameNodeSegment ??= toDocumentSegment(this.nameProvider.getNameNode(node) ?? node.$cstNode);\r\n        return {\r\n            node,\r\n            name,\r\n            get nameSegment() {\r\n                return nameSegmentGetter();\r\n            },\r\n            selectionSegment: toDocumentSegment(node.$cstNode),\r\n            type: node.$type,\r\n            documentUri: doc.uri,\r\n            path\r\n        };\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Describes a cross-reference within a document or between two documents.\r\n */\r\nexport interface ReferenceDescription {\r\n    /** URI of the document that holds a reference */\r\n    sourceUri: URI\r\n    /** Path to AstNode that holds a reference */\r\n    sourcePath: string\r\n    /** Target document uri */\r\n    targetUri: URI\r\n    /** Path to the target AstNode inside the document */\r\n    targetPath: string\r\n    /** Segment of the reference text. */\r\n    segment: DocumentSegment\r\n    /** Marks a local reference i.e. a cross reference inside a document.   */\r\n    local?: boolean\r\n}\r\n\r\n/**\r\n * Language-specific service to create descriptions of all cross-references in a document. These are used by the `IndexManager`\r\n * to determine which documents are affected and should be rebuilt when a document is changed.\r\n */\r\nexport interface ReferenceDescriptionProvider {\r\n    /**\r\n     * Create descriptions of all cross-references found in the given document. These descriptions are\r\n     * gathered by the `IndexManager` and stored in the global index so they can be considered when\r\n     * a document change is reported by the client.\r\n     *\r\n     * @param document The document in which to gather cross-references.\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    createDescriptions(document: LangiumDocument, cancelToken?: CancellationToken): Promise<ReferenceDescription[]>;\r\n}\r\n\r\nexport class DefaultReferenceDescriptionProvider implements ReferenceDescriptionProvider {\r\n\r\n    protected readonly nodeLocator: AstNodeLocator;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.nodeLocator = services.workspace.AstNodeLocator;\r\n    }\r\n\r\n    async createDescriptions(document: LangiumDocument, cancelToken = CancellationToken.None): Promise<ReferenceDescription[]> {\r\n        const descr: ReferenceDescription[] = [];\r\n        const rootNode = document.parseResult.value;\r\n        for (const astNode of streamAst(rootNode)) {\r\n            await interruptAndCheck(cancelToken);\r\n            streamReferences(astNode).filter(refInfo => !isLinkingError(refInfo)).forEach(refInfo => {\r\n                // TODO: Consider logging a warning or throw an exception when DocumentState is < than Linked\r\n                const description = this.createDescription(refInfo);\r\n                if (description) {\r\n                    descr.push(description);\r\n                }\r\n            });\r\n        }\r\n        return descr;\r\n    }\r\n\r\n    protected createDescription(refInfo: ReferenceInfo): ReferenceDescription | undefined {\r\n        const targetNodeDescr = refInfo.reference.$nodeDescription;\r\n        const refCstNode = refInfo.reference.$refNode;\r\n        if (!targetNodeDescr || !refCstNode) {\r\n            return undefined;\r\n        }\r\n        const docUri = getDocument(refInfo.container).uri;\r\n        return {\r\n            sourceUri: docUri,\r\n            sourcePath: this.nodeLocator.getAstNodePath(refInfo.container),\r\n            targetUri: targetNodeDescr.documentUri,\r\n            targetPath: targetNodeDescr.path,\r\n            segment: toDocumentSegment(refCstNode),\r\n            local: UriUtils.equals(targetNodeDescr.documentUri, docUri)\r\n        };\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AstNode } from '../syntax-tree.js';\r\n\r\n/**\r\n * Language-specific service for locating an `AstNode` in a document.\r\n */\r\nexport interface AstNodeLocator {\r\n\r\n    /**\r\n     * Creates a path represented by a `string` that identifies an `AstNode` inside its document.\r\n     * It must be possible to retrieve exactly the same `AstNode` from the document using this path.\r\n     *\r\n     * @param node The `AstNode` for which to create the path.\r\n     * @returns a path represented by a `string` that identifies `node` inside its document.\r\n     * @see AstNodeLocator.getAstNode\r\n     */\r\n    getAstNodePath(node: AstNode): string;\r\n\r\n    /**\r\n     * Locates an `AstNode` inside another node by following the given path.\r\n     *\r\n     * @param node Parent element.\r\n     * @param path Describes how to locate the `AstNode` inside the given `node`.\r\n     * @returns The `AstNode` located under the given path, or `undefined` if the path cannot be resolved.\r\n     * @see AstNodeLocator.getAstNodePath\r\n     */\r\n    getAstNode<T extends AstNode = AstNode>(node: AstNode, path: string): T | undefined;\r\n\r\n}\r\n\r\nexport class DefaultAstNodeLocator implements AstNodeLocator {\r\n    protected segmentSeparator = '/';\r\n    protected indexSeparator = '@';\r\n\r\n    getAstNodePath(node: AstNode): string {\r\n        if (node.$container) {\r\n            const containerPath = this.getAstNodePath(node.$container);\r\n            const newSegment = this.getPathSegment(node);\r\n            const nodePath = containerPath + this.segmentSeparator + newSegment;\r\n            return nodePath;\r\n        }\r\n        return '';\r\n    }\r\n\r\n    protected getPathSegment({ $containerProperty, $containerIndex }: AstNode): string {\r\n        if (!$containerProperty) {\r\n            throw new Error(\"Missing '$containerProperty' in AST node.\");\r\n        }\r\n        if ($containerIndex !== undefined) {\r\n            return $containerProperty + this.indexSeparator + $containerIndex;\r\n        }\r\n        return $containerProperty;\r\n    }\r\n\r\n    getAstNode<T extends AstNode = AstNode>(node: AstNode, path: string): T | undefined {\r\n        const segments = path.split(this.segmentSeparator);\r\n        return segments.reduce((previousValue, currentValue) => {\r\n            if (!previousValue || currentValue.length === 0) {\r\n                return previousValue;\r\n            }\r\n            const propertyIndex = currentValue.indexOf(this.indexSeparator);\r\n            if (propertyIndex > 0) {\r\n                const property = currentValue.substring(0, propertyIndex);\r\n                const arrayIndex = parseInt(currentValue.substring(propertyIndex + 1));\r\n                const array = (previousValue as unknown as Record<string, AstNode[]>)[property];\r\n                return array?.[arrayIndex];\r\n            }\r\n            return (previousValue as unknown as Record<string, AstNode>)[currentValue];\r\n        }, node) as T;\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n// eslint-disable-next-line no-restricted-imports\r\nexport * from 'vscode-jsonrpc/lib/common/events.js';\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { Emitter } from '../utils/event.js';\r\nimport type {\r\n    ConfigurationItem,\r\n    DidChangeConfigurationParams,\r\n    DidChangeConfigurationRegistrationOptions,\r\n    Disposable,\r\n    Event,\r\n    InitializeParams,\r\n    InitializedParams\r\n} from 'vscode-languageserver-protocol';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport { Deferred } from '../utils/promise-utils.js';\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nexport interface ConfigurationProvider {\r\n\r\n    /**\r\n     * A promise that resolves when the configuration provider is ready to be used.\r\n     */\r\n    readonly ready: Promise<void>;\r\n\r\n    /**\r\n     * When used in a language server context, this method is called when the server receives\r\n     * the `initialize` request.\r\n     */\r\n    initialize(params: InitializeParams): void;\r\n\r\n    /**\r\n     * When used in a language server context, this method is called when the server receives\r\n     * the `initialized` notification.\r\n     */\r\n    initialized(params: ConfigurationInitializedParams): Promise<void>;\r\n\r\n    /**\r\n     * Returns a configuration value stored for the given language.\r\n     *\r\n     * @param language The language id\r\n     * @param configuration Configuration name\r\n     */\r\n    getConfiguration(language: string, configuration: string): Promise<any>;\r\n\r\n    /**\r\n     *  Updates the cached configurations using the `change` notification parameters.\r\n     *\r\n     * @param change The parameters of a change configuration notification.\r\n     * `settings` property of the change object could be expressed as `Record<string, Record<string, any>>`\r\n     */\r\n    updateConfiguration(change: DidChangeConfigurationParams): void;\r\n\r\n    /**\r\n     * Get notified after a configuration section has been updated.\r\n     */\r\n    onConfigurationSectionUpdate(callback: ConfigurationSectionUpdateListener): Disposable\r\n}\r\n\r\nexport interface ConfigurationInitializedParams extends InitializedParams {\r\n    register?: (params: DidChangeConfigurationRegistrationOptions) => void,\r\n    fetchConfiguration?: (configuration: ConfigurationItem[]) => Promise<any>\r\n}\r\n\r\nexport interface ConfigurationSectionUpdate {\r\n    /**\r\n     * The name of the configuration section that has been updated.\r\n     */\r\n    section: string;\r\n\r\n    /**\r\n     * The updated configuration section.\r\n     */\r\n    configuration: any;\r\n}\r\n\r\nexport type ConfigurationSectionUpdateListener = (update: ConfigurationSectionUpdate) => void;\r\n\r\n/**\r\n * Base configuration provider for building up other configuration providers\r\n */\r\nexport class DefaultConfigurationProvider implements ConfigurationProvider {\r\n\r\n    protected readonly serviceRegistry: ServiceRegistry;\r\n    protected readonly _ready = new Deferred<void>();\r\n    protected settings: Record<string, Record<string, any>> = {};\r\n    protected workspaceConfig = false;\r\n    protected onConfigurationSectionUpdateEmitter = new Emitter<ConfigurationSectionUpdate>();\r\n\r\n    constructor(services: LangiumSharedCoreServices) {\r\n        this.serviceRegistry = services.ServiceRegistry;\r\n    }\r\n\r\n    get ready(): Promise<void> {\r\n        return this._ready.promise;\r\n    }\r\n\r\n    initialize(params: InitializeParams): void {\r\n        this.workspaceConfig = params.capabilities.workspace?.configuration ?? false;\r\n    }\r\n\r\n    async initialized(params: ConfigurationInitializedParams): Promise<void> {\r\n        if (this.workspaceConfig) {\r\n            if (params.register) {\r\n                // params.register(...) is a function to be provided by the calling language server for the sake of\r\n                //  decoupling this implementation from the concrete LSP implementations, specifically the LSP Connection\r\n\r\n                const languages = this.serviceRegistry.all;\r\n                params.register({\r\n                    // Listen to configuration changes for all languages\r\n                    section: languages.map(lang => this.toSectionName(lang.LanguageMetaData.languageId))\r\n                });\r\n            }\r\n\r\n            if (params.fetchConfiguration) {\r\n                // params.fetchConfiguration(...) is a function to be provided by the calling language server for the sake of\r\n                //  decoupling this implementation from the concrete LSP implementations, specifically the LSP Connection\r\n                const configToUpdate = this.serviceRegistry.all.map(lang => <ConfigurationItem>{\r\n                    // Fetch the configuration changes for all languages\r\n                    section: this.toSectionName(lang.LanguageMetaData.languageId)\r\n                });\r\n\r\n                // get workspace configurations (default scope URI)\r\n                const configs = await params.fetchConfiguration(configToUpdate);\r\n                configToUpdate.forEach((conf, idx) => {\r\n                    this.updateSectionConfiguration(conf.section!, configs[idx]);\r\n                });\r\n            }\r\n        }\r\n        this._ready.resolve();\r\n    }\r\n\r\n    /**\r\n     *  Updates the cached configurations using the `change` notification parameters.\r\n     *\r\n     * @param change The parameters of a change configuration notification.\r\n     * `settings` property of the change object could be expressed as `Record<string, Record<string, any>>`\r\n     */\r\n    updateConfiguration(change: DidChangeConfigurationParams): void {\r\n        if (!change.settings) {\r\n            return;\r\n        }\r\n        Object.keys(change.settings).forEach(section => {\r\n            const configuration = change.settings[section];\r\n            this.updateSectionConfiguration(section, configuration);\r\n            this.onConfigurationSectionUpdateEmitter.fire({ section, configuration });\r\n        });\r\n    }\r\n\r\n    protected updateSectionConfiguration(section: string, configuration: any): void {\r\n        this.settings[section] = configuration;\r\n    }\r\n\r\n    /**\r\n    * Returns a configuration value stored for the given language.\r\n    *\r\n    * @param language The language id\r\n    * @param configuration Configuration name\r\n    */\r\n    async getConfiguration(language: string, configuration: string): Promise<any> {\r\n        await this.ready;\r\n\r\n        const sectionName = this.toSectionName(language);\r\n        if (this.settings[sectionName]) {\r\n            return this.settings[sectionName][configuration];\r\n        }\r\n    }\r\n\r\n    protected toSectionName(languageId: string): string {\r\n        return `${languageId}`;\r\n    }\r\n\r\n    get onConfigurationSectionUpdate(): Event<ConfigurationSectionUpdate> {\r\n        return this.onConfigurationSectionUpdateEmitter.event;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport interface Disposable {\r\n    /**\r\n     * Dispose this object.\r\n     */\r\n    dispose(): void;\r\n}\r\n\r\nexport interface AsyncDisposable {\r\n    /**\r\n     * Dispose this object.\r\n     */\r\n    dispose(): Promise<void>;\r\n}\r\n\r\nexport namespace Disposable {\r\n    export function create(callback: () => Promise<void>): AsyncDisposable;\r\n    export function create(callback: () => void): Disposable;\r\n    export function create(callback: () => void | Promise<void>): Disposable | AsyncDisposable {\r\n        return {\r\n            dispose: async () => await callback()\r\n        };\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { Disposable } from '../utils/disposable.js';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport type { MaybePromise } from '../utils/promise-utils.js';\r\nimport type { Deferred } from '../utils/promise-utils.js';\r\nimport type { ValidationOptions } from '../validation/document-validator.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { LangiumDocument, LangiumDocuments, LangiumDocumentFactory, TextDocumentProvider } from './documents.js';\r\nimport { MultiMap } from '../utils/collections.js';\r\nimport { OperationCancelled, interruptAndCheck, isOperationCancelled } from '../utils/promise-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport { ValidationCategory } from '../validation/validation-registry.js';\r\nimport { DocumentState } from './documents.js';\r\n\r\nexport interface BuildOptions {\r\n    /**\r\n     * Control the validation phase with this option:\r\n     *  - `true` enables all validation checks and forces revalidating the documents\r\n     *  - `false` or `undefined` disables all validation checks\r\n     *  - An object runs only the necessary validation checks; the `categories` property restricts this to a specific subset\r\n     */\r\n    validation?: boolean | ValidationOptions\r\n}\r\n\r\nexport interface DocumentBuildState {\r\n    /** Whether a document has completed its last build process. */\r\n    completed: boolean\r\n    /** The options used for the last build process. */\r\n    options: BuildOptions\r\n    /** Additional information about the last build result. */\r\n    result?: {\r\n        validationChecks?: ValidationCategory[]\r\n    }\r\n}\r\n\r\n/**\r\n * Shared-service for building and updating `LangiumDocument`s.\r\n */\r\nexport interface DocumentBuilder {\r\n\r\n    /** The options used for rebuilding documents after an update. */\r\n    updateBuildOptions: BuildOptions;\r\n\r\n    /**\r\n     * Execute all necessary build steps for the given documents.\r\n     *\r\n     * @param documents Set of documents to be built.\r\n     * @param options Options for the document builder.\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    build<T extends AstNode>(documents: Array<LangiumDocument<T>>, options?: BuildOptions, cancelToken?: CancellationToken): Promise<void>;\r\n\r\n    /**\r\n     * This method is called when a document change is detected. It updates the state of all\r\n     * affected documents, including those with references to the changed ones, so they are rebuilt.\r\n     *\r\n     * @param changed URIs of changed or created documents\r\n     * @param deleted URIs of deleted documents\r\n     * @param cancelToken allows to cancel the current operation\r\n     * @throws `OperationCancelled` if cancellation is detected during execution\r\n     */\r\n    update(changed: URI[], deleted: URI[], cancelToken?: CancellationToken): Promise<void>;\r\n\r\n    /**\r\n     * Notify the given callback when a document update was triggered, but before any document\r\n     * is rebuilt. Listeners to this event should not perform any long-running task.\r\n     */\r\n    onUpdate(callback: DocumentUpdateListener): Disposable;\r\n\r\n    /**\r\n     * Notify the given callback when a set of documents has been built reaching the specified target state.\r\n     */\r\n    onBuildPhase(targetState: DocumentState, callback: DocumentBuildListener): Disposable;\r\n\r\n    /**\r\n     * Notify the specified callback when a document has been built reaching the specified target state.\r\n     * Unlike {@link onBuildPhase} the listener is called for every single document.\r\n     *\r\n     * There are two main advantages compared to {@link onBuildPhase}:\r\n     * 1. If the build is cancelled, {@link onDocumentPhase} will still fire for documents that have reached a specific state.\r\n     *    Meanwhile, {@link onBuildPhase} won't fire for that state.\r\n     * 2. The {@link DocumentBuilder} ensures that all {@link DocumentPhaseListener} instances are called for a built document.\r\n     *    Even if the build is cancelled before those listeners were called.\r\n     */\r\n    onDocumentPhase(targetState: DocumentState, callback: DocumentPhaseListener): Disposable;\r\n\r\n    /**\r\n     * Wait until the workspace has reached the specified state for all documents.\r\n     *\r\n     * @param state The desired state. The promise won't resolve until all documents have reached this state\r\n     * @param cancelToken Optionally allows to cancel the wait operation, disposing any listeners in the process\r\n     * @throws `OperationCancelled` if cancellation has been requested before the state has been reached\r\n     */\r\n    waitUntil(state: DocumentState, cancelToken?: CancellationToken): Promise<void>;\r\n\r\n    /**\r\n     * Wait until the document specified by the {@link uri} has reached the specified state.\r\n     *\r\n     * @param state The desired state. The promise won't resolve until the document has reached this state.\r\n     * @param uri The specified URI that points to the document. If the URI does not exist, the promise will resolve once the workspace has reached the specified state.\r\n     * @param cancelToken Optionally allows to cancel the wait operation, disposing any listeners in the process.\r\n     * @return The URI of the document that has reached the desired state, or `undefined` if the document does not exist.\r\n     * @throws `OperationCancelled` if cancellation has been requested before the state has been reached\r\n     */\r\n    waitUntil(state: DocumentState, uri?: URI, cancelToken?: CancellationToken): Promise<URI | undefined>;\r\n}\r\n\r\nexport type DocumentUpdateListener = (changed: URI[], deleted: URI[]) => void | Promise<void>\r\nexport type DocumentBuildListener = (built: LangiumDocument[], cancelToken: CancellationToken) => void | Promise<void>\r\nexport type DocumentPhaseListener = (built: LangiumDocument, cancelToken: CancellationToken) => void | Promise<void>\r\nexport class DefaultDocumentBuilder implements DocumentBuilder {\r\n\r\n    updateBuildOptions: BuildOptions = {\r\n        // Default: run only the built-in validation checks and those in the _fast_ category (includes those without category)\r\n        validation: {\r\n            categories: ['built-in', 'fast']\r\n        }\r\n    };\r\n\r\n    protected readonly langiumDocuments: LangiumDocuments;\r\n    protected readonly langiumDocumentFactory: LangiumDocumentFactory;\r\n    protected readonly textDocuments: TextDocumentProvider | undefined;\r\n    protected readonly indexManager: IndexManager;\r\n    protected readonly serviceRegistry: ServiceRegistry;\r\n    protected readonly updateListeners: DocumentUpdateListener[] = [];\r\n    protected readonly buildPhaseListeners = new MultiMap<DocumentState, DocumentBuildListener>();\r\n    protected readonly documentPhaseListeners = new MultiMap<DocumentState, DocumentPhaseListener>();\r\n    protected readonly buildState = new Map<string, DocumentBuildState>();\r\n    protected readonly documentBuildWaiters = new Map<string, Deferred<void>>();\r\n    protected currentState = DocumentState.Changed;\r\n\r\n    constructor(services: LangiumSharedCoreServices) {\r\n        this.langiumDocuments = services.workspace.LangiumDocuments;\r\n        this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;\r\n        this.textDocuments = services.workspace.TextDocuments;\r\n        this.indexManager = services.workspace.IndexManager;\r\n        this.serviceRegistry = services.ServiceRegistry;\r\n    }\r\n\r\n    async build<T extends AstNode>(documents: Array<LangiumDocument<T>>, options: BuildOptions = {}, cancelToken = CancellationToken.None): Promise<void> {\r\n        for (const document of documents) {\r\n            const key = document.uri.toString();\r\n            if (document.state === DocumentState.Validated) {\r\n                if (typeof options.validation === 'boolean' && options.validation) {\r\n                    // Force re-running all validation checks\r\n                    document.state = DocumentState.IndexedReferences;\r\n                    document.diagnostics = undefined;\r\n                    this.buildState.delete(key);\r\n                } else if (typeof options.validation === 'object') {\r\n                    const buildState = this.buildState.get(key);\r\n                    const previousCategories = buildState?.result?.validationChecks;\r\n                    if (previousCategories) {\r\n                        // Validation with explicit options was requested for a document that has already been partly validated.\r\n                        // In this case, we need to merge the previous validation categories with the new ones.\r\n                        const newCategories = options.validation.categories ?? ValidationCategory.all as ValidationCategory[];\r\n                        const categories = newCategories.filter(c => !previousCategories.includes(c));\r\n                        if (categories.length > 0) {\r\n                            this.buildState.set(key, {\r\n                                completed: false,\r\n                                options: {\r\n                                    validation: {\r\n                                        ...options.validation,\r\n                                        categories\r\n                                    }\r\n                                },\r\n                                result: buildState.result\r\n                            });\r\n                            document.state = DocumentState.IndexedReferences;\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                // Default: forget any previous build options\r\n                this.buildState.delete(key);\r\n            }\r\n        }\r\n        this.currentState = DocumentState.Changed;\r\n        await this.emitUpdate(documents.map(e => e.uri), []);\r\n        await this.buildDocuments(documents, options, cancelToken);\r\n    }\r\n\r\n    async update(changed: URI[], deleted: URI[], cancelToken = CancellationToken.None): Promise<void> {\r\n        this.currentState = DocumentState.Changed;\r\n        // Remove all metadata of documents that are reported as deleted\r\n        for (const deletedUri of deleted) {\r\n            this.langiumDocuments.deleteDocument(deletedUri);\r\n            this.buildState.delete(deletedUri.toString());\r\n            this.indexManager.remove(deletedUri);\r\n        }\r\n        // Set the state of all changed documents to `Changed` so they are completely rebuilt\r\n        for (const changedUri of changed) {\r\n            const invalidated = this.langiumDocuments.invalidateDocument(changedUri);\r\n            if (!invalidated) {\r\n                // We create an unparsed, invalid document.\r\n                // This will be parsed as soon as we reach the first document builder phase.\r\n                // This allows to cancel the parsing process later in case we need it.\r\n                const newDocument = this.langiumDocumentFactory.fromModel({ $type: 'INVALID' }, changedUri);\r\n                newDocument.state = DocumentState.Changed;\r\n                this.langiumDocuments.addDocument(newDocument);\r\n            }\r\n            this.buildState.delete(changedUri.toString());\r\n        }\r\n        // Set the state of all documents that should be relinked to `ComputedScopes` (if not already lower)\r\n        const allChangedUris = stream(changed).concat(deleted).map(uri => uri.toString()).toSet();\r\n        this.langiumDocuments.all\r\n            .filter(doc => !allChangedUris.has(doc.uri.toString()) && this.shouldRelink(doc, allChangedUris))\r\n            .forEach(doc => {\r\n                const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;\r\n                linker.unlink(doc);\r\n                doc.state = Math.min(doc.state, DocumentState.ComputedScopes);\r\n                doc.diagnostics = undefined;\r\n            });\r\n        // Notify listeners of the update\r\n        await this.emitUpdate(changed, deleted);\r\n        // Only allow interrupting the execution after all state changes are done\r\n        await interruptAndCheck(cancelToken);\r\n\r\n        // Collect and sort all documents that we should rebuild\r\n        const rebuildDocuments = this.sortDocuments(\r\n            this.langiumDocuments.all\r\n                .filter(doc =>\r\n                    // This includes those that were reported as changed and those that we selected for relinking\r\n                    doc.state < DocumentState.Linked\r\n                    // This includes those for which a previous build has been cancelled\r\n                    || !this.buildState.get(doc.uri.toString())?.completed\r\n                )\r\n                .toArray()\r\n        );\r\n        await this.buildDocuments(rebuildDocuments, this.updateBuildOptions, cancelToken);\r\n    }\r\n\r\n    protected async emitUpdate(changed: URI[], deleted: URI[]): Promise<void> {\r\n        await Promise.all(this.updateListeners.map(listener => listener(changed, deleted)));\r\n    }\r\n\r\n    /**\r\n     * Sort the given documents by priority. By default, documents with an open text document are prioritized.\r\n     * This is useful to ensure that visible documents show their diagnostics before all other documents.\r\n     *\r\n     * This improves the responsiveness in large workspaces as users usually don't care about diagnostics\r\n     * in files that are currently not opened in the editor.\r\n     */\r\n    protected sortDocuments(documents: LangiumDocument[]): LangiumDocument[] {\r\n        let left = 0;\r\n        let right = documents.length - 1;\r\n\r\n        while (left < right) {\r\n            while (left < documents.length && this.hasTextDocument(documents[left])) {\r\n                left++;\r\n            }\r\n\r\n            while (right >= 0 && !this.hasTextDocument(documents[right])) {\r\n                right--;\r\n            }\r\n\r\n            if (left < right) {\r\n                [documents[left], documents[right]] = [documents[right], documents[left]];\r\n            }\r\n        }\r\n\r\n        return documents;\r\n    }\r\n\r\n    private hasTextDocument(doc: LangiumDocument): boolean {\r\n        return Boolean(this.textDocuments?.get(doc.uri));\r\n    }\r\n\r\n    /**\r\n     * Check whether the given document should be relinked after changes were found in the given URIs.\r\n     */\r\n    protected shouldRelink(document: LangiumDocument, changedUris: Set<string>): boolean {\r\n        // Relink documents with linking errors -- maybe those references can be resolved now\r\n        if (document.references.some(ref => ref.error !== undefined)) {\r\n            return true;\r\n        }\r\n        // Check whether the document is affected by any of the changed URIs\r\n        return this.indexManager.isAffected(document, changedUris);\r\n    }\r\n\r\n    onUpdate(callback: DocumentUpdateListener): Disposable {\r\n        this.updateListeners.push(callback);\r\n        return Disposable.create(() => {\r\n            const index = this.updateListeners.indexOf(callback);\r\n            if (index >= 0) {\r\n                this.updateListeners.splice(index, 1);\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Build the given documents by stepping through all build phases. If a document's state indicates\r\n     * that a certain build phase is already done, the phase is skipped for that document.\r\n     *\r\n     * @param documents The documents to build.\r\n     * @param options the {@link BuildOptions} to use.\r\n     * @param cancelToken A cancellation token that can be used to cancel the build.\r\n     * @returns A promise that resolves when the build is done.\r\n     */\r\n    protected async buildDocuments(documents: LangiumDocument[], options: BuildOptions, cancelToken: CancellationToken): Promise<void> {\r\n        this.prepareBuild(documents, options);\r\n        // 0. Parse content\r\n        await this.runCancelable(documents, DocumentState.Parsed, cancelToken, doc =>\r\n            this.langiumDocumentFactory.update(doc, cancelToken)\r\n        );\r\n        // 1. Index content\r\n        await this.runCancelable(documents, DocumentState.IndexedContent, cancelToken, doc =>\r\n            this.indexManager.updateContent(doc, cancelToken)\r\n        );\r\n        // 2. Compute scopes\r\n        await this.runCancelable(documents, DocumentState.ComputedScopes, cancelToken, async doc => {\r\n            const scopeComputation = this.serviceRegistry.getServices(doc.uri).references.ScopeComputation;\r\n            doc.precomputedScopes = await scopeComputation.computeLocalScopes(doc, cancelToken);\r\n        });\r\n        // 3. Linking\r\n        await this.runCancelable(documents, DocumentState.Linked, cancelToken, doc => {\r\n            const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;\r\n            return linker.link(doc, cancelToken);\r\n        });\r\n        // 4. Index references\r\n        await this.runCancelable(documents, DocumentState.IndexedReferences, cancelToken, doc =>\r\n            this.indexManager.updateReferences(doc, cancelToken)\r\n        );\r\n        // 5. Validation\r\n        const toBeValidated = documents.filter(doc => this.shouldValidate(doc));\r\n        await this.runCancelable(toBeValidated, DocumentState.Validated, cancelToken, doc =>\r\n            this.validate(doc, cancelToken)\r\n        );\r\n\r\n        // If we've made it to this point without being cancelled, we can mark the build state as completed.\r\n        for (const doc of documents) {\r\n            const state = this.buildState.get(doc.uri.toString());\r\n            if (state) {\r\n                state.completed = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Runs prior to beginning the build process to update the {@link DocumentBuildState} for each document\r\n     *\r\n     * @param documents collection of documents to be built\r\n     * @param options the {@link BuildOptions} to use\r\n     */\r\n    protected prepareBuild(documents: LangiumDocument[], options: BuildOptions): void {\r\n        for (const doc of documents) {\r\n            const key = doc.uri.toString();\r\n            const state = this.buildState.get(key);\r\n            // If the document has no previous build state, we set it. If it has one, but it's already marked\r\n            // as completed, we overwrite it. If the previous build was not completed, we keep its state\r\n            // and continue where it was cancelled.\r\n            if (!state || state.completed) {\r\n                this.buildState.set(key, {\r\n                    completed: false,\r\n                    options,\r\n                    result: state?.result\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Runs a cancelable operation on a set of documents to bring them to a specified {@link DocumentState}.\r\n     *\r\n     * @param documents The array of documents to process.\r\n     * @param targetState The target {@link DocumentState} to bring the documents to.\r\n     * @param cancelToken A token that can be used to cancel the operation.\r\n     * @param callback A function to be called for each document.\r\n     * @returns A promise that resolves when all documents have been processed or the operation is canceled.\r\n     * @throws Will throw `OperationCancelled` if the operation is canceled via a `CancellationToken`.\r\n     */\r\n    protected async runCancelable(documents: LangiumDocument[], targetState: DocumentState, cancelToken: CancellationToken,\r\n        callback: (document: LangiumDocument) => MaybePromise<unknown>): Promise<void> {\r\n        const filtered = documents.filter(doc => doc.state < targetState);\r\n        for (const document of filtered) {\r\n            await interruptAndCheck(cancelToken);\r\n            await callback(document);\r\n            document.state = targetState;\r\n            await this.notifyDocumentPhase(document, targetState, cancelToken);\r\n        }\r\n\r\n        // Do not use `filtered` here, as that will miss documents that have previously reached the current target state\r\n        // For example, this happens in case the cancellation triggers between the processing of two documents\r\n        // Or files that were picked up during the workspace initialization\r\n        const targetStateDocs = documents.filter(doc => doc.state === targetState);\r\n        await this.notifyBuildPhase(targetStateDocs, targetState, cancelToken);\r\n        this.currentState = targetState;\r\n    }\r\n\r\n    onBuildPhase(targetState: DocumentState, callback: DocumentBuildListener): Disposable {\r\n        this.buildPhaseListeners.add(targetState, callback);\r\n        return Disposable.create(() => {\r\n            this.buildPhaseListeners.delete(targetState, callback);\r\n        });\r\n    }\r\n\r\n    onDocumentPhase(targetState: DocumentState, callback: DocumentPhaseListener): Disposable {\r\n        this.documentPhaseListeners.add(targetState, callback);\r\n        return Disposable.create(() => {\r\n            this.documentPhaseListeners.delete(targetState, callback);\r\n        });\r\n    }\r\n\r\n    waitUntil(state: DocumentState, cancelToken?: CancellationToken): Promise<void>;\r\n    waitUntil(state: DocumentState, uri?: URI, cancelToken?: CancellationToken): Promise<URI | undefined>;\r\n    waitUntil(state: DocumentState, uriOrToken?: URI | CancellationToken, cancelToken?: CancellationToken): Promise<URI | undefined | void> {\r\n        let uri: URI | undefined = undefined;\r\n        if (uriOrToken && 'path' in uriOrToken) {\r\n            uri = uriOrToken;\r\n        } else {\r\n            cancelToken = uriOrToken;\r\n        }\r\n        cancelToken ??= CancellationToken.None;\r\n        if (uri) {\r\n            const document = this.langiumDocuments.getDocument(uri);\r\n            if (document && document.state > state) {\r\n                return Promise.resolve(uri);\r\n            }\r\n        }\r\n        if (this.currentState >= state) {\r\n            return Promise.resolve(undefined);\r\n        } else if (cancelToken.isCancellationRequested) {\r\n            return Promise.reject(OperationCancelled);\r\n        }\r\n        return new Promise((resolve, reject) => {\r\n            const buildDisposable = this.onBuildPhase(state, () => {\r\n                buildDisposable.dispose();\r\n                cancelDisposable.dispose();\r\n                if (uri) {\r\n                    const document = this.langiumDocuments.getDocument(uri);\r\n                    resolve(document?.uri);\r\n                } else {\r\n                    resolve(undefined);\r\n                }\r\n            });\r\n            const cancelDisposable = cancelToken!.onCancellationRequested(() => {\r\n                buildDisposable.dispose();\r\n                cancelDisposable.dispose();\r\n                reject(OperationCancelled);\r\n            });\r\n        });\r\n    }\r\n\r\n    protected async notifyDocumentPhase(document: LangiumDocument, state: DocumentState, cancelToken: CancellationToken): Promise<void> {\r\n        const listeners = this.documentPhaseListeners.get(state);\r\n        const listenersCopy = listeners.slice();\r\n        for (const listener of listenersCopy) {\r\n            try {\r\n                await listener(document, cancelToken);\r\n            } catch (err) {\r\n                // Ignore cancellation errors\r\n                // We want to finish the listeners before throwing\r\n                if (!isOperationCancelled(err)) {\r\n                    throw err;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected async notifyBuildPhase(documents: LangiumDocument[], state: DocumentState, cancelToken: CancellationToken): Promise<void> {\r\n        if (documents.length === 0) {\r\n            // Don't notify when no document has been processed\r\n            return;\r\n        }\r\n        const listeners = this.buildPhaseListeners.get(state);\r\n        const listenersCopy = listeners.slice();\r\n        for (const listener of listenersCopy) {\r\n            await interruptAndCheck(cancelToken);\r\n            await listener(documents, cancelToken);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Determine whether the given document should be validated during a build. The default\r\n     * implementation checks the `validation` property of the build options. If it's set to `true`\r\n     * or a `ValidationOptions` object, the document is included in the validation phase.\r\n     */\r\n    protected shouldValidate(document: LangiumDocument): boolean {\r\n        return Boolean(this.getBuildOptions(document).validation);\r\n    }\r\n\r\n    /**\r\n     * Run validation checks on the given document and store the resulting diagnostics in the document.\r\n     * If the document already contains diagnostics, the new ones are added to the list.\r\n     */\r\n    protected async validate(document: LangiumDocument, cancelToken: CancellationToken): Promise<void> {\r\n        const validator = this.serviceRegistry.getServices(document.uri).validation.DocumentValidator;\r\n        const validationSetting = this.getBuildOptions(document).validation;\r\n        const options = typeof validationSetting === 'object' ? validationSetting : undefined;\r\n        const diagnostics = await validator.validateDocument(document, options, cancelToken);\r\n        if (document.diagnostics) {\r\n            document.diagnostics.push(...diagnostics);\r\n        } else {\r\n            document.diagnostics = diagnostics;\r\n        }\r\n\r\n        // Store information about the executed validation in the build state\r\n        const state = this.buildState.get(document.uri.toString());\r\n        if (state) {\r\n            state.result ??= {};\r\n            const newCategories = options?.categories ?? ValidationCategory.all;\r\n            if (state.result.validationChecks) {\r\n                state.result.validationChecks.push(...newCategories);\r\n            } else {\r\n                state.result.validationChecks = [...newCategories];\r\n            }\r\n        }\r\n    }\r\n\r\n    protected getBuildOptions(document: LangiumDocument): BuildOptions {\r\n        return this.buildState.get(document.uri.toString())?.options ?? {};\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, AstReflection } from '../syntax-tree.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { ContextCache } from '../utils/caching.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport { UriUtils } from '../utils/uri-utils.js';\r\nimport type { ReferenceDescription } from './ast-descriptions.js';\r\nimport type { LangiumDocument, LangiumDocuments } from './documents.js';\r\n\r\n/**\r\n * The index manager is responsible for keeping metadata about symbols and cross-references\r\n * in the workspace. It is used to look up symbols in the global scope, mostly during linking\r\n * and completion. This service is shared between all languages of a language server.\r\n */\r\nexport interface IndexManager {\r\n\r\n    /**\r\n     * Removes the specified document URI from the index.\r\n     * Necessary when documents are deleted and not referenceable anymore.\r\n     *\r\n     * @param uri The URI of the document for which index data shall be removed\r\n     */\r\n    remove(uri: URI): void;\r\n\r\n    /**\r\n     * Updates the information about the exportable content of a document inside the index.\r\n     *\r\n     * @param document Document to be updated\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    updateContent(document: LangiumDocument, cancelToken?: CancellationToken): Promise<void>;\r\n\r\n    /**\r\n     * Updates the information about the cross-references of a document inside the index.\r\n     *\r\n     * @param document Document to be updated\r\n     * @param cancelToken Indicates when to cancel the current operation.\r\n     * @throws `OperationCanceled` if a user action occurs during execution\r\n     */\r\n    updateReferences(document: LangiumDocument, cancelToken?: CancellationToken): Promise<void>;\r\n\r\n    /**\r\n     * Determine whether the given document could be affected by changes of the documents\r\n     * identified by the given URIs (second parameter). The document is typically regarded as\r\n     * affected if it contains a reference to any of the changed files.\r\n     *\r\n     * @param document Document to check whether it's affected\r\n     * @param changedUris URIs of the changed documents\r\n     */\r\n    isAffected(document: LangiumDocument, changedUris: Set<string>): boolean;\r\n\r\n    /**\r\n     * Compute a list of all exported elements, optionally filtered using a type identifier and document URIs.\r\n     *\r\n     * @param nodeType The type to filter with, or `undefined` to return descriptions of all types.\r\n     * @param uris If specified, only returns elements from the given URIs.\r\n     * @returns a `Stream` containing all globally visible nodes (of a given type).\r\n     */\r\n    allElements(nodeType?: string, uris?: Set<string>): Stream<AstNodeDescription>;\r\n\r\n    /**\r\n     * Returns all known references that are pointing to the given `targetNode`.\r\n     *\r\n     * @param targetNode the `AstNode` to look up references for\r\n     * @param astNodePath the path that points to the `targetNode` inside the document. See also `AstNodeLocator`\r\n     *\r\n     * @returns a `Stream` of references that are targeting the `targetNode`\r\n     */\r\n    findAllReferences(targetNode: AstNode, astNodePath: string): Stream<ReferenceDescription>;\r\n\r\n}\r\n\r\nexport class DefaultIndexManager implements IndexManager {\r\n\r\n    protected readonly serviceRegistry: ServiceRegistry;\r\n    protected readonly documents: LangiumDocuments;\r\n    protected readonly astReflection: AstReflection;\r\n\r\n    /**\r\n     * The symbol index stores all `AstNodeDescription` items exported by a document.\r\n     * The key used in this map is the string representation of the specific document URI.\r\n     */\r\n    protected readonly symbolIndex = new Map<string, AstNodeDescription[]>();\r\n    /**\r\n     * This is a cache for the `allElements()` method.\r\n     * It caches the descriptions from `symbolIndex` grouped by types.\r\n     */\r\n    protected readonly symbolByTypeIndex = new ContextCache<string, string, AstNodeDescription[]>();\r\n    /**\r\n     * This index keeps track of all `ReferenceDescription` items exported by a document.\r\n     * This is used to compute which elements are affected by a document change\r\n     * and for finding references to an AST node.\r\n     */\r\n    protected readonly referenceIndex = new Map<string, ReferenceDescription[]>();\r\n\r\n    constructor(services: LangiumSharedCoreServices) {\r\n        this.documents = services.workspace.LangiumDocuments;\r\n        this.serviceRegistry = services.ServiceRegistry;\r\n        this.astReflection = services.AstReflection;\r\n    }\r\n\r\n    findAllReferences(targetNode: AstNode, astNodePath: string): Stream<ReferenceDescription> {\r\n        const targetDocUri = getDocument(targetNode).uri;\r\n        const result: ReferenceDescription[] = [];\r\n        this.referenceIndex.forEach(docRefs => {\r\n            docRefs.forEach(refDescr => {\r\n                if (UriUtils.equals(refDescr.targetUri, targetDocUri) && refDescr.targetPath === astNodePath) {\r\n                    result.push(refDescr);\r\n                }\r\n            });\r\n        });\r\n        return stream(result);\r\n    }\r\n\r\n    allElements(nodeType?: string, uris?: Set<string>): Stream<AstNodeDescription> {\r\n        let documentUris = stream(this.symbolIndex.keys());\r\n        if (uris) {\r\n            documentUris = documentUris.filter(uri => !uris || uris.has(uri));\r\n        }\r\n        return documentUris\r\n            .map(uri => this.getFileDescriptions(uri, nodeType))\r\n            .flat();\r\n    }\r\n\r\n    protected getFileDescriptions(uri: string, nodeType?: string): AstNodeDescription[] {\r\n        if (!nodeType) {\r\n            return this.symbolIndex.get(uri) ?? [];\r\n        }\r\n        const descriptions = this.symbolByTypeIndex.get(uri, nodeType, () => {\r\n            const allFileDescriptions = this.symbolIndex.get(uri) ?? [];\r\n            return allFileDescriptions.filter(e => this.astReflection.isSubtype(e.type, nodeType));\r\n        });\r\n        return descriptions;\r\n    }\r\n\r\n    remove(uri: URI): void {\r\n        const uriString = uri.toString();\r\n        this.symbolIndex.delete(uriString);\r\n        this.symbolByTypeIndex.clear(uriString);\r\n        this.referenceIndex.delete(uriString);\r\n    }\r\n\r\n    async updateContent(document: LangiumDocument, cancelToken = CancellationToken.None): Promise<void> {\r\n        const services = this.serviceRegistry.getServices(document.uri);\r\n        const exports = await services.references.ScopeComputation.computeExports(document, cancelToken);\r\n        const uri = document.uri.toString();\r\n        this.symbolIndex.set(uri, exports);\r\n        this.symbolByTypeIndex.clear(uri);\r\n    }\r\n\r\n    async updateReferences(document: LangiumDocument, cancelToken = CancellationToken.None): Promise<void> {\r\n        const services = this.serviceRegistry.getServices(document.uri);\r\n        const indexData = await services.workspace.ReferenceDescriptionProvider.createDescriptions(document, cancelToken);\r\n        this.referenceIndex.set(document.uri.toString(), indexData);\r\n    }\r\n\r\n    isAffected(document: LangiumDocument, changedUris: Set<string>): boolean {\r\n        const references = this.referenceIndex.get(document.uri.toString());\r\n        if (!references) {\r\n            return false;\r\n        }\r\n        return references.some(ref => !ref.local && changedUris.has(ref.targetUri.toString()));\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { InitializeParams, InitializedParams } from 'vscode-languageserver-protocol';\r\nimport type { WorkspaceFolder } from 'vscode-languageserver-types';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { Deferred, interruptAndCheck } from '../utils/promise-utils.js';\r\nimport { URI, UriUtils } from '../utils/uri-utils.js';\r\nimport type { BuildOptions, DocumentBuilder } from './document-builder.js';\r\nimport type { LangiumDocument, LangiumDocuments } from './documents.js';\r\nimport type { FileSystemNode, FileSystemProvider } from './file-system-provider.js';\r\nimport type { WorkspaceLock } from './workspace-lock.js';\r\n\r\n// export type WorkspaceFolder from 'vscode-languageserver-types' for convenience,\r\n//  is supposed to avoid confusion as 'WorkspaceFolder' might accidentally be imported via 'vscode-languageclient'\r\nexport type { WorkspaceFolder };\r\n\r\n/**\r\n * The workspace manager is responsible for finding source files in the workspace.\r\n * This service is shared between all languages of a language server.\r\n */\r\nexport interface WorkspaceManager {\r\n\r\n    /** The options used for the initial workspace build. */\r\n    initialBuildOptions: BuildOptions | undefined;\r\n\r\n    /**\r\n     * A promise that resolves when the workspace manager is ready to be used.\r\n     * Use this to ensure that the workspace manager has finished its initialization.\r\n     */\r\n    readonly ready: Promise<void>;\r\n\r\n    /**\r\n     * The workspace folders of the current workspace.\r\n     * Available only after the `ready` promise resolves.\r\n     */\r\n    get workspaceFolders(): readonly WorkspaceFolder[] | undefined;\r\n\r\n    /**\r\n     * When used in a language server context, this method is called when the server receives\r\n     * the `initialize` request.\r\n     */\r\n    initialize(params: InitializeParams): void;\r\n\r\n    /**\r\n     * When used in a language server context, this method is called when the server receives\r\n     * the `initialized` notification.\r\n     */\r\n    initialized(params: InitializedParams): Promise<void>;\r\n\r\n    /**\r\n     * Does the initial indexing of workspace folders.\r\n     * Collects information about exported and referenced AstNodes in\r\n     * each language file and stores it locally.\r\n     *\r\n     * @param folders The set of workspace folders to be indexed.\r\n     * @param cancelToken A cancellation token that can be used to cancel the operation.\r\n     *\r\n     * @throws OperationCancelled if a cancellation event has been detected\r\n     */\r\n    initializeWorkspace(folders: WorkspaceFolder[], cancelToken?: CancellationToken): Promise<void>;\r\n\r\n}\r\n\r\nexport class DefaultWorkspaceManager implements WorkspaceManager {\r\n\r\n    initialBuildOptions: BuildOptions = {};\r\n\r\n    protected readonly serviceRegistry: ServiceRegistry;\r\n    protected readonly langiumDocuments: LangiumDocuments;\r\n    protected readonly documentBuilder: DocumentBuilder;\r\n    protected readonly fileSystemProvider: FileSystemProvider;\r\n    protected readonly mutex: WorkspaceLock;\r\n    protected readonly _ready = new Deferred<void>();\r\n    protected folders?: WorkspaceFolder[];\r\n\r\n    constructor(services: LangiumSharedCoreServices) {\r\n        this.serviceRegistry = services.ServiceRegistry;\r\n        this.langiumDocuments = services.workspace.LangiumDocuments;\r\n        this.documentBuilder = services.workspace.DocumentBuilder;\r\n        this.fileSystemProvider = services.workspace.FileSystemProvider;\r\n        this.mutex = services.workspace.WorkspaceLock;\r\n    }\r\n\r\n    get ready(): Promise<void> {\r\n        return this._ready.promise;\r\n    }\r\n\r\n    get workspaceFolders(): readonly WorkspaceFolder[] | undefined {\r\n        return this.folders;\r\n    }\r\n\r\n    initialize(params: InitializeParams): void {\r\n        this.folders = params.workspaceFolders ?? undefined;\r\n    }\r\n\r\n    initialized(_params: InitializedParams): Promise<void> {\r\n        // Initialize the workspace even if there are no workspace folders\r\n        // We still want to load additional documents (language library or similar) during initialization\r\n        return this.mutex.write(token => this.initializeWorkspace(this.folders ?? [], token));\r\n    }\r\n\r\n    async initializeWorkspace(folders: WorkspaceFolder[], cancelToken = CancellationToken.None): Promise<void> {\r\n        const documents = await this.performStartup(folders);\r\n        // Only after creating all documents do we check whether we need to cancel the initialization\r\n        // The document builder will later pick up on all unprocessed documents\r\n        await interruptAndCheck(cancelToken);\r\n        await this.documentBuilder.build(documents, this.initialBuildOptions, cancelToken);\r\n    }\r\n\r\n    /**\r\n     * Performs the uninterruptable startup sequence of the workspace manager.\r\n     * This methods loads all documents in the workspace and other documents and returns them.\r\n     */\r\n    protected async performStartup(folders: WorkspaceFolder[]): Promise<LangiumDocument[]> {\r\n        const fileExtensions = this.serviceRegistry.all.flatMap(e => e.LanguageMetaData.fileExtensions);\r\n        const documents: LangiumDocument[] = [];\r\n        const collector = (document: LangiumDocument) => {\r\n            documents.push(document);\r\n            if (!this.langiumDocuments.hasDocument(document.uri)) {\r\n                this.langiumDocuments.addDocument(document);\r\n            }\r\n        };\r\n        // Even though we don't await the initialization of the workspace manager,\r\n        // we can still assume that all library documents and file documents are loaded by the time we start building documents.\r\n        // The mutex prevents anything from performing a workspace build until we check the cancellation token\r\n        await this.loadAdditionalDocuments(folders, collector);\r\n        await Promise.all(\r\n            folders.map(wf => [wf, this.getRootFolder(wf)] as [WorkspaceFolder, URI])\r\n                .map(async entry => this.traverseFolder(...entry, fileExtensions, collector))\r\n        );\r\n        this._ready.resolve();\r\n        return documents;\r\n    }\r\n\r\n    /**\r\n     * Load all additional documents that shall be visible in the context of the given workspace\r\n     * folders and add them to the collector. This can be used to include built-in libraries of\r\n     * your language, which can be either loaded from provided files or constructed in memory.\r\n     */\r\n    protected loadAdditionalDocuments(_folders: WorkspaceFolder[], _collector: (document: LangiumDocument) => void): Promise<void> {\r\n        return Promise.resolve();\r\n    }\r\n\r\n    /**\r\n     * Determine the root folder of the source documents in the given workspace folder.\r\n     * The default implementation returns the URI of the workspace folder, but you can override\r\n     * this to return a subfolder like `src` instead.\r\n     */\r\n    protected getRootFolder(workspaceFolder: WorkspaceFolder): URI {\r\n        return URI.parse(workspaceFolder.uri);\r\n    }\r\n\r\n    /**\r\n     * Traverse the file system folder identified by the given URI and its subfolders. All\r\n     * contained files that match the file extensions are added to the collector.\r\n     */\r\n    protected async traverseFolder(workspaceFolder: WorkspaceFolder, folderPath: URI, fileExtensions: string[], collector: (document: LangiumDocument) => void): Promise<void> {\r\n        const content = await this.fileSystemProvider.readDirectory(folderPath);\r\n        await Promise.all(content.map(async entry => {\r\n            if (this.includeEntry(workspaceFolder, entry, fileExtensions)) {\r\n                if (entry.isDirectory) {\r\n                    await this.traverseFolder(workspaceFolder, entry.uri, fileExtensions, collector);\r\n                } else if (entry.isFile) {\r\n                    const document = await this.langiumDocuments.getOrCreateDocument(entry.uri);\r\n                    collector(document);\r\n                }\r\n            }\r\n        }));\r\n    }\r\n\r\n    /**\r\n     * Determine whether the given folder entry shall be included while indexing the workspace.\r\n     */\r\n    protected includeEntry(_workspaceFolder: WorkspaceFolder, entry: FileSystemNode, fileExtensions: string[]): boolean {\r\n        const name = UriUtils.basename(entry.uri);\r\n        if (name.startsWith('.')) {\r\n            return false;\r\n        }\r\n        if (entry.isDirectory) {\r\n            return name !== 'node_modules' && name !== 'out';\r\n        } else if (entry.isFile) {\r\n            const extname = UriUtils.extname(entry.uri);\r\n            return fileExtensions.includes(extname);\r\n        }\r\n        return false;\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { ILexerErrorMessageProvider, ILexingError, IMultiModeLexerDefinition, IToken, TokenType, TokenTypeDictionary, TokenVocabulary } from 'chevrotain';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { Lexer as ChevrotainLexer, defaultLexerErrorProvider } from 'chevrotain';\r\nimport type { LexingReport, TokenBuilder } from './token-builder.js';\r\n\r\nexport class DefaultLexerErrorMessageProvider implements ILexerErrorMessageProvider {\r\n\r\n    buildUnexpectedCharactersMessage(fullText: string, startOffset: number, length: number, line?: number, column?: number): string {\r\n        return defaultLexerErrorProvider.buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column);\r\n    }\r\n\r\n    buildUnableToPopLexerModeMessage(token: IToken): string {\r\n        return defaultLexerErrorProvider.buildUnableToPopLexerModeMessage(token);\r\n    }\r\n}\r\n\r\nexport interface LexerResult {\r\n    /**\r\n     * A list of all tokens that were lexed from the input.\r\n     *\r\n     * Note that Langium requires the optional properties\r\n     * `startLine`, `startColumn`, `endOffset`, `endLine` and `endColumn` to be set on each token.\r\n     */\r\n    tokens: IToken[];\r\n    /**\r\n     * Contains hidden tokens, usually comments.\r\n     */\r\n    hidden: IToken[];\r\n    errors: ILexingError[];\r\n    report?: LexingReport;\r\n}\r\n\r\nexport type TokenizeMode = 'full' | 'partial';\r\n\r\nexport interface TokenizeOptions {\r\n    mode?: TokenizeMode;\r\n}\r\n\r\nexport const DEFAULT_TOKENIZE_OPTIONS: TokenizeOptions = { mode: 'full' };\r\n\r\nexport interface Lexer {\r\n    readonly definition: TokenTypeDictionary;\r\n    tokenize(text: string, options?: TokenizeOptions): LexerResult;\r\n}\r\n\r\nexport class DefaultLexer implements Lexer {\r\n\r\n    protected readonly tokenBuilder: TokenBuilder;\r\n    protected readonly errorMessageProvider: ILexerErrorMessageProvider;\r\n    protected tokenTypes: TokenTypeDictionary;\r\n    protected chevrotainLexer: ChevrotainLexer;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.errorMessageProvider = services.parser.LexerErrorMessageProvider;\r\n        this.tokenBuilder = services.parser.TokenBuilder;\r\n        const tokens = this.tokenBuilder.buildTokens(services.Grammar, {\r\n            caseInsensitive: services.LanguageMetaData.caseInsensitive\r\n        });\r\n        this.tokenTypes = this.toTokenTypeDictionary(tokens);\r\n        const lexerTokens = isTokenTypeDictionary(tokens) ? Object.values(tokens) : tokens;\r\n        const production = services.LanguageMetaData.mode === 'production';\r\n        this.chevrotainLexer = new ChevrotainLexer(lexerTokens, {\r\n            positionTracking: 'full',\r\n            skipValidations: production,\r\n            errorMessageProvider: this.errorMessageProvider\r\n        });\r\n    }\r\n\r\n    get definition(): TokenTypeDictionary {\r\n        return this.tokenTypes;\r\n    }\r\n\r\n    tokenize(text: string, _options: TokenizeOptions = DEFAULT_TOKENIZE_OPTIONS): LexerResult {\r\n        const chevrotainResult = this.chevrotainLexer.tokenize(text);\r\n        return {\r\n            tokens: chevrotainResult.tokens,\r\n            errors: chevrotainResult.errors,\r\n            hidden: chevrotainResult.groups.hidden ?? [],\r\n            report: this.tokenBuilder.flushLexingReport?.(text)\r\n        };\r\n    }\r\n\r\n    protected toTokenTypeDictionary(buildTokens: TokenVocabulary): TokenTypeDictionary {\r\n        if (isTokenTypeDictionary(buildTokens)) return buildTokens;\r\n        const tokens = isIMultiModeLexerDefinition(buildTokens) ? Object.values(buildTokens.modes).flat() : buildTokens;\r\n        const res: TokenTypeDictionary = {};\r\n        tokens.forEach(token => res[token.name] = token);\r\n        return res;\r\n    }\r\n}\r\n\r\n/**\r\n * Returns a check whether the given TokenVocabulary is TokenType array\r\n */\r\nexport function isTokenTypeArray(tokenVocabulary: TokenVocabulary): tokenVocabulary is TokenType[] {\r\n    return Array.isArray(tokenVocabulary) && (tokenVocabulary.length === 0 || 'name' in tokenVocabulary[0]);\r\n}\r\n\r\n/**\r\n * Returns a check whether the given TokenVocabulary is IMultiModeLexerDefinition\r\n */\r\nexport function isIMultiModeLexerDefinition(tokenVocabulary: TokenVocabulary): tokenVocabulary is IMultiModeLexerDefinition {\r\n    return tokenVocabulary && 'modes' in tokenVocabulary && 'defaultMode' in tokenVocabulary;\r\n}\r\n\r\n/**\r\n * Returns a check whether the given TokenVocabulary is TokenTypeDictionary\r\n */\r\nexport function isTokenTypeDictionary(tokenVocabulary: TokenVocabulary): tokenVocabulary is TokenTypeDictionary {\r\n    return !isTokenTypeArray(tokenVocabulary) && !isIMultiModeLexerDefinition(tokenVocabulary);\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { Position, Range } from 'vscode-languageserver-types';\r\nimport type { CstNode } from '../syntax-tree.js';\r\nimport { NEWLINE_REGEXP, escapeRegExp } from '../utils/regexp-utils.js';\r\nimport { URI } from '../utils/uri-utils.js';\r\n\r\nexport interface JSDocComment extends JSDocValue {\r\n    readonly elements: JSDocElement[]\r\n    getTag(name: string): JSDocTag | undefined\r\n    getTags(name: string): JSDocTag[]\r\n}\r\n\r\nexport type JSDocElement = JSDocParagraph | JSDocTag;\r\n\r\nexport type JSDocInline = JSDocTag | JSDocLine;\r\n\r\nexport interface JSDocValue {\r\n    /**\r\n     * Represents the range that this JSDoc element occupies.\r\n     * If the JSDoc was parsed from a `CstNode`, the range will represent the location in the source document.\r\n     */\r\n    readonly range: Range\r\n    /**\r\n     * Renders this JSDoc element to a plain text representation.\r\n     */\r\n    toString(): string\r\n    /**\r\n     * Renders this JSDoc element to a markdown representation.\r\n     *\r\n     * @param options Rendering options to customize the markdown result.\r\n     */\r\n    toMarkdown(options?: JSDocRenderOptions): string\r\n}\r\n\r\nexport interface JSDocParagraph extends JSDocValue {\r\n    readonly inlines: JSDocInline[]\r\n}\r\n\r\nexport interface JSDocLine extends JSDocValue {\r\n    readonly text: string\r\n}\r\n\r\nexport interface JSDocTag extends JSDocValue {\r\n    readonly name: string\r\n    readonly content: JSDocParagraph\r\n    readonly inline: boolean\r\n}\r\n\r\nexport interface JSDocParseOptions {\r\n    /**\r\n     * The start symbol of your comment format. Defaults to `/**`.\r\n     */\r\n    readonly start?: RegExp | string\r\n    /**\r\n     * The symbol that start a line of your comment format. Defaults to `*`.\r\n     */\r\n    readonly line?: RegExp | string\r\n    /**\r\n     * The end symbol of your comment format. Defaults to `*\\/`.\r\n     */\r\n    readonly end?: RegExp | string\r\n}\r\n\r\nexport interface JSDocRenderOptions {\r\n    /**\r\n     * Determines the style for rendering tags. Defaults to `italic`.\r\n     */\r\n    tag?: 'plain' | 'italic' | 'bold' | 'bold-italic'\r\n    /**\r\n     * Determines the default for rendering `@link` tags. Defaults to `plain`.\r\n     */\r\n    link?: 'code' | 'plain'\r\n    /**\r\n     * Custom tag rendering function.\r\n     * Return a markdown formatted tag or `undefined` to fall back to the default rendering.\r\n     */\r\n    renderTag?(tag: JSDocTag): string | undefined\r\n    /**\r\n     * Custom link rendering function. Accepts a link target and a display value for the link.\r\n     * Return a markdown formatted link with the format `[$display]($link)` or `undefined` if the link is not a valid target.\r\n     */\r\n    renderLink?(link: string, display: string): string | undefined\r\n}\r\n\r\n/**\r\n * Parses a JSDoc from a `CstNode` containing a comment.\r\n *\r\n * @param node A `CstNode` from a parsed Langium document.\r\n * @param options Parsing options specialized to your language. See {@link JSDocParseOptions}.\r\n */\r\nexport function parseJSDoc(node: CstNode, options?: JSDocParseOptions): JSDocComment;\r\n/**\r\n * Parses a JSDoc from a string comment.\r\n *\r\n * @param content A string containing the source of the JSDoc comment.\r\n * @param start The start position the comment occupies in the source document.\r\n * @param options Parsing options specialized to your language. See {@link JSDocParseOptions}.\r\n */\r\nexport function parseJSDoc(content: string, start?: Position, options?: JSDocParseOptions): JSDocComment;\r\nexport function parseJSDoc(node: CstNode | string, start?: Position | JSDocParseOptions, options?: JSDocParseOptions): JSDocComment {\r\n    let opts: JSDocParseOptions | undefined;\r\n    let position: Position | undefined;\r\n    if (typeof node === 'string') {\r\n        position = start as Position | undefined;\r\n        opts = options as JSDocParseOptions | undefined;\r\n    } else {\r\n        position = node.range.start;\r\n        opts = start as JSDocParseOptions | undefined;\r\n    }\r\n    if (!position) {\r\n        position = Position.create(0, 0);\r\n    }\r\n\r\n    const lines = getLines(node);\r\n    const normalizedOptions = normalizeOptions(opts);\r\n\r\n    const tokens = tokenize({\r\n        lines,\r\n        position,\r\n        options: normalizedOptions\r\n    });\r\n\r\n    return parseJSDocComment({\r\n        index: 0,\r\n        tokens,\r\n        position\r\n    });\r\n}\r\n\r\nexport function isJSDoc(node: CstNode | string, options?: JSDocParseOptions): boolean {\r\n    const normalizedOptions = normalizeOptions(options);\r\n    const lines = getLines(node);\r\n    if (lines.length === 0) {\r\n        return false;\r\n    }\r\n\r\n    const first = lines[0];\r\n    const last = lines[lines.length - 1];\r\n    const firstRegex = normalizedOptions.start;\r\n    const lastRegex = normalizedOptions.end;\r\n\r\n    return Boolean(firstRegex?.exec(first)) && Boolean(lastRegex?.exec(last));\r\n}\r\n\r\nfunction getLines(node: CstNode | string): string[] {\r\n    let content = '';\r\n    if (typeof node === 'string') {\r\n        content = node;\r\n    } else {\r\n        content = node.text;\r\n    }\r\n    const lines = content.split(NEWLINE_REGEXP);\r\n    return lines;\r\n}\r\n\r\n// Tokenization\r\n\r\ninterface JSDocToken {\r\n    type: 'text' | 'tag' | 'inline-tag' | 'break'\r\n    content: string\r\n    range: Range\r\n}\r\n\r\nconst tagRegex = /\\s*(@([\\p{L}][\\p{L}\\p{N}]*)?)/uy;\r\nconst inlineTagRegex = /\\{(@[\\p{L}][\\p{L}\\p{N}]*)(\\s*)([^\\r\\n}]+)?\\}/gu;\r\n\r\nfunction tokenize(context: TokenizationContext): JSDocToken[] {\r\n    const tokens: JSDocToken[] = [];\r\n    let currentLine = context.position.line;\r\n    let currentCharacter = context.position.character;\r\n    for (let i = 0; i < context.lines.length; i++) {\r\n        const first = i === 0;\r\n        const last = i === context.lines.length - 1;\r\n        let line = context.lines[i];\r\n        let index = 0;\r\n\r\n        if (first && context.options.start) {\r\n            const match = context.options.start?.exec(line);\r\n            if (match) {\r\n                index = match.index + match[0].length;\r\n            }\r\n        } else {\r\n            const match = context.options.line?.exec(line);\r\n            if (match) {\r\n                index = match.index + match[0].length;\r\n            }\r\n        }\r\n        if (last) {\r\n            const match = context.options.end?.exec(line);\r\n            if (match) {\r\n                line = line.substring(0, match.index);\r\n            }\r\n        }\r\n\r\n        line = line.substring(0, lastCharacter(line));\r\n        const whitespaceEnd = skipWhitespace(line, index);\r\n\r\n        if (whitespaceEnd >= line.length) {\r\n            // Only create a break token when we already have previous tokens\r\n            if (tokens.length > 0) {\r\n                const position = Position.create(currentLine, currentCharacter);\r\n                tokens.push({\r\n                    type: 'break',\r\n                    content: '',\r\n                    range: Range.create(position, position)\r\n                });\r\n            }\r\n        } else {\r\n            tagRegex.lastIndex = index;\r\n            const tagMatch = tagRegex.exec(line);\r\n            if (tagMatch) {\r\n                const fullMatch = tagMatch[0];\r\n                const value = tagMatch[1];\r\n                const start = Position.create(currentLine, currentCharacter + index);\r\n                const end = Position.create(currentLine, currentCharacter + index + fullMatch.length);\r\n                tokens.push({\r\n                    type: 'tag',\r\n                    content: value,\r\n                    range: Range.create(start, end)\r\n                });\r\n                index += fullMatch.length;\r\n                index = skipWhitespace(line, index);\r\n            }\r\n\r\n            if (index < line.length) {\r\n                const rest = line.substring(index);\r\n                const inlineTagMatches = Array.from(rest.matchAll(inlineTagRegex));\r\n                tokens.push(...buildInlineTokens(inlineTagMatches, rest, currentLine, currentCharacter + index));\r\n            }\r\n        }\r\n\r\n        currentLine++;\r\n        currentCharacter = 0;\r\n    }\r\n\r\n    // Remove last break token if there is one\r\n    if (tokens.length > 0 && tokens[tokens.length - 1].type === 'break') {\r\n        return tokens.slice(0, -1);\r\n    }\r\n\r\n    return tokens;\r\n}\r\n\r\nfunction buildInlineTokens(tags: RegExpMatchArray[], line: string, lineIndex: number, characterIndex: number): JSDocToken[] {\r\n    const tokens: JSDocToken[] = [];\r\n\r\n    if (tags.length === 0) {\r\n        const start = Position.create(lineIndex, characterIndex);\r\n        const end = Position.create(lineIndex, characterIndex + line.length);\r\n        tokens.push({\r\n            type: 'text',\r\n            content: line,\r\n            range: Range.create(start, end)\r\n        });\r\n    } else {\r\n        let lastIndex = 0;\r\n        for (const match of tags) {\r\n            const matchIndex = match.index!;\r\n            const startContent = line.substring(lastIndex, matchIndex);\r\n            if (startContent.length > 0) {\r\n                tokens.push({\r\n                    type: 'text',\r\n                    content: line.substring(lastIndex, matchIndex),\r\n                    range: Range.create(\r\n                        Position.create(lineIndex, lastIndex + characterIndex),\r\n                        Position.create(lineIndex, matchIndex + characterIndex)\r\n                    )\r\n                });\r\n            }\r\n            let offset = startContent.length + 1;\r\n            const tagName = match[1];\r\n            tokens.push({\r\n                type: 'inline-tag',\r\n                content: tagName,\r\n                range: Range.create(\r\n                    Position.create(lineIndex, lastIndex + offset + characterIndex),\r\n                    Position.create(lineIndex, lastIndex + offset + tagName.length + characterIndex)\r\n                )\r\n            });\r\n            offset += tagName.length;\r\n            if (match.length === 4) {\r\n                offset += match[2].length;\r\n                const value = match[3];\r\n                tokens.push({\r\n                    type: 'text',\r\n                    content: value,\r\n                    range: Range.create(\r\n                        Position.create(lineIndex, lastIndex + offset + characterIndex),\r\n                        Position.create(lineIndex, lastIndex + offset + value.length + characterIndex)\r\n                    )\r\n                });\r\n            } else {\r\n                tokens.push({\r\n                    type: 'text',\r\n                    content: '',\r\n                    range: Range.create(\r\n                        Position.create(lineIndex, lastIndex + offset + characterIndex),\r\n                        Position.create(lineIndex, lastIndex + offset + characterIndex)\r\n                    )\r\n                });\r\n            }\r\n            lastIndex = matchIndex + match[0].length;\r\n        }\r\n        const endContent = line.substring(lastIndex);\r\n        if (endContent.length > 0) {\r\n            tokens.push({\r\n                type: 'text',\r\n                content: endContent,\r\n                range: Range.create(\r\n                    Position.create(lineIndex, lastIndex + characterIndex),\r\n                    Position.create(lineIndex, lastIndex + characterIndex + endContent.length)\r\n                )\r\n            });\r\n        }\r\n    }\r\n\r\n    return tokens;\r\n}\r\n\r\nconst nonWhitespaceRegex = /\\S/;\r\nconst whitespaceEndRegex = /\\s*$/;\r\n\r\nfunction skipWhitespace(line: string, index: number): number {\r\n    const match = line.substring(index).match(nonWhitespaceRegex);\r\n    if (match) {\r\n        return index + match.index!;\r\n    } else {\r\n        return line.length;\r\n    }\r\n}\r\n\r\nfunction lastCharacter(line: string): number | undefined {\r\n    const match = line.match(whitespaceEndRegex);\r\n    if (match && typeof match.index === 'number') {\r\n        return match.index;\r\n    }\r\n    return undefined;\r\n}\r\n\r\n// Parsing\r\n\r\nfunction parseJSDocComment(context: ParseContext): JSDocComment {\r\n    const startPosition: Position = Position.create(context.position.line, context.position.character);\r\n    if (context.tokens.length === 0) {\r\n        return new JSDocCommentImpl([], Range.create(startPosition, startPosition));\r\n    }\r\n    const elements: JSDocElement[] = [];\r\n    while (context.index < context.tokens.length) {\r\n        const element = parseJSDocElement(context, elements[elements.length - 1]);\r\n        if (element) {\r\n            elements.push(element);\r\n        }\r\n    }\r\n    const start = elements[0]?.range.start ?? startPosition;\r\n    const end = elements[elements.length - 1]?.range.end ?? startPosition;\r\n    return new JSDocCommentImpl(elements, Range.create(start, end));\r\n}\r\n\r\nfunction parseJSDocElement(context: ParseContext, last?: JSDocElement): JSDocElement | undefined {\r\n    const next = context.tokens[context.index];\r\n    if (next.type === 'tag') {\r\n        return parseJSDocTag(context, false);\r\n    } else if (next.type === 'text' || next.type === 'inline-tag') {\r\n        return parseJSDocText(context);\r\n    } else {\r\n        appendEmptyLine(next, last);\r\n        context.index++;\r\n        return undefined;\r\n    }\r\n}\r\n\r\nfunction appendEmptyLine(token: JSDocToken, element?: JSDocElement): void {\r\n    if (element) {\r\n        const line = new JSDocLineImpl('', token.range);\r\n        if ('inlines' in element) {\r\n            element.inlines.push(line);\r\n        } else {\r\n            element.content.inlines.push(line);\r\n        }\r\n    }\r\n}\r\n\r\nfunction parseJSDocText(context: ParseContext): JSDocParagraph {\r\n    let token = context.tokens[context.index];\r\n    const firstToken = token;\r\n    let lastToken = token;\r\n    const lines: JSDocInline[] = [];\r\n    while (token && token.type !== 'break' && token.type !== 'tag') {\r\n        lines.push(parseJSDocInline(context));\r\n        lastToken = token;\r\n        token = context.tokens[context.index];\r\n    }\r\n    return new JSDocTextImpl(lines, Range.create(firstToken.range.start, lastToken.range.end));\r\n}\r\n\r\nfunction parseJSDocInline(context: ParseContext): JSDocInline {\r\n    const token = context.tokens[context.index];\r\n    if (token.type === 'inline-tag') {\r\n        return parseJSDocTag(context, true);\r\n    } else {\r\n        return parseJSDocLine(context);\r\n    }\r\n}\r\n\r\nfunction parseJSDocTag(context: ParseContext, inline: boolean): JSDocTag {\r\n    const tagToken = context.tokens[context.index++];\r\n    const name = tagToken.content.substring(1);\r\n    const nextToken = context.tokens[context.index];\r\n    if (nextToken?.type === 'text') {\r\n        if (inline) {\r\n            const docLine = parseJSDocLine(context);\r\n            return new JSDocTagImpl(\r\n                name,\r\n                new JSDocTextImpl([docLine], docLine.range),\r\n                inline,\r\n                Range.create(tagToken.range.start, docLine.range.end)\r\n            );\r\n        } else {\r\n            const textDoc = parseJSDocText(context);\r\n            return new JSDocTagImpl(\r\n                name,\r\n                textDoc,\r\n                inline,\r\n                Range.create(tagToken.range.start, textDoc.range.end)\r\n            );\r\n        }\r\n    } else {\r\n        const range = tagToken.range;\r\n        return new JSDocTagImpl(name, new JSDocTextImpl([], range), inline, range);\r\n    }\r\n}\r\n\r\nfunction parseJSDocLine(context: ParseContext): JSDocLine {\r\n    const token = context.tokens[context.index++];\r\n    return new JSDocLineImpl(token.content, token.range);\r\n}\r\n\r\ninterface NormalizedOptions {\r\n    start?: RegExp\r\n    end?: RegExp\r\n    line?: RegExp\r\n}\r\n\r\ninterface TokenizationContext {\r\n    position: Position\r\n    lines: string[]\r\n    options: NormalizedOptions\r\n}\r\n\r\ninterface ParseContext {\r\n    position: Position\r\n    tokens: JSDocToken[]\r\n    index: number\r\n}\r\n\r\nfunction normalizeOptions(options?: JSDocParseOptions): NormalizedOptions {\r\n    if (!options) {\r\n        return normalizeOptions({\r\n            start: '/**',\r\n            end: '*/',\r\n            line: '*'\r\n        });\r\n    }\r\n    const { start, end, line } = options;\r\n    return {\r\n        start: normalizeOption(start, true),\r\n        end: normalizeOption(end, false),\r\n        line: normalizeOption(line, true)\r\n    };\r\n}\r\n\r\nfunction normalizeOption(option: RegExp | string | undefined, start: boolean): RegExp | undefined {\r\n    if (typeof option === 'string' || typeof option === 'object') {\r\n        const escaped = typeof option === 'string' ? escapeRegExp(option) : option.source;\r\n        if (start) {\r\n            return new RegExp(`^\\\\s*${escaped}`);\r\n        } else {\r\n            return new RegExp(`\\\\s*${escaped}\\\\s*$`);\r\n        }\r\n    } else {\r\n        return option;\r\n    }\r\n}\r\n\r\nclass JSDocCommentImpl implements JSDocComment {\r\n\r\n    readonly elements: JSDocElement[];\r\n    readonly range: Range;\r\n\r\n    constructor(elements: JSDocElement[], range: Range) {\r\n        this.elements = elements;\r\n        this.range = range;\r\n    }\r\n\r\n    getTag(name: string): JSDocTag | undefined {\r\n        return this.getAllTags().find(e => e.name === name);\r\n    }\r\n\r\n    getTags(name: string): JSDocTag[] {\r\n        return this.getAllTags().filter(e => e.name === name);\r\n    }\r\n\r\n    private getAllTags(): JSDocTag[] {\r\n        return this.elements.filter((e): e is JSDocTag => 'name' in e);\r\n    }\r\n\r\n    toString(): string {\r\n        let value = '';\r\n        for (const element of this.elements) {\r\n            if (value.length === 0) {\r\n                value = element.toString();\r\n            } else {\r\n                const text = element.toString();\r\n                value += fillNewlines(value) + text;\r\n            }\r\n        }\r\n        return value.trim();\r\n    }\r\n\r\n    toMarkdown(options?: JSDocRenderOptions): string {\r\n        let value = '';\r\n        for (const element of this.elements) {\r\n            if (value.length === 0) {\r\n                value = element.toMarkdown(options);\r\n            } else {\r\n                const text = element.toMarkdown(options);\r\n                value += fillNewlines(value) + text;\r\n            }\r\n        }\r\n        return value.trim();\r\n    }\r\n}\r\n\r\nclass JSDocTagImpl implements JSDocTag {\r\n    name: string;\r\n    content: JSDocParagraph;\r\n    range: Range;\r\n    inline: boolean;\r\n\r\n    constructor(name: string, content: JSDocParagraph, inline: boolean, range: Range) {\r\n        this.name = name;\r\n        this.content = content;\r\n        this.inline = inline;\r\n        this.range = range;\r\n    }\r\n\r\n    toString(): string {\r\n        let text = `@${this.name}`;\r\n        const content = this.content.toString();\r\n        if (this.content.inlines.length === 1) {\r\n            text = `${text} ${content}`;\r\n        } else if (this.content.inlines.length > 1) {\r\n            text = `${text}\\n${content}`;\r\n        }\r\n        if (this.inline) {\r\n            // Inline tags are surrounded by curly braces\r\n            return `{${text}}`;\r\n        } else {\r\n            return text;\r\n        }\r\n    }\r\n\r\n    toMarkdown(options?: JSDocRenderOptions): string {\r\n        return options?.renderTag?.(this) ?? this.toMarkdownDefault(options);\r\n    }\r\n\r\n    private toMarkdownDefault(options?: JSDocRenderOptions): string {\r\n        const content = this.content.toMarkdown(options);\r\n        if (this.inline) {\r\n            const rendered = renderInlineTag(this.name, content, options ?? {});\r\n            if (typeof rendered === 'string') {\r\n                return rendered;\r\n            }\r\n        }\r\n        let marker = '';\r\n        if (options?.tag === 'italic' || options?.tag === undefined) {\r\n            marker = '*';\r\n        } else if (options?.tag === 'bold') {\r\n            marker = '**';\r\n        } else if (options?.tag === 'bold-italic') {\r\n            marker = '***';\r\n        }\r\n        let text = `${marker}@${this.name}${marker}`;\r\n        if (this.content.inlines.length === 1) {\r\n            text = `${text} — ${content}`;\r\n        } else if (this.content.inlines.length > 1) {\r\n            text = `${text}\\n${content}`;\r\n        }\r\n        if (this.inline) {\r\n            // Inline tags are surrounded by curly braces\r\n            return `{${text}}`;\r\n        } else {\r\n            return text;\r\n        }\r\n    }\r\n}\r\n\r\nfunction renderInlineTag(tag: string, content: string, options: JSDocRenderOptions): string | undefined {\r\n    if (tag === 'linkplain' || tag === 'linkcode' || tag === 'link') {\r\n        const index = content.indexOf(' ');\r\n        let display = content;\r\n        if (index > 0) {\r\n            const displayStart = skipWhitespace(content, index);\r\n            display = content.substring(displayStart);\r\n            content = content.substring(0, index);\r\n        }\r\n        if (tag === 'linkcode' || (tag === 'link' && options.link === 'code')) {\r\n            // Surround the display value in a markdown inline code block\r\n            display = `\\`${display}\\``;\r\n        }\r\n        const renderedLink = options.renderLink?.(content, display) ?? renderLinkDefault(content, display);\r\n        return renderedLink;\r\n    }\r\n    return undefined;\r\n}\r\n\r\nfunction renderLinkDefault(content: string, display: string): string {\r\n    try {\r\n        URI.parse(content, true);\r\n        return `[${display}](${content})`;\r\n    } catch {\r\n        return content;\r\n    }\r\n}\r\n\r\nclass JSDocTextImpl implements JSDocParagraph {\r\n    inlines: JSDocInline[];\r\n    range: Range;\r\n\r\n    constructor(lines: JSDocInline[], range: Range) {\r\n        this.inlines = lines;\r\n        this.range = range;\r\n    }\r\n\r\n    toString(): string {\r\n        let text = '';\r\n        for (let i = 0; i < this.inlines.length; i++) {\r\n            const inline = this.inlines[i];\r\n            const next = this.inlines[i + 1];\r\n            text += inline.toString();\r\n            if (next && next.range.start.line > inline.range.start.line) {\r\n                text += '\\n';\r\n            }\r\n        }\r\n        return text;\r\n    }\r\n\r\n    toMarkdown(options?: JSDocRenderOptions): string {\r\n        let text = '';\r\n        for (let i = 0; i < this.inlines.length; i++) {\r\n            const inline = this.inlines[i];\r\n            const next = this.inlines[i + 1];\r\n            text += inline.toMarkdown(options);\r\n            if (next && next.range.start.line > inline.range.start.line) {\r\n                text += '\\n';\r\n            }\r\n        }\r\n        return text;\r\n    }\r\n}\r\n\r\nclass JSDocLineImpl implements JSDocLine {\r\n    text: string;\r\n    range: Range;\r\n\r\n    constructor(text: string, range: Range) {\r\n        this.text = text;\r\n        this.range = range;\r\n    }\r\n\r\n    toString(): string {\r\n        return this.text;\r\n    }\r\n    toMarkdown(): string {\r\n        return this.text;\r\n    }\r\n\r\n}\r\n\r\nfunction fillNewlines(text: string): string {\r\n    if (text.endsWith('\\n')) {\r\n        return '\\n';\r\n    } else {\r\n        return '\\n\\n';\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription } from '../syntax-tree.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { CommentProvider } from './comment-provider.js';\r\nimport type { JSDocTag } from './jsdoc.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { isJSDoc, parseJSDoc } from './jsdoc.js';\r\n\r\n/**\r\n * Provides documentation for AST nodes.\r\n */\r\nexport interface DocumentationProvider {\r\n    /**\r\n     * Returns a markdown documentation string for the specified AST node.\r\n     *\r\n     * The default implementation `JSDocDocumentationProvider` will inspect the comment associated with the specified node.\r\n     */\r\n    getDocumentation(node: AstNode): string | undefined;\r\n}\r\n\r\nexport class JSDocDocumentationProvider implements DocumentationProvider {\r\n\r\n    protected readonly indexManager: IndexManager;\r\n    protected readonly commentProvider: CommentProvider;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.indexManager = services.shared.workspace.IndexManager;\r\n        this.commentProvider = services.documentation.CommentProvider;\r\n    }\r\n\r\n    getDocumentation(node: AstNode): string | undefined {\r\n        const comment = this.commentProvider.getComment(node);\r\n        if (comment && isJSDoc(comment)) {\r\n            const parsedJSDoc = parseJSDoc(comment);\r\n            return parsedJSDoc.toMarkdown({\r\n                renderLink: (link, display) => {\r\n                    return this.documentationLinkRenderer(node, link, display);\r\n                },\r\n                renderTag: (tag) => {\r\n                    return this.documentationTagRenderer(node, tag);\r\n                }\r\n            });\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    protected documentationLinkRenderer(node: AstNode, name: string, display: string): string | undefined {\r\n        const description = this.findNameInPrecomputedScopes(node, name) ?? this.findNameInGlobalScope(node, name);\r\n        if (description && description.nameSegment) {\r\n            const line = description.nameSegment.range.start.line + 1;\r\n            const character = description.nameSegment.range.start.character + 1;\r\n            const uri = description.documentUri.with({ fragment: `L${line},${character}` });\r\n            return `[${display}](${uri.toString()})`;\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    protected documentationTagRenderer(_node: AstNode, _tag: JSDocTag): string | undefined {\r\n        // Fall back to the default tag rendering\r\n        return undefined;\r\n    }\r\n\r\n    protected findNameInPrecomputedScopes(node: AstNode, name: string): AstNodeDescription | undefined {\r\n        const document = getDocument(node);\r\n        const precomputed = document.precomputedScopes;\r\n        if (!precomputed) {\r\n            return undefined;\r\n        }\r\n        let currentNode: AstNode | undefined = node;\r\n        do {\r\n            const allDescriptions = precomputed.get(currentNode);\r\n            const description = allDescriptions.find(e => e.name === name);\r\n            if (description) {\r\n                return description;\r\n            }\r\n            currentNode = currentNode.$container;\r\n        } while (currentNode);\r\n\r\n        return undefined;\r\n    }\r\n\r\n    protected findNameInGlobalScope(node: AstNode, name: string): AstNodeDescription | undefined {\r\n        const description = this.indexManager.allElements().find(e => e.name === name);\r\n        return description;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { GrammarConfig } from '../languages/grammar-config.js';\r\nimport { isAstNodeWithComment } from '../serializer/json-serializer.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport { findCommentNode } from '../utils/cst-utils.js';\r\n\r\n/**\r\n * Provides comments for AST nodes.\r\n */\r\nexport interface CommentProvider {\r\n    /**\r\n     * Returns the comment associated with the specified AST node.\r\n     * @param node The AST node to get the comment for.\r\n     * @returns The comment associated with the specified AST node or `undefined` if there is no comment.\r\n     */\r\n    getComment(node: AstNode): string | undefined;\r\n}\r\n\r\nexport class DefaultCommentProvider implements CommentProvider {\r\n    protected readonly grammarConfig: () => GrammarConfig;\r\n    constructor(services: LangiumCoreServices) {\r\n        this.grammarConfig = () => services.parser.GrammarConfig;\r\n    }\r\n    getComment(node: AstNode): string | undefined {\r\n        if(isAstNodeWithComment(node)) {\r\n            return node.$comment;\r\n        }\r\n        return findCommentNode(node.$cstNode, this.grammarConfig().multilineCommentRules)?.text;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CancellationToken } from '../utils/cancellation.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport type { LangiumParser, ParseResult } from './langium-parser.js';\r\nimport type { Hydrator } from '../serializer/hydrator.js';\r\nimport type { Event } from '../utils/event.js';\r\nimport { Deferred, OperationCancelled } from '../utils/promise-utils.js';\r\nimport { Emitter } from '../utils/event.js';\r\n\r\n/**\r\n * Async parser that allows cancellation of the current parsing process.\r\n *\r\n * @remarks\r\n * The sync parser implementation is blocking the event loop, which can become quite problematic for large files.\r\n * The default implementation is not actually async. It just wraps the sync parser in a promise. A real implementation would create worker threads or web workers to offload the parsing work.\r\n */\r\nexport interface AsyncParser {\r\n    /**\r\n     * Parses the given text and returns the parse result.\r\n     *\r\n     * @param text The text to parse.\r\n     * @param cancelToken A cancellation token that can be used to cancel the parsing process.\r\n     * @returns A promise that resolves to the parse result.\r\n     *\r\n     * @throws `OperationCancelled` if the parsing process is cancelled.\r\n     */\r\n    parse<T extends AstNode>(text: string, cancelToken: CancellationToken): Promise<ParseResult<T>>;\r\n}\r\n\r\n/**\r\n * Default implementation of the async parser which simply wraps the sync parser in a promise.\r\n *\r\n * @remarks\r\n * A real implementation would create worker threads or web workers to offload the parsing work.\r\n */\r\nexport class DefaultAsyncParser implements AsyncParser {\r\n\r\n    protected readonly syncParser: LangiumParser;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.syncParser = services.parser.LangiumParser;\r\n    }\r\n\r\n    parse<T extends AstNode>(text: string, _cancelToken: CancellationToken): Promise<ParseResult<T>> {\r\n        return Promise.resolve(this.syncParser.parse<T>(text));\r\n    }\r\n}\r\n\r\nexport abstract class AbstractThreadedAsyncParser implements AsyncParser {\r\n\r\n    /**\r\n     * The thread count determines how many threads are used to parse files in parallel.\r\n     * The default value is 8. Decreasing this value increases startup performance, but decreases parallel parsing performance.\r\n     */\r\n    protected threadCount = 8;\r\n    /**\r\n     * The termination delay determines how long the parser waits for a thread to finish after a cancellation request.\r\n     * The default value is 200(ms).\r\n     */\r\n    protected terminationDelay = 200;\r\n    protected workerPool: ParserWorker[] = [];\r\n    protected queue: Array<Deferred<ParserWorker>> = [];\r\n\r\n    protected readonly hydrator: Hydrator;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.hydrator = services.serializer.Hydrator;\r\n    }\r\n\r\n    protected initializeWorkers(): void {\r\n        while (this.workerPool.length < this.threadCount) {\r\n            const worker = this.createWorker();\r\n            worker.onReady(() => {\r\n                if (this.queue.length > 0) {\r\n                    const deferred = this.queue.shift();\r\n                    if (deferred) {\r\n                        worker.lock();\r\n                        deferred.resolve(worker);\r\n                    }\r\n                }\r\n            });\r\n            this.workerPool.push(worker);\r\n        }\r\n    }\r\n\r\n    async parse<T extends AstNode>(text: string, cancelToken: CancellationToken): Promise<ParseResult<T>> {\r\n        const worker = await this.acquireParserWorker(cancelToken);\r\n        const deferred = new Deferred<ParseResult<T>>();\r\n        let timeout: NodeJS.Timeout | undefined;\r\n        // If the cancellation token is requested, we wait for a certain time before terminating the worker.\r\n        // Since the cancellation token lives longer than the parsing process, we need to dispose the event listener.\r\n        // Otherwise, we might accidentally terminate the worker after the parsing process has finished.\r\n        const cancellation = cancelToken.onCancellationRequested(() => {\r\n            timeout = setTimeout(() => {\r\n                this.terminateWorker(worker);\r\n            }, this.terminationDelay);\r\n        });\r\n        worker.parse(text).then(result => {\r\n            const hydrated = this.hydrator.hydrate<T>(result);\r\n            deferred.resolve(hydrated);\r\n        }).catch(err => {\r\n            deferred.reject(err);\r\n        }).finally(() => {\r\n            cancellation.dispose();\r\n            clearTimeout(timeout);\r\n        });\r\n        return deferred.promise;\r\n    }\r\n\r\n    protected terminateWorker(worker: ParserWorker): void {\r\n        worker.terminate();\r\n        const index = this.workerPool.indexOf(worker);\r\n        if (index >= 0) {\r\n            this.workerPool.splice(index, 1);\r\n        }\r\n    }\r\n\r\n    protected async acquireParserWorker(cancelToken: CancellationToken): Promise<ParserWorker> {\r\n        this.initializeWorkers();\r\n        for (const worker of this.workerPool) {\r\n            if (worker.ready) {\r\n                worker.lock();\r\n                return worker;\r\n            }\r\n        }\r\n        const deferred = new Deferred<ParserWorker>();\r\n        cancelToken.onCancellationRequested(() => {\r\n            const index = this.queue.indexOf(deferred);\r\n            if (index >= 0) {\r\n                this.queue.splice(index, 1);\r\n            }\r\n            deferred.reject(OperationCancelled);\r\n        });\r\n        this.queue.push(deferred);\r\n        return deferred.promise;\r\n    }\r\n\r\n    protected abstract createWorker(): ParserWorker;\r\n}\r\n\r\nexport type WorkerMessagePost = (message: unknown) => void;\r\nexport type WorkerMessageCallback = (cb: (message: unknown) => void) => void;\r\n\r\nexport class ParserWorker {\r\n\r\n    protected readonly sendMessage: WorkerMessagePost;\r\n    protected readonly _terminate: () => void;\r\n    protected readonly onReadyEmitter = new Emitter<void>();\r\n\r\n    protected deferred = new Deferred<ParseResult>();\r\n    protected _ready = true;\r\n    protected _parsing = false;\r\n\r\n    get ready(): boolean {\r\n        return this._ready;\r\n    }\r\n\r\n    get onReady(): Event<void> {\r\n        return this.onReadyEmitter.event;\r\n    }\r\n\r\n    constructor(sendMessage: WorkerMessagePost, onMessage: WorkerMessageCallback, onError: WorkerMessageCallback, terminate: () => void) {\r\n        this.sendMessage = sendMessage;\r\n        this._terminate = terminate;\r\n        onMessage(result => {\r\n            const parseResult = result as ParseResult;\r\n            this.deferred.resolve(parseResult);\r\n            this.unlock();\r\n        });\r\n        onError(error => {\r\n            this.deferred.reject(error);\r\n            this.unlock();\r\n        });\r\n    }\r\n\r\n    terminate(): void {\r\n        this.deferred.reject(OperationCancelled);\r\n        this._terminate();\r\n    }\r\n\r\n    lock(): void {\r\n        this._ready = false;\r\n    }\r\n\r\n    unlock(): void {\r\n        this._parsing = false;\r\n        this._ready = true;\r\n        this.onReadyEmitter.fire();\r\n    }\r\n\r\n    parse(text: string): Promise<ParseResult> {\r\n        if (this._parsing) {\r\n            throw new Error('Parser worker is busy');\r\n        }\r\n        this._parsing = true;\r\n        this.deferred = new Deferred();\r\n        this.sendMessage(text);\r\n        return this.deferred.promise;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { type AbstractCancellationTokenSource, CancellationToken, CancellationTokenSource } from '../utils/cancellation.js';\r\nimport { Deferred, isOperationCancelled, startCancelableOperation, type MaybePromise } from '../utils/promise-utils.js';\r\n\r\n/**\r\n * Utility service to execute mutually exclusive actions.\r\n */\r\nexport interface WorkspaceLock {\r\n    /**\r\n     * Performs a single async action, like initializing the workspace or processing document changes.\r\n     * Only one action will be executed at a time.\r\n     *\r\n     * When another action is queued up, the token provided for the action will be cancelled.\r\n     * Assuming the action makes use of this token, the next action only has to wait for the current action to finish cancellation.\r\n     */\r\n    write(action: (token: CancellationToken) => MaybePromise<void>): Promise<void>;\r\n\r\n    /**\r\n     * Performs a single action, like computing completion results or providing workspace symbols.\r\n     * Read actions will only be executed after all write actions have finished. They will be executed in parallel if possible.\r\n     *\r\n     * If a write action is currently running, the read action will be queued up and executed afterwards.\r\n     * If a new write action is queued up while a read action is waiting, the write action will receive priority and will be handled before the read action.\r\n     *\r\n     * Note that read actions are not allowed to modify anything in the workspace. Please use {@link write} instead.\r\n     */\r\n    read<T>(action: () => MaybePromise<T>): Promise<T>;\r\n\r\n    /**\r\n     * Cancels the last queued write action. All previous write actions already have been cancelled.\r\n     */\r\n    cancelWrite(): void;\r\n}\r\n\r\ntype LockAction<T = void> = (token: CancellationToken) => MaybePromise<T>;\r\n\r\ninterface LockEntry {\r\n    action: LockAction<unknown>;\r\n    deferred: Deferred<unknown>;\r\n    cancellationToken: CancellationToken;\r\n}\r\n\r\nexport class DefaultWorkspaceLock implements WorkspaceLock {\r\n\r\n    private previousTokenSource: AbstractCancellationTokenSource = new CancellationTokenSource();\r\n    private writeQueue: LockEntry[] = [];\r\n    private readQueue: LockEntry[] = [];\r\n    private done = true;\r\n\r\n    write(action: (token: CancellationToken) => MaybePromise<void>): Promise<void> {\r\n        this.cancelWrite();\r\n        const tokenSource = startCancelableOperation();\r\n        this.previousTokenSource = tokenSource;\r\n        return this.enqueue(this.writeQueue, action, tokenSource.token);\r\n    }\r\n\r\n    read<T>(action: () => MaybePromise<T>): Promise<T> {\r\n        return this.enqueue(this.readQueue, action);\r\n    }\r\n\r\n    private enqueue<T = void>(queue: LockEntry[], action: LockAction<T>, cancellationToken = CancellationToken.None): Promise<T> {\r\n        const deferred = new Deferred<unknown>();\r\n        const entry: LockEntry = {\r\n            action,\r\n            deferred,\r\n            cancellationToken\r\n        };\r\n        queue.push(entry);\r\n        this.performNextOperation();\r\n        return deferred.promise as Promise<T>;\r\n    }\r\n\r\n    private async performNextOperation(): Promise<void> {\r\n        if (!this.done) {\r\n            return;\r\n        }\r\n        const entries: LockEntry[] = [];\r\n        if (this.writeQueue.length > 0) {\r\n            // Just perform the next write action\r\n            entries.push(this.writeQueue.shift()!);\r\n        } else if (this.readQueue.length > 0) {\r\n            // Empty the read queue and perform all actions in parallel\r\n            entries.push(...this.readQueue.splice(0, this.readQueue.length));\r\n        } else {\r\n            return;\r\n        }\r\n        this.done = false;\r\n        await Promise.all(entries.map(async ({ action, deferred, cancellationToken }) => {\r\n            try {\r\n                // Move the execution of the action to the next event loop tick via `Promise.resolve()`\r\n                const result = await Promise.resolve().then(() => action(cancellationToken));\r\n                deferred.resolve(result);\r\n            } catch (err) {\r\n                if (isOperationCancelled(err)) {\r\n                    // If the operation was cancelled, we don't want to reject the promise\r\n                    deferred.resolve(undefined);\r\n                } else {\r\n                    deferred.reject(err);\r\n                }\r\n            }\r\n        }));\r\n        this.done = true;\r\n        this.performNextOperation();\r\n    }\r\n\r\n    cancelWrite(): void {\r\n        this.previousTokenSource.cancel();\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport type { TokenType } from 'chevrotain';\r\nimport { CompositeCstNodeImpl, LeafCstNodeImpl, RootCstNodeImpl } from '../parser/cst-node-builder.js';\r\nimport { isAbstractElement, type AbstractElement, type Grammar } from '../languages/generated/ast.js';\r\nimport type { Linker } from '../references/linker.js';\r\nimport type { Lexer } from '../parser/lexer.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { ParseResult } from '../parser/langium-parser.js';\r\nimport type { Reference, AstNode, CstNode, LeafCstNode, GenericAstNode, Mutable, RootCstNode } from '../syntax-tree.js';\r\nimport { isRootCstNode, isCompositeCstNode, isLeafCstNode, isAstNode, isReference } from '../syntax-tree.js';\r\nimport { streamAst } from '../utils/ast-utils.js';\r\nimport { BiMap } from '../utils/collections.js';\r\nimport { streamCst } from '../utils/cst-utils.js';\r\nimport type { LexingReport } from '../parser/token-builder.js';\r\n\r\n/**\r\n * The hydrator service is responsible for allowing AST parse results to be sent across worker threads.\r\n */\r\nexport interface Hydrator {\r\n    /**\r\n     * Converts a parse result to a plain object. The resulting object can be sent across worker threads.\r\n     */\r\n    dehydrate(result: ParseResult<AstNode>): ParseResult<object>;\r\n    /**\r\n     * Converts a plain object to a parse result. The included AST node can then be used in the main thread.\r\n     * Calling this method on objects that have not been dehydrated first will result in undefined behavior.\r\n     */\r\n    hydrate<T extends AstNode = AstNode>(result: ParseResult<object>): ParseResult<T>;\r\n}\r\n\r\nexport interface DehydrateContext {\r\n    astNodes: Map<AstNode, any>;\r\n    cstNodes: Map<CstNode, any>;\r\n}\r\n\r\nexport interface HydrateContext {\r\n    astNodes: Map<any, AstNode>;\r\n    cstNodes: Map<any, CstNode>;\r\n}\r\n\r\nexport class DefaultHydrator implements Hydrator {\r\n\r\n    protected readonly grammar: Grammar;\r\n    protected readonly lexer: Lexer;\r\n    protected readonly linker: Linker;\r\n\r\n    protected readonly grammarElementIdMap = new BiMap<AbstractElement, number>();\r\n    protected readonly tokenTypeIdMap = new BiMap<number, TokenType>();\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        this.grammar = services.Grammar;\r\n        this.lexer = services.parser.Lexer;\r\n        this.linker = services.references.Linker;\r\n    }\r\n\r\n    dehydrate(result: ParseResult<AstNode>): ParseResult<object> {\r\n        return {\r\n            lexerErrors: result.lexerErrors,\r\n            lexerReport: result.lexerReport ? this.dehydrateLexerReport(result.lexerReport) : undefined,\r\n            // We need to create shallow copies of the errors\r\n            // The original errors inherit from the `Error` class, which is not transferable across worker threads\r\n            parserErrors: result.parserErrors.map(e => ({ ...e, message: e.message })),\r\n            value: this.dehydrateAstNode(result.value, this.createDehyrationContext(result.value))\r\n        };\r\n    }\r\n\r\n    protected dehydrateLexerReport(lexerReport: LexingReport): LexingReport {\r\n        // By default, lexer reports are serializable\r\n        return lexerReport;\r\n    }\r\n\r\n    protected createDehyrationContext(node: AstNode): DehydrateContext {\r\n        const astNodes = new Map<AstNode, any>();\r\n        const cstNodes = new Map<CstNode, any>();\r\n        for (const astNode of streamAst(node)) {\r\n            astNodes.set(astNode, {});\r\n        }\r\n        if (node.$cstNode) {\r\n            for (const cstNode of streamCst(node.$cstNode)) {\r\n                cstNodes.set(cstNode, {});\r\n            }\r\n        }\r\n        return {\r\n            astNodes,\r\n            cstNodes\r\n        };\r\n    }\r\n\r\n    protected dehydrateAstNode(node: AstNode, context: DehydrateContext): object {\r\n        const obj = context.astNodes.get(node) as Record<string, any>;\r\n        obj.$type = node.$type;\r\n        obj.$containerIndex = node.$containerIndex;\r\n        obj.$containerProperty = node.$containerProperty;\r\n        if (node.$cstNode !== undefined) {\r\n            obj.$cstNode = this.dehydrateCstNode(node.$cstNode, context);\r\n        }\r\n        for (const [name, value] of Object.entries(node)) {\r\n            if (name.startsWith('$')) {\r\n                continue;\r\n            }\r\n            if (Array.isArray(value)) {\r\n                const arr: any[] = [];\r\n                obj[name] = arr;\r\n                for (const item of value) {\r\n                    if (isAstNode(item)) {\r\n                        arr.push(this.dehydrateAstNode(item, context));\r\n                    } else if (isReference(item)) {\r\n                        arr.push(this.dehydrateReference(item, context));\r\n                    } else {\r\n                        arr.push(item);\r\n                    }\r\n                }\r\n            } else if (isAstNode(value)) {\r\n                obj[name] = this.dehydrateAstNode(value, context);\r\n            } else if (isReference(value)) {\r\n                obj[name] = this.dehydrateReference(value, context);\r\n            } else if (value !== undefined) {\r\n                obj[name] = value;\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    protected dehydrateReference(reference: Reference, context: DehydrateContext): any {\r\n        const obj: Record<string, unknown> = {};\r\n        obj.$refText = reference.$refText;\r\n        if (reference.$refNode) {\r\n            obj.$refNode = context.cstNodes.get(reference.$refNode);\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    protected dehydrateCstNode(node: CstNode, context: DehydrateContext): any {\r\n        const cstNode = context.cstNodes.get(node) as Record<string, any>;\r\n        if (isRootCstNode(node)) {\r\n            cstNode.fullText = node.fullText;\r\n        } else {\r\n            // Note: This returns undefined for hidden nodes (i.e. comments)\r\n            cstNode.grammarSource = this.getGrammarElementId(node.grammarSource);\r\n        }\r\n        cstNode.hidden = node.hidden;\r\n        cstNode.astNode = context.astNodes.get(node.astNode);\r\n        if (isCompositeCstNode(node)) {\r\n            cstNode.content = node.content.map(child => this.dehydrateCstNode(child, context));\r\n        } else if (isLeafCstNode(node)) {\r\n            cstNode.tokenType = node.tokenType.name;\r\n            cstNode.offset = node.offset;\r\n            cstNode.length = node.length;\r\n            cstNode.startLine = node.range.start.line;\r\n            cstNode.startColumn = node.range.start.character;\r\n            cstNode.endLine = node.range.end.line;\r\n            cstNode.endColumn = node.range.end.character;\r\n        }\r\n        return cstNode;\r\n    }\r\n\r\n    hydrate<T extends AstNode = AstNode>(result: ParseResult<object>): ParseResult<T> {\r\n        const node = result.value;\r\n        const context = this.createHydrationContext(node);\r\n        if ('$cstNode' in node) {\r\n            this.hydrateCstNode(node.$cstNode, context);\r\n        }\r\n        return {\r\n            lexerErrors: result.lexerErrors,\r\n            lexerReport: result.lexerReport,\r\n            parserErrors: result.parserErrors,\r\n            value: this.hydrateAstNode(node, context) as T\r\n        };\r\n    }\r\n\r\n    protected createHydrationContext(node: any): HydrateContext {\r\n        const astNodes = new Map<any, AstNode>();\r\n        const cstNodes = new Map<any, CstNode>();\r\n        for (const astNode of streamAst(node)) {\r\n            astNodes.set(astNode, {} as AstNode);\r\n        }\r\n        let root: RootCstNode;\r\n        if (node.$cstNode) {\r\n            for (const cstNode of streamCst(node.$cstNode)) {\r\n                let cst: Mutable<CstNode> | undefined;\r\n                if ('fullText' in cstNode) {\r\n                    cst = new RootCstNodeImpl(cstNode.fullText as string);\r\n                    root = cst as RootCstNode;\r\n                } else if ('content' in cstNode) {\r\n                    cst = new CompositeCstNodeImpl();\r\n                } else if ('tokenType' in cstNode) {\r\n                    cst = this.hydrateCstLeafNode(cstNode);\r\n                }\r\n                if (cst) {\r\n                    cstNodes.set(cstNode, cst);\r\n                    cst.root = root!;\r\n                }\r\n            }\r\n        }\r\n        return {\r\n            astNodes,\r\n            cstNodes\r\n        };\r\n    }\r\n\r\n    protected hydrateAstNode(node: any, context: HydrateContext): AstNode {\r\n        const astNode = context.astNodes.get(node) as Mutable<GenericAstNode>;\r\n        astNode.$type = node.$type;\r\n        astNode.$containerIndex = node.$containerIndex;\r\n        astNode.$containerProperty = node.$containerProperty;\r\n        if (node.$cstNode) {\r\n            astNode.$cstNode = context.cstNodes.get(node.$cstNode);\r\n        }\r\n        for (const [name, value] of Object.entries(node)) {\r\n            if (name.startsWith('$')) {\r\n                continue;\r\n            }\r\n            if (Array.isArray(value)) {\r\n                const arr: unknown[] = [];\r\n                astNode[name] = arr;\r\n                for (const item of value) {\r\n                    if (isAstNode(item)) {\r\n                        arr.push(this.setParent(this.hydrateAstNode(item, context), astNode));\r\n                    } else if (isReference(item)) {\r\n                        arr.push(this.hydrateReference(item, astNode, name, context));\r\n                    } else {\r\n                        arr.push(item);\r\n                    }\r\n                }\r\n            } else if (isAstNode(value)) {\r\n                astNode[name] = this.setParent(this.hydrateAstNode(value, context), astNode);\r\n            } else if (isReference(value)) {\r\n                astNode[name] = this.hydrateReference(value, astNode, name, context);\r\n            } else if (value !== undefined) {\r\n                astNode[name] = value;\r\n            }\r\n        }\r\n        return astNode;\r\n    }\r\n\r\n    protected setParent(node: any, parent: any): any {\r\n        node.$container = parent as AstNode;\r\n        return node;\r\n    }\r\n\r\n    protected hydrateReference(reference: any, node: AstNode, name: string, context: HydrateContext): Reference {\r\n        return this.linker.buildReference(node, name, context.cstNodes.get(reference.$refNode)!, reference.$refText);\r\n    }\r\n\r\n    protected hydrateCstNode(cstNode: any, context: HydrateContext, num = 0): CstNode {\r\n        const cstNodeObj = context.cstNodes.get(cstNode) as Mutable<CstNode>;\r\n        if (typeof cstNode.grammarSource === 'number') {\r\n            cstNodeObj.grammarSource = this.getGrammarElement(cstNode.grammarSource);\r\n        }\r\n        cstNodeObj.astNode = context.astNodes.get(cstNode.astNode)!;\r\n        if (isCompositeCstNode(cstNodeObj)) {\r\n            for (const child of cstNode.content) {\r\n                const hydrated = this.hydrateCstNode(child, context, num++);\r\n                cstNodeObj.content.push(hydrated);\r\n            }\r\n        }\r\n        return cstNodeObj;\r\n    }\r\n\r\n    protected hydrateCstLeafNode(cstNode: any): LeafCstNode {\r\n        const tokenType = this.getTokenType(cstNode.tokenType);\r\n        const offset = cstNode.offset;\r\n        const length = cstNode.length;\r\n        const startLine = cstNode.startLine;\r\n        const startColumn = cstNode.startColumn;\r\n        const endLine = cstNode.endLine;\r\n        const endColumn = cstNode.endColumn;\r\n        const hidden = cstNode.hidden;\r\n        const node = new LeafCstNodeImpl(\r\n            offset,\r\n            length,\r\n            {\r\n                start: {\r\n                    line: startLine,\r\n                    character: startColumn\r\n                },\r\n                end: {\r\n                    line: endLine,\r\n                    character: endColumn\r\n                }\r\n            },\r\n            tokenType,\r\n            hidden\r\n        );\r\n        return node;\r\n    }\r\n\r\n    protected getTokenType(name: string): TokenType {\r\n        return this.lexer.definition[name];\r\n    }\r\n\r\n    protected getGrammarElementId(node: AbstractElement): number | undefined {\r\n        if (this.grammarElementIdMap.size === 0) {\r\n            this.createGrammarElementIdMap();\r\n        }\r\n        return this.grammarElementIdMap.get(node);\r\n    }\r\n\r\n    protected getGrammarElement(id: number): AbstractElement {\r\n        if (this.grammarElementIdMap.size === 0) {\r\n            this.createGrammarElementIdMap();\r\n        }\r\n        const element = this.grammarElementIdMap.getKey(id);\r\n        if (element) {\r\n            return element;\r\n        } else {\r\n            throw new Error('Invalid grammar element id: ' + id);\r\n        }\r\n    }\r\n\r\n    protected createGrammarElementIdMap(): void {\r\n        let id = 0;\r\n        for (const element of streamAst(this.grammar)) {\r\n            if (isAbstractElement(element)) {\r\n                this.grammarElementIdMap.set(element, id++);\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n******************************************************************************/\r\n\r\nimport type { Module } from './dependency-injection.js';\r\nimport type { LangiumDefaultCoreServices, LangiumDefaultSharedCoreServices, LangiumCoreServices, LangiumSharedCoreServices } from './services.js';\r\nimport type { FileSystemProvider } from './workspace/file-system-provider.js';\r\nimport { createGrammarConfig } from './languages/grammar-config.js';\r\nimport { createCompletionParser } from './parser/completion-parser-builder.js';\r\nimport { createLangiumParser } from './parser/langium-parser-builder.js';\r\nimport { DefaultTokenBuilder } from './parser/token-builder.js';\r\nimport { DefaultValueConverter } from './parser/value-converter.js';\r\nimport { DefaultLinker } from './references/linker.js';\r\nimport { DefaultNameProvider } from './references/name-provider.js';\r\nimport { DefaultReferences } from './references/references.js';\r\nimport { DefaultScopeComputation } from './references/scope-computation.js';\r\nimport { DefaultScopeProvider } from './references/scope-provider.js';\r\nimport { DefaultJsonSerializer } from './serializer/json-serializer.js';\r\nimport { DefaultServiceRegistry } from './service-registry.js';\r\nimport { DefaultDocumentValidator } from './validation/document-validator.js';\r\nimport { ValidationRegistry } from './validation/validation-registry.js';\r\nimport { DefaultAstNodeDescriptionProvider, DefaultReferenceDescriptionProvider } from './workspace/ast-descriptions.js';\r\nimport { DefaultAstNodeLocator } from './workspace/ast-node-locator.js';\r\nimport { DefaultConfigurationProvider } from './workspace/configuration.js';\r\nimport { DefaultDocumentBuilder } from './workspace/document-builder.js';\r\nimport { DefaultLangiumDocumentFactory, DefaultLangiumDocuments } from './workspace/documents.js';\r\nimport { DefaultIndexManager } from './workspace/index-manager.js';\r\nimport { DefaultWorkspaceManager } from './workspace/workspace-manager.js';\r\nimport { DefaultLexer, DefaultLexerErrorMessageProvider } from './parser/lexer.js';\r\nimport { JSDocDocumentationProvider } from './documentation/documentation-provider.js';\r\nimport { DefaultCommentProvider } from './documentation/comment-provider.js';\r\nimport { LangiumParserErrorMessageProvider } from './parser/langium-parser.js';\r\nimport { DefaultAsyncParser } from './parser/async-parser.js';\r\nimport { DefaultWorkspaceLock } from './workspace/workspace-lock.js';\r\nimport { DefaultHydrator } from './serializer/hydrator.js';\r\n\r\n/**\r\n * Context required for creating the default language-specific dependency injection module.\r\n */\r\nexport interface DefaultCoreModuleContext {\r\n    shared: LangiumSharedCoreServices;\r\n}\r\n\r\n/**\r\n * Creates a dependency injection module configuring the default core services.\r\n * This is a set of services that are dedicated to a specific language.\r\n */\r\nexport function createDefaultCoreModule(context: DefaultCoreModuleContext): Module<LangiumCoreServices, LangiumDefaultCoreServices> {\r\n    return {\r\n        documentation: {\r\n            CommentProvider: (services) => new DefaultCommentProvider(services),\r\n            DocumentationProvider: (services) => new JSDocDocumentationProvider(services)\r\n        },\r\n        parser: {\r\n            AsyncParser: (services) => new DefaultAsyncParser(services),\r\n            GrammarConfig: (services) => createGrammarConfig(services),\r\n            LangiumParser: (services) => createLangiumParser(services),\r\n            CompletionParser: (services) => createCompletionParser(services),\r\n            ValueConverter: () => new DefaultValueConverter(),\r\n            TokenBuilder: () => new DefaultTokenBuilder(),\r\n            Lexer: (services) => new DefaultLexer(services),\r\n            ParserErrorMessageProvider: () => new LangiumParserErrorMessageProvider(),\r\n            LexerErrorMessageProvider: () => new DefaultLexerErrorMessageProvider()\r\n        },\r\n        workspace: {\r\n            AstNodeLocator: () => new DefaultAstNodeLocator(),\r\n            AstNodeDescriptionProvider: (services) => new DefaultAstNodeDescriptionProvider(services),\r\n            ReferenceDescriptionProvider: (services) => new DefaultReferenceDescriptionProvider(services)\r\n        },\r\n        references: {\r\n            Linker: (services) => new DefaultLinker(services),\r\n            NameProvider: () => new DefaultNameProvider(),\r\n            ScopeProvider: (services) => new DefaultScopeProvider(services),\r\n            ScopeComputation: (services) => new DefaultScopeComputation(services),\r\n            References: (services) => new DefaultReferences(services)\r\n        },\r\n        serializer: {\r\n            Hydrator: (services) => new DefaultHydrator(services),\r\n            JsonSerializer: (services) => new DefaultJsonSerializer(services)\r\n        },\r\n        validation: {\r\n            DocumentValidator: (services) => new DefaultDocumentValidator(services),\r\n            ValidationRegistry: (services) => new ValidationRegistry(services)\r\n        },\r\n        shared: () => context.shared\r\n    };\r\n}\r\n\r\n/**\r\n * Context required for creating the default shared dependency injection module.\r\n */\r\nexport interface DefaultSharedCoreModuleContext {\r\n    /**\r\n     * Factory function to create a {@link FileSystemProvider}.\r\n     *\r\n     * Langium exposes an `EmptyFileSystem` and `NodeFileSystem`, exported through `langium/node`.\r\n     * When running Langium as part of a vscode language server or a Node.js app, using the `NodeFileSystem` is recommended,\r\n     * the `EmptyFileSystem` in every other use case.\r\n     */\r\n    fileSystemProvider: (services: LangiumSharedCoreServices) => FileSystemProvider;\r\n}\r\n\r\n/**\r\n * Creates a dependency injection module configuring the default shared core services.\r\n * This is the set of services that are shared between multiple languages.\r\n */\r\nexport function createDefaultSharedCoreModule(context: DefaultSharedCoreModuleContext): Module<LangiumSharedCoreServices, LangiumDefaultSharedCoreServices> {\r\n    return {\r\n        ServiceRegistry: (services) => new DefaultServiceRegistry(services),\r\n        workspace: {\r\n            LangiumDocuments: (services) => new DefaultLangiumDocuments(services),\r\n            LangiumDocumentFactory: (services) => new DefaultLangiumDocumentFactory(services),\r\n            DocumentBuilder: (services) => new DefaultDocumentBuilder(services),\r\n            IndexManager: (services) => new DefaultIndexManager(services),\r\n            WorkspaceManager: (services) => new DefaultWorkspaceManager(services),\r\n            FileSystemProvider: (services) => context.fileSystemProvider(services),\r\n            WorkspaceLock: () => new DefaultWorkspaceLock(),\r\n            ConfigurationProvider: (services) => new DefaultConfigurationProvider(services)\r\n        }\r\n    };\r\n}\r\n","/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n/**\r\n * A `Module<I>` is a description of possibly grouped service factories.\r\n *\r\n * Given a type I = { group: { service: A } },\r\n * Module<I> := { group: { service: (injector: I) => A } }\r\n *\r\n * Making `I` available during the creation of `I` allows us to create cyclic\r\n * dependencies.\r\n */\r\nexport type Module<I, T = I> = {\r\n    [K in keyof T]: Module<I, T[K]> | ((injector: I) => T[K])\r\n}\r\n\r\nexport namespace Module {\r\n    export const merge = <M1, M2, R extends M1 & M2>(m1: Module<R, M1>, m2: Module<R, M2>) => (_merge(_merge({}, m1), m2) as Module<R, M1 & M2>);\r\n}\r\n\r\n/**\r\n * Given a set of modules, the inject function returns a lazily evaluated injector\r\n * that injects dependencies into the requested service when it is requested the\r\n * first time. Subsequent requests will return the same service.\r\n *\r\n * In the case of cyclic dependencies, an Error will be thrown. This can be fixed\r\n * by injecting a provider `() => T` instead of a `T`.\r\n *\r\n * Please note that the arguments may be objects or arrays. However, the result will\r\n * be an object. Using it with for..of will have no effect.\r\n *\r\n * @param module1 first Module\r\n * @param module2 (optional) second Module\r\n * @param module3 (optional) third Module\r\n * @param module4 (optional) fourth Module\r\n * @param module5 (optional) fifth Module\r\n * @param module6 (optional) sixth Module\r\n * @param module7 (optional) seventh Module\r\n * @param module8 (optional) eighth Module\r\n * @param module9 (optional) ninth Module\r\n * @returns a new object of type I\r\n */\r\nexport function inject<I1, I2, I3, I4, I5, I6, I7, I8, I9, I extends I1 & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9>(\r\n    module1: Module<I, I1>, module2?: Module<I, I2>, module3?: Module<I, I3>, module4?: Module<I, I4>, module5?: Module<I, I5>, module6?: Module<I, I6>, module7?: Module<I, I7>, module8?: Module<I, I8>, module9?: Module<I, I9>\r\n): I {\r\n    const module = [module1, module2, module3, module4, module5, module6, module7, module8, module9].reduce(_merge, {}) as Module<I>;\r\n    return _inject(module);\r\n}\r\n\r\nconst isProxy = Symbol('isProxy');\r\n\r\n/**\r\n * Eagerly load all services in the given dependency injection container. This is sometimes\r\n * necessary because services can register event listeners in their constructors.\r\n */\r\nexport function eagerLoad<T>(item: T): T {\r\n    if (item && (item as any)[isProxy]) {\r\n        for (const value of Object.values(item)) {\r\n            eagerLoad(value);\r\n        }\r\n    }\r\n    return item;\r\n}\r\n\r\n/**\r\n * Helper function that returns an injector by creating a proxy.\r\n * Invariant: injector is of type I. If injector is undefined, then T = I.\r\n */\r\nfunction _inject<I, T>(module: Module<I, T>, injector?: any): T {\r\n    const proxy: any = new Proxy({} as any, {\r\n        deleteProperty: () => false,\r\n        set: () => {\r\n            throw new Error('Cannot set property on injected service container');\r\n        },\r\n        get: (obj, prop) => {\r\n            if (prop === isProxy) {\r\n                return true;\r\n            } else {\r\n                return _resolve(obj, prop, module, injector || proxy);\r\n            }\r\n        },\r\n        getOwnPropertyDescriptor: (obj, prop) => (_resolve(obj, prop, module, injector || proxy), Object.getOwnPropertyDescriptor(obj, prop)), // used by for..in\r\n        has: (_, prop) => prop in module, // used by ..in..\r\n        ownKeys: () => [...Object.getOwnPropertyNames(module)] // used by for..in\r\n    });\r\n    return proxy;\r\n}\r\n\r\n/**\r\n * Internally used to tag a requested dependency, directly before calling the factory.\r\n * This allows us to find cycles during instance creation.\r\n */\r\nconst __requested__ = Symbol();\r\n\r\n/**\r\n * Returns the value `obj[prop]`. If the value does not exist, yet, it is resolved from\r\n * the module description. The result of service factories is cached. Groups are\r\n * recursively proxied.\r\n *\r\n * @param obj an object holding all group proxies and services\r\n * @param prop the key of a value within obj\r\n * @param module an object containing groups and service factories\r\n * @param injector the first level proxy that provides access to all values\r\n * @returns the requested value `obj[prop]`\r\n * @throws Error if a dependency cycle is detected\r\n */\r\nfunction _resolve<I, T>(obj: any, prop: string | symbol | number, module: Module<I, T>, injector: I): T[keyof T] | undefined {\r\n    if (prop in obj) {\r\n        if (obj[prop] instanceof Error) {\r\n            throw new Error('Construction failure. Please make sure that your dependencies are constructable.', {cause: obj[prop]});\r\n        }\r\n        if (obj[prop] === __requested__) {\r\n            throw new Error('Cycle detected. Please make \"' + String(prop) + '\" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');\r\n        }\r\n        return obj[prop];\r\n    } else if (prop in module) {\r\n        const value: Module<I, T[keyof T]> | ((injector: I) => T[keyof T]) = module[prop as keyof T];\r\n        obj[prop] = __requested__;\r\n        try {\r\n            obj[prop] = (typeof value === 'function') ? value(injector) : _inject(value, injector);\r\n        } catch (error) {\r\n            obj[prop] = error instanceof Error ? error : undefined;\r\n            throw error;\r\n        }\r\n        return obj[prop];\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n/**\r\n * Performs a deep-merge of two modules by writing source entries into the target module.\r\n *\r\n * @param target the module which is written\r\n * @param source the module which is read\r\n * @returns the target module\r\n */\r\nfunction _merge(target: Module<any>, source?: Module<any>): Module<unknown> {\r\n    if (source) {\r\n        for (const [key, value2] of Object.entries(source)) {\r\n            if (value2 !== undefined) {\r\n                const value1 = target[key];\r\n                if (value1 !== null && value2 !== null && typeof value1 === 'object' && typeof value2 === 'object') {\r\n                    target[key] = _merge(value1, value2);\r\n                } else {\r\n                    target[key] = value2;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return target;\r\n}\r\n","/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CustomPatternMatcherFunc, TokenType, IToken, IMultiModeLexerDefinition, TokenVocabulary } from 'chevrotain';\r\nimport type { Grammar, TerminalRule } from '../languages/generated/ast.js';\r\nimport type { LexingReport, TokenBuilderOptions } from './token-builder.js';\r\nimport type { LexerResult, TokenizeOptions } from './lexer.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { createToken, createTokenInstance, Lexer } from 'chevrotain';\r\nimport { DefaultTokenBuilder } from './token-builder.js';\r\nimport { DEFAULT_TOKENIZE_OPTIONS, DefaultLexer, isTokenTypeArray } from './lexer.js';\r\n\r\ntype IndentationAwareDelimiter<TokenName extends string> = [begin: TokenName, end: TokenName];\r\n\r\nexport interface IndentationTokenBuilderOptions<TerminalName extends string = string, KeywordName extends string = string> {\r\n    /**\r\n     * The name of the token used to denote indentation in the grammar.\r\n     * A possible definition in the grammar could look like this:\r\n     * ```langium\r\n     * terminal INDENT: ':synthetic-indent:';\r\n     * ```\r\n     *\r\n     * @default 'INDENT'\r\n     */\r\n    indentTokenName: TerminalName;\r\n    /**\r\n     * The name of the token used to denote deindentation in the grammar.\r\n     * A possible definition in the grammar could look like this:\r\n     * ```langium\r\n     * terminal DEDENT: ':synthetic-dedent:';\r\n     * ```\r\n     *\r\n     * @default 'DEDENT'\r\n     */\r\n    dedentTokenName: TerminalName;\r\n    /**\r\n     * The name of the token used to denote whitespace other than indentation and newlines in the grammar.\r\n     * A possible definition in the grammar could look like this:\r\n     * ```langium\r\n     * hidden terminal WS: /[ \\t]+/;\r\n     * ```\r\n     *\r\n     * @default 'WS'\r\n     */\r\n    whitespaceTokenName: TerminalName;\r\n    /**\r\n     * The delimiter tokens inside of which indentation should be ignored and treated as normal whitespace.\r\n     * For example, Python doesn't treat any whitespace between `(` and `)` as significant.\r\n     *\r\n     * Can be either terminal tokens or keyword tokens.\r\n     *\r\n     * @default []\r\n     */\r\n    ignoreIndentationDelimiters: Array<IndentationAwareDelimiter<TerminalName | KeywordName>>\r\n}\r\n\r\nexport const indentationBuilderDefaultOptions: IndentationTokenBuilderOptions = {\r\n    indentTokenName: 'INDENT',\r\n    dedentTokenName: 'DEDENT',\r\n    whitespaceTokenName: 'WS',\r\n    ignoreIndentationDelimiters: [],\r\n};\r\n\r\nexport enum LexingMode {\r\n    REGULAR = 'indentation-sensitive',\r\n    IGNORE_INDENTATION = 'ignore-indentation',\r\n}\r\n\r\nexport interface IndentationLexingReport extends LexingReport {\r\n    /** Dedent tokens that are necessary to close the remaining indents. */\r\n    remainingDedents: IToken[];\r\n}\r\n\r\n/**\r\n * A token builder that is sensitive to indentation in the input text.\r\n * It will generate tokens for indentation and dedentation based on the indentation level.\r\n *\r\n * The first generic parameter corresponds to the names of terminal tokens,\r\n * while the second one corresponds to the names of keyword tokens.\r\n * Both parameters are optional and can be imported from `./generated/ast.js`.\r\n *\r\n * Inspired by https://github.com/chevrotain/chevrotain/blob/master/examples/lexer/python_indentation/python_indentation.js\r\n */\r\nexport class IndentationAwareTokenBuilder<Terminals extends string = string, KeywordName extends string = string> extends DefaultTokenBuilder {\r\n    /**\r\n     * The stack stores all the previously matched indentation levels to understand how deeply the next tokens are nested.\r\n     * The stack is valid for lexing\r\n     */\r\n    protected indentationStack: number[] = [0];\r\n\r\n    readonly options: IndentationTokenBuilderOptions<Terminals, KeywordName>;\r\n\r\n    /**\r\n     * The token type to be used for indentation tokens\r\n     */\r\n    readonly indentTokenType: TokenType;\r\n\r\n    /**\r\n     * The token type to be used for dedentation tokens\r\n     */\r\n    readonly dedentTokenType: TokenType;\r\n\r\n    /**\r\n     * A regular expression to match a series of tabs and/or spaces.\r\n     * Override this to customize what the indentation is allowed to consist of.\r\n     */\r\n    protected whitespaceRegExp = /[ \\t]+/y;\r\n\r\n    constructor(options: Partial<IndentationTokenBuilderOptions<NoInfer<Terminals>, NoInfer<KeywordName>>> = indentationBuilderDefaultOptions as IndentationTokenBuilderOptions<Terminals, KeywordName>) {\r\n        super();\r\n        this.options = {\r\n            ...indentationBuilderDefaultOptions as IndentationTokenBuilderOptions<Terminals, KeywordName>,\r\n            ...options,\r\n        };\r\n\r\n        this.indentTokenType = createToken({\r\n            name: this.options.indentTokenName,\r\n            pattern: this.indentMatcher.bind(this),\r\n            line_breaks: false,\r\n        });\r\n\r\n        this.dedentTokenType = createToken({\r\n            name: this.options.dedentTokenName,\r\n            pattern: this.dedentMatcher.bind(this),\r\n            line_breaks: false,\r\n        });\r\n    }\r\n\r\n    override buildTokens(grammar: Grammar, options?: TokenBuilderOptions | undefined): TokenVocabulary {\r\n        const tokenTypes = super.buildTokens(grammar, options);\r\n        if (!isTokenTypeArray(tokenTypes)) {\r\n            throw new Error('Invalid tokens built by default builder');\r\n        }\r\n\r\n        const { indentTokenName, dedentTokenName, whitespaceTokenName, ignoreIndentationDelimiters } = this.options;\r\n\r\n        // Rearrange tokens because whitespace (which is ignored) goes to the beginning by default, consuming indentation as well\r\n        // Order should be: dedent, indent, spaces\r\n        let dedent: TokenType | undefined;\r\n        let indent: TokenType | undefined;\r\n        let ws: TokenType | undefined;\r\n        const otherTokens: TokenType[] = [];\r\n        for (const tokenType of tokenTypes) {\r\n            for (const [begin, end] of ignoreIndentationDelimiters) {\r\n                if (tokenType.name === begin) {\r\n                    tokenType.PUSH_MODE = LexingMode.IGNORE_INDENTATION;\r\n                } else if (tokenType.name === end) {\r\n                    tokenType.POP_MODE = true;\r\n                }\r\n            }\r\n            if (tokenType.name === dedentTokenName) {\r\n                dedent = tokenType;\r\n            } else if (tokenType.name === indentTokenName) {\r\n                indent = tokenType;\r\n            } else if (tokenType.name === whitespaceTokenName) {\r\n                ws = tokenType;\r\n            } else {\r\n                otherTokens.push(tokenType);\r\n            }\r\n        }\r\n        if (!dedent || !indent || !ws) {\r\n            throw new Error('Some indentation/whitespace tokens not found!');\r\n        }\r\n\r\n        if (ignoreIndentationDelimiters.length > 0) {\r\n            const multiModeLexerDef: IMultiModeLexerDefinition = {\r\n                modes: {\r\n                    [LexingMode.REGULAR]: [dedent, indent, ...otherTokens, ws],\r\n                    [LexingMode.IGNORE_INDENTATION]: [...otherTokens, ws],\r\n                },\r\n                defaultMode: LexingMode.REGULAR,\r\n            };\r\n            return multiModeLexerDef;\r\n        } else {\r\n            return [dedent, indent, ws, ...otherTokens];\r\n        }\r\n    }\r\n\r\n    override flushLexingReport(text: string): IndentationLexingReport {\r\n        const result = super.flushLexingReport(text);\r\n        return {\r\n            ...result,\r\n            remainingDedents: this.flushRemainingDedents(text),\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Helper function to check if the current position is the start of a new line.\r\n     *\r\n     * @param text The full input string.\r\n     * @param offset The current position at which to check\r\n     * @returns Whether the current position is the start of a new line\r\n     */\r\n    protected isStartOfLine(text: string, offset: number): boolean {\r\n        return offset === 0 || '\\r\\n'.includes(text[offset - 1]);\r\n    }\r\n\r\n    /**\r\n     * A helper function used in matching both indents and dedents.\r\n     *\r\n     * @param text The full input string.\r\n     * @param offset The current position at which to attempt a match\r\n     * @param tokens Previously scanned tokens\r\n     * @param groups Token Groups\r\n     * @returns The current and previous indentation levels and the matched whitespace\r\n     */\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    protected matchWhitespace(text: string, offset: number, tokens: IToken[], groups: Record<string, IToken[]>): { currIndentLevel: number, prevIndentLevel: number, match: RegExpExecArray | null } {\r\n        this.whitespaceRegExp.lastIndex = offset;\r\n        const match = this.whitespaceRegExp.exec(text);\r\n        return {\r\n            currIndentLevel: match?.[0].length ?? 0,\r\n            prevIndentLevel: this.indentationStack.at(-1)!,\r\n            match,\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Helper function to create an instance of an indentation token.\r\n     *\r\n     * @param tokenType Indent or dedent token type\r\n     * @param text Full input string, used to calculate the line number\r\n     * @param image The original image of the token (tabs or spaces)\r\n     * @param offset Current position in the input string\r\n     * @returns The indentation token instance\r\n     */\r\n    protected createIndentationTokenInstance(tokenType: TokenType, text: string, image: string, offset: number): IToken {\r\n        const lineNumber = this.getLineNumber(text, offset);\r\n        return createTokenInstance(\r\n            tokenType,\r\n            image,\r\n            offset, offset + image.length,\r\n            lineNumber, lineNumber,\r\n            1, image.length,\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Helper function to get the line number at a given offset.\r\n     *\r\n     * @param text Full input string, used to calculate the line number\r\n     * @param offset Current position in the input string\r\n     * @returns The line number at the given offset\r\n     */\r\n    protected getLineNumber(text: string, offset: number): number {\r\n        return text.substring(0, offset).split(/\\r\\n|\\r|\\n/).length;\r\n    }\r\n\r\n    /**\r\n     * A custom pattern for matching indents\r\n     *\r\n     * @param text The full input string.\r\n     * @param offset The offset at which to attempt a match\r\n     * @param tokens Previously scanned tokens\r\n     * @param groups Token Groups\r\n     */\r\n    protected indentMatcher(text: string, offset: number, tokens: IToken[], groups: Record<string, IToken[]>): ReturnType<CustomPatternMatcherFunc> {\r\n        if (!this.isStartOfLine(text, offset)) {\r\n            return null;\r\n        }\r\n\r\n        const { currIndentLevel, prevIndentLevel, match } = this.matchWhitespace(text, offset, tokens, groups);\r\n\r\n        if (currIndentLevel <= prevIndentLevel) {\r\n            // shallower indentation (should be matched by dedent)\r\n            // or same indentation level (should be matched by whitespace and ignored)\r\n            return null;\r\n        }\r\n\r\n        this.indentationStack.push(currIndentLevel);\r\n\r\n        return match;\r\n    }\r\n\r\n    /**\r\n     * A custom pattern for matching dedents\r\n     *\r\n     * @param text The full input string.\r\n     * @param offset The offset at which to attempt a match\r\n     * @param tokens Previously scanned tokens\r\n     * @param groups Token Groups\r\n     */\r\n    protected dedentMatcher(text: string, offset: number, tokens: IToken[], groups: Record<string, IToken[]>): ReturnType<CustomPatternMatcherFunc> {\r\n        if (!this.isStartOfLine(text, offset)) {\r\n            return null;\r\n        }\r\n\r\n        const { currIndentLevel, prevIndentLevel, match } = this.matchWhitespace(text, offset, tokens, groups);\r\n\r\n        if (currIndentLevel >= prevIndentLevel) {\r\n            // bigger indentation (should be matched by indent)\r\n            // or same indentation level (should be matched by whitespace and ignored)\r\n            return null;\r\n        }\r\n\r\n        const matchIndentIndex = this.indentationStack.lastIndexOf(currIndentLevel);\r\n\r\n        // Any dedent must match some previous indentation level.\r\n        if (matchIndentIndex === -1) {\r\n            this.diagnostics.push({\r\n                severity: 'error',\r\n                message: `Invalid dedent level ${currIndentLevel} at offset: ${offset}. Current indentation stack: ${this.indentationStack}`,\r\n                offset,\r\n                length: match?.[0]?.length ?? 0,\r\n                line: this.getLineNumber(text, offset),\r\n                column: 1\r\n            });\r\n            return null;\r\n        }\r\n\r\n        const numberOfDedents = this.indentationStack.length - matchIndentIndex - 1;\r\n        const newlinesBeforeDedent = text.substring(0, offset).match(/[\\r\\n]+$/)?.[0].length ?? 1;\r\n\r\n        for (let i = 0; i < numberOfDedents; i++) {\r\n            const token = this.createIndentationTokenInstance(\r\n                this.dedentTokenType,\r\n                text,\r\n                '',  // Dedents are 0-width tokens\r\n                offset - (newlinesBeforeDedent - 1), // Place the dedent after the first new line character\r\n            );\r\n            tokens.push(token);\r\n            this.indentationStack.pop();\r\n        }\r\n\r\n        // Token already added, let the dedentation now be consumed as whitespace (if any) and ignored\r\n        return null;\r\n    }\r\n\r\n    protected override buildTerminalToken(terminal: TerminalRule): TokenType {\r\n        const tokenType = super.buildTerminalToken(terminal);\r\n        const { indentTokenName, dedentTokenName, whitespaceTokenName } = this.options;\r\n\r\n        if (tokenType.name === indentTokenName) {\r\n            return this.indentTokenType;\r\n        } else if (tokenType.name === dedentTokenName) {\r\n            return this.dedentTokenType;\r\n        } else if (tokenType.name === whitespaceTokenName) {\r\n            return createToken({\r\n                name: whitespaceTokenName,\r\n                pattern: this.whitespaceRegExp,\r\n                group: Lexer.SKIPPED,\r\n            });\r\n        }\r\n        return tokenType;\r\n    }\r\n\r\n    /**\r\n     * Resets the indentation stack between different runs of the lexer\r\n     *\r\n     * @param text Full text that was tokenized\r\n     * @returns Remaining dedent tokens to match all previous indents at the end of the file\r\n     */\r\n    flushRemainingDedents(text: string): IToken[] {\r\n        const remainingDedents: IToken[] = [];\r\n        while (this.indentationStack.length > 1) {\r\n            remainingDedents.push(\r\n                this.createIndentationTokenInstance(this.dedentTokenType, text, '', text.length)\r\n            );\r\n            this.indentationStack.pop();\r\n        }\r\n\r\n        this.indentationStack = [0];\r\n        return remainingDedents;\r\n    }\r\n}\r\n\r\n/**\r\n * A lexer that is aware of indentation in the input text.\r\n * The only purpose of this lexer is to reset the internal state of the {@link IndentationAwareTokenBuilder}\r\n * between the tokenization of different text inputs.\r\n *\r\n * In your module, you can override the default lexer with this one as such:\r\n * ```ts\r\n * parser: {\r\n *    TokenBuilder: () => new IndentationAwareTokenBuilder(),\r\n *    Lexer: (services) => new IndentationAwareLexer(services),\r\n * }\r\n * ```\r\n */\r\nexport class IndentationAwareLexer extends DefaultLexer {\r\n\r\n    protected readonly indentationTokenBuilder: IndentationAwareTokenBuilder;\r\n\r\n    constructor(services: LangiumCoreServices) {\r\n        super(services);\r\n        if (services.parser.TokenBuilder instanceof IndentationAwareTokenBuilder) {\r\n            this.indentationTokenBuilder = services.parser.TokenBuilder;\r\n        } else {\r\n            throw new Error('IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder');\r\n        }\r\n    }\r\n\r\n    override tokenize(text: string, options: TokenizeOptions = DEFAULT_TOKENIZE_OPTIONS): LexerResult {\r\n        const result = super.tokenize(text);\r\n\r\n        // consuming all remaining dedents and remove them as they might not be serializable\r\n        const report = result.report as IndentationLexingReport;\r\n        if (options?.mode === 'full') {\r\n            // auto-complete document with remaining dedents\r\n            result.tokens.push(...report.remainingDedents);\r\n        }\r\n        report.remainingDedents = [];\r\n\r\n        // remove any \"indent-dedent\" pair with an empty body as these are typically\r\n        // added by comments or lines with just whitespace but have no real value\r\n        const { indentTokenType, dedentTokenType } = this.indentationTokenBuilder;\r\n        // Use tokenTypeIdx for fast comparison\r\n        const indentTokenIdx = indentTokenType.tokenTypeIdx;\r\n        const dedentTokenIdx = dedentTokenType.tokenTypeIdx;\r\n        const cleanTokens: IToken[] = [];\r\n        const length = result.tokens.length - 1;\r\n        for (let i = 0; i < length; i++) {\r\n            const token = result.tokens[i];\r\n            const nextToken = result.tokens[i + 1];\r\n            if (token.tokenTypeIdx === indentTokenIdx && nextToken.tokenTypeIdx === dedentTokenIdx) {\r\n                i++;\r\n                continue;\r\n            }\r\n\r\n            cleanTokens.push(token);\r\n        }\r\n        // Push last token separately\r\n        if (length >= 0) {\r\n            cleanTokens.push(result.tokens[length]);\r\n        }\r\n        result.tokens = cleanTokens;\r\n\r\n        return result;\r\n    }\r\n}\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './caching.js';\r\nexport * from './event.js';\r\nexport * from './collections.js';\r\nexport * from './disposable.js';\r\nexport * from './errors.js';\r\nexport * from './grammar-loader.js';\r\nexport * from './promise-utils.js';\r\nexport * from './stream.js';\r\nexport * from './uri-utils.js';\r\n\r\nimport * as AstUtils from './ast-utils.js';\r\nimport * as Cancellation from './cancellation.js';\r\nimport * as CstUtils from './cst-utils.js';\r\nimport * as GrammarUtils from './grammar-utils.js';\r\nimport * as RegExpUtils from './regexp-utils.js';\r\nexport { AstUtils, Cancellation, CstUtils, GrammarUtils, RegExpUtils };\r\n","/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { URI } from '../utils/uri-utils.js';\r\n\r\nexport interface FileSystemNode {\r\n    readonly isFile: boolean;\r\n    readonly isDirectory: boolean;\r\n    readonly uri: URI;\r\n}\r\n\r\nexport type FileSystemFilter = (node: FileSystemNode) => boolean;\r\n\r\n/**\r\n * Provides methods to interact with an abstract file system. The default implementation is based on the node.js `fs` API.\r\n */\r\nexport interface FileSystemProvider {\r\n    /**\r\n     * Reads a document asynchronously from a given URI.\r\n     * @returns The string content of the file with the specified URI.\r\n     */\r\n    readFile(uri: URI): Promise<string>;\r\n    /**\r\n     * Reads the directory information for the given URI.\r\n     * @returns The list of file system entries that are contained within the specified directory.\r\n     */\r\n    readDirectory(uri: URI): Promise<FileSystemNode[]>;\r\n}\r\n\r\nexport class EmptyFileSystemProvider implements FileSystemProvider {\r\n\r\n    readFile(): Promise<string> {\r\n        throw new Error('No file system is available.');\r\n    }\r\n\r\n    async readDirectory(): Promise<FileSystemNode[]> {\r\n        return [];\r\n    }\r\n\r\n}\r\n\r\nexport const EmptyFileSystem = {\r\n    fileSystemProvider: () => new EmptyFileSystemProvider()\r\n};\r\n","/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { createDefaultCoreModule, createDefaultSharedCoreModule } from '../default-module.js';\r\nimport type { Module } from '../dependency-injection.js';\r\nimport { inject } from '../dependency-injection.js';\r\nimport * as ast from '../languages/generated/ast.js';\r\nimport type { LangiumCoreServices, LangiumSharedCoreServices, PartialLangiumCoreServices, PartialLangiumSharedCoreServices } from '../services.js';\r\nimport type { Mutable } from '../syntax-tree.js';\r\nimport { EmptyFileSystem } from '../workspace/file-system-provider.js';\r\nimport { URI } from './uri-utils.js';\r\n\r\nconst minimalGrammarModule: Module<LangiumCoreServices, PartialLangiumCoreServices> = {\r\n    Grammar: () => undefined as unknown as ast.Grammar,\r\n    LanguageMetaData: () => ({\r\n        caseInsensitive: false,\r\n        fileExtensions: ['.langium'],\r\n        languageId: 'langium'\r\n    })\r\n};\r\n\r\nconst minimalSharedGrammarModule: Module<LangiumSharedCoreServices, PartialLangiumSharedCoreServices> = {\r\n    AstReflection: () => new ast.LangiumGrammarAstReflection()\r\n};\r\n\r\nfunction createMinimalGrammarServices(): LangiumCoreServices {\r\n    const shared = inject(\r\n        createDefaultSharedCoreModule(EmptyFileSystem),\r\n        minimalSharedGrammarModule\r\n    );\r\n    const grammar = inject(\r\n        createDefaultCoreModule({ shared }),\r\n        minimalGrammarModule\r\n    );\r\n    shared.ServiceRegistry.register(grammar);\r\n    return grammar;\r\n}\r\n\r\n/**\r\n * Load a Langium grammar for your language from a JSON string. This is used by several services,\r\n * most notably the parser builder which interprets the grammar to create a parser.\r\n */\r\nexport function loadGrammarFromJson(json: string): ast.Grammar {\r\n    const services = createMinimalGrammarServices();\r\n    const astNode = services.serializer.JsonSerializer.deserialize(json) as Mutable<ast.Grammar>;\r\n    services.shared.workspace.LangiumDocumentFactory.fromModel(astNode, URI.parse(`memory://${astNode.name ?? 'grammar'}.langium`));\r\n    return astNode;\r\n}\r\n","import { URI } from \"langium\";\n\nexport const BUILTIN_LIBRARY = `\nmodule Builtin\n\nscalar Float.[\n  const:float\n  lt:float\n  gt:float\n  lte:float\n  gte:float\n  positive: boolean\n  nonnegative: boolean\n  negative: boolean\n  nonpositive: boolean\n]\n\nscalar Int.[\n  const:int\n  lt:int\n  gt:int\n  lte:int\n  gte:int\n  positive: boolean\n  nonnegative: boolean\n  negative: boolean\n  nonpositive: boolean\n]\n\nscalar String.[\n  const:string\n  max:int\n  min:int\n  length:int\n  nonempty:boolean\n  pattern:string\n  email:boolean\n  uuid:boolean\n  prefix:string\n  suffix:string\n  url:boolean\n  nanoid:boolean\n]\n\nscalar Boolean.[\n  const:boolean\n]\n\nscalar Binary.[\n  min:int\n  min_kb:float\n  min_mb:float\n  max:int\n  max_kb:float\n  max_mb:float\n  nonempty:boolean\n]\n\nscalar Time\n\nscalar List<T>.[\n  max:int\n  min:int\n  length:int\n  nonempty:boolean\n]\n\nscalar Dictionary<T>.[\n  max:int\n  min:int\n  size:int\n  nonempty:boolean\n]\n\nscalar Union<A B ...>\n\ndirective Deprecated(reason?:string)\n\ndirective Optional on field\n\ndirective Relaxed on struct exception\n\ndirective Incremental on enum\n`;\n\nexport const BUILTIN_LIBRARY_URI = URI.parse(\"iproto:///builtin.iproto\").toString();\n","import {\n\tEventEmitter,\n\ttype ExtensionContext,\n\ttype FileChangeEvent,\n\ttype FileStat,\n\tFileSystemError,\n\ttype FileSystemProvider,\n\tFileType,\n\ttype Uri,\n\tworkspace,\n} from \"vscode\";\nimport { BUILTIN_LIBRARY } from \"../language/builtin/index.js\";\n\nexport class IprotoLibraryFileSystemProvider implements FileSystemProvider {\n\tstatic register(context: ExtensionContext) {\n\t\tcontext.subscriptions.push(\n\t\t\tworkspace.registerFileSystemProvider(\"iproto\", new IprotoLibraryFileSystemProvider(), {\n\t\t\t\tisReadonly: true,\n\t\t\t\tisCaseSensitive: false,\n\t\t\t}),\n\t\t);\n\t}\n\n\tstat(uri: Uri): FileStat {\n\t\tconst date = Date.now();\n\t\treturn {\n\t\t\tctime: date,\n\t\t\tmtime: date,\n\t\t\tsize: Buffer.from(BUILTIN_LIBRARY).length,\n\t\t\ttype: FileType.File,\n\t\t};\n\t}\n\n\treadFile(uri: Uri): Uint8Array {\n\t\treturn new Uint8Array(Buffer.from(BUILTIN_LIBRARY));\n\t}\n\n\tprivate readonly didChangeFile = new EventEmitter<FileChangeEvent[]>();\n\tonDidChangeFile = this.didChangeFile.event;\n\n\twatch() {\n\t\treturn {\n\t\t\tdispose: () => {},\n\t\t};\n\t}\n\n\treadDirectory(): [] {\n\t\tthrow FileSystemError.NoPermissions();\n\t}\n\n\tcreateDirectory() {\n\t\tthrow FileSystemError.NoPermissions();\n\t}\n\n\twriteFile() {\n\t\tthrow FileSystemError.NoPermissions();\n\t}\n\n\tdelete() {\n\t\tthrow FileSystemError.NoPermissions();\n\t}\n\n\trename() {\n\t\tthrow FileSystemError.NoPermissions();\n\t}\n}\n"]}